From 0a05481ee1f6384ac85dca6caf45208c26649e67 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 19:57:07 +0000 Subject: [PATCH 001/217] Allow one timestamp per request Closes gh-123 --- github.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/github.js b/github.js index 05f44259..bc87af50 100644 --- a/github.js +++ b/github.js @@ -63,7 +63,8 @@ } } - return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : ''); + return url.replace(/(×tamp=\d+)/, '') + + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); } var xhr = new XMLHttpRequest(); From ca074cb9909596314736319e8ed457cff005d7e0 Mon Sep 17 00:00:00 2001 From: pik Date: Sat, 28 Nov 2015 18:10:47 +0800 Subject: [PATCH 002/217] Add getStatuses repo endpoint * added test for getStatuses * updated Readme to include repo.getStatuses method Closes gh-256 --- README.md | 6 ++++++ github.js | 7 +++++++ test/test.repo.js | 10 ++++++++++ 3 files changed, 23 insertions(+) diff --git a/README.md b/README.md index 2013525e..8cb30188 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,12 @@ Retrieve all available branches (aka heads) of a repository. repo.listBranches(function(err, branches) {}); ``` +Get list of statuses for a particular commit. + +```js +repo.getStatuses(sha, function(err, statuses) {}); +``` + Store contents at a certain path, where files that don't yet exist are created on the fly. You can also provide an optional object literal, (`options` in the example below) containing information about the author and the committer. diff --git a/github.js b/github.js index bc87af50..6d1dbee0 100644 --- a/github.js +++ b/github.js @@ -521,6 +521,13 @@ }); }; + // Get the statuses for a particular SHA + // ------- + + this.getStatuses = function(sha, cb) { + _request('GET', repoPath + '/statuses/' + sha, null, cb); + }; + // Retrieve the tree a commit points to // ------- diff --git a/test/test.repo.js b/test/test.repo.js index 4f38c921..1e8bad09 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -120,6 +120,16 @@ describe('Github.Repository', function() { }); }); + it('should get statuses for a SHA from a repo', function(done) { + repo.getStatuses('20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, statuses) { + statuses.length.should.equal(6) + statuses.every(function(status) { + return status.url === 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b' + }).should.equal(true); + done(); + }); + }); + it('should get a SHA from a repo', function(done) { repo.getSha('master', '.gitignore', function(err, sha) { should.not.exist(err); From a4a497d1006c828ab7347437a5ddc37901161acd Mon Sep 17 00:00:00 2001 From: Max White Date: Fri, 4 Sep 2015 13:32:02 +0100 Subject: [PATCH 003/217] Added listForks Closes gh-216 --- README.md | 6 ++++++ github.js | 9 ++++++++- test/test.repo.js | 9 +++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8cb30188..d79f3006 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,12 @@ Fork repository. This operation runs asynchronously. You may want to poll for `r repo.fork(function(err) {}); ``` +List forks. + +```js +repo.listForks(function(err, forks) {}); +``` + Create new branch for repo. You can omit oldBranchName to default to "master". ```js diff --git a/github.js b/github.js index 6d1dbee0..6b731f2f 100644 --- a/github.js +++ b/github.js @@ -682,6 +682,13 @@ _request('POST', repoPath + '/forks', null, cb); }; + // List forks + // -------- + + this.listForks = function(cb) { + _request('GET', repoPath + '/forks', null, cb); + }; + // Branch repository // -------- @@ -1045,4 +1052,4 @@ }; return Github; -})); +})); \ No newline at end of file diff --git a/test/test.repo.js b/test/test.repo.js index 1e8bad09..d5bab61f 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -83,6 +83,15 @@ describe('Github.Repository', function() { }); }); + it('should list forks of repo', function(done) { + repo.listForks(function(err) { + should.not.exist(err); + + // @TODO write better assertion. + done(); + }); + }); + it('should show repo contributors', function(done) { repo.contributors(function(err, res) { should.not.exist(err); From b59230eae6d48273d2a8e875e7c99c6dcf0cb0cb Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 28 Nov 2015 12:52:57 +0000 Subject: [PATCH 004/217] Improved documentation for the repo.write method Fixes gh-85 --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index d79f3006..9c25b59f 100644 --- a/README.md +++ b/README.md @@ -143,8 +143,7 @@ Get list of statuses for a particular commit. repo.getStatuses(sha, function(err, statuses) {}); ``` -Store contents at a certain path, where files that don't yet exist are created on the fly. -You can also provide an optional object literal, (`options` in the example below) containing information about the author and the committer. +Store content at a certain path. If the file specified in the path exists, the content is updated. If the file doesn't exist, it's created on the fly. You can also provide an optional object literal, (`options` in the example below) containing information about the author and the committer. ```js var options = { From d83f32db98029673ff61fb2b23d3152fd755d9aa Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 28 Nov 2015 16:49:22 +0000 Subject: [PATCH 005/217] Update README.md Fixed link of the build badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9c25b59f..e2914290 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Github.js -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/michael/github?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)[![Stories in Ready](https://badge.waffle.io/michael/github.png?label=ready&title=Ready)](https://waffle.io/michael/github)[![Build Status](https://travis-ci.org/darvin/github.svg?branch=master)](https://travis-ci.org/darvin/github)[![codecov.io](https://codecov.io/github/michael/github/coverage.svg?branch=master)](https://codecov.io/github/michael/github?branch=master) +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/michael/github?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Stories in Ready](https://badge.waffle.io/michael/github.png?label=ready&title=Ready)](https://waffle.io/michael/github) [![Build Status](https://travis-ci.org/michael/github.svg?branch=master)](https://travis-ci.org/michael/github) [![codecov.io](https://codecov.io/github/michael/github/coverage.svg?branch=master)](https://codecov.io/github/michael/github?branch=master) Github.js provides a minimal higher-level wrapper around git's [plumbing commands](http://git-scm.com/book/en/Git-Internals-Plumbing-and-Porcelain), exposing an API for manipulating GitHub repositories on the file level. It was formerly developed in the context of [Prose](http://prose.io), a content editor for GitHub. From d9e33891bb98dae0dcdabd19342c4388bfc00790 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Mon, 30 Nov 2015 19:13:23 +0000 Subject: [PATCH 006/217] Removed duplicated deleteRepo method --- github.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/github.js b/github.js index 6b731f2f..2e0d3591 100644 --- a/github.js +++ b/github.js @@ -3,7 +3,7 @@ * * @copyright (c) 2013 Michael Aufreiter, Development Seed * Github.js is freely distributable. - * + *de * @license Licensed under BSD-3-Clause-Clear * * For all details and documentation: @@ -323,13 +323,6 @@ sha: null }; - // Delete a repo - // -------- - - this.deleteRepo = function(cb) { - _request('DELETE', repoPath, options, cb); - }; - // Uses the cache if branch has not been changed // ------- @@ -1052,4 +1045,4 @@ }; return Github; -})); \ No newline at end of file +})); From c66632445478972cf1206c32b80c67e30555e4d7 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 20:12:51 +0000 Subject: [PATCH 007/217] Better extraction of next URL Closes gh-261 --- github.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/github.js b/github.js index 2e0d3591..2abfc112 100644 --- a/github.js +++ b/github.js @@ -123,16 +123,15 @@ results.push.apply(results, res); - var links = (xhr.getResponseHeader('link') || '').split(/\s*,\s*/g); - var next = null; - - links.forEach(function(link) { - next = /rel="next"/.test(link) ? link : next; - }); - - if (next) { - next = (/<(.*)>/.exec(next) || [])[1]; - } + var next = (xhr.getResponseHeader('link') || '') + .split(';') + .filter(function(part) { + return part.search(/rel="next"/) !== -1; + }) + .map(function(part) { + return part.match(/<(.+?)>/)[1]; + }) + .pop(); if (!next) { cb(err, results); From 625e72a76a7936e9c8524871aa97aaff68069074 Mon Sep 17 00:00:00 2001 From: Tim van der Lippe Date: Thu, 31 Dec 2015 15:02:14 +0100 Subject: [PATCH 008/217] README: Fixed a typo Closing gh-269 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e2914290..a5b1be9d 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ See these pages for more info: [Creating an access token for command-line use](https://help.github.com/articles/creating-an-access-token-for-command-line-use) -[Github API OAuth Overview] (http://developer.github.com/v3/oauth) +[Github API OAuth Overview](http://developer.github.com/v3/oauth) Enterprise Github instances may be specified using the `apiUrl` option: From 550d4d80613efde3f427f00fa403f002b2e61791 Mon Sep 17 00:00:00 2001 From: Ofek Gila Date: Sat, 2 Jan 2016 14:36:12 -0800 Subject: [PATCH 009/217] README: Fixed a typo Closes gh-271 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5b1be9d..5fa5a7fc 100644 --- a/README.md +++ b/README.md @@ -237,7 +237,7 @@ List repositories of the authenticated user, including private repositories and user.repos(options, function(err, repos) {}); ``` -List organizations the autenticated user belongs to. +List organizations the authenticated user belongs to. ```js user.orgs(function(err, orgs) {}); From f4c3e6d8045ea567cccdc0802e1769a85c6b690c Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Tue, 5 Jan 2016 23:24:18 +0000 Subject: [PATCH 010/217] Removed unneeded comments Fixes gh-276 --- github.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/github.js b/github.js index 2abfc112..9e73e9fc 100644 --- a/github.js +++ b/github.js @@ -9,14 +9,11 @@ * For all details and documentation: * http://substance.io/michael/github */ - (function (root, factory) { - // UMD boilerplate from https://github.com/umdjs/umd/blob/master/returnExportsGlobal.js 'use strict'; /* istanbul ignore next */ if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. define(['xmlhttprequest', 'js-base64'], function (XMLHttpRequest, b64encode) { return (root.Github = factory(XMLHttpRequest.XMLHttpRequest, b64encode.Base64.encode)); }); @@ -27,7 +24,6 @@ module.exports = factory(require('xmlhttprequest').XMLHttpRequest, require('js-base64').Base64.encode); } } else { - // Browser globals var b64encode = function(str) { return root.btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { return String.fromCharCode('0x' + p1); From e63cdda04dbe40ff28ff729af46c0c52d1916a47 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:32:24 +0000 Subject: [PATCH 011/217] Formatted user.json file --- test/user.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/user.json b/test/user.json index 2c57a9ed..5fdc8e86 100644 --- a/test/user.json +++ b/test/user.json @@ -1 +1,5 @@ -{"USERNAME": "mikedeboertest", "PASSWORD": "test1324", "REPO": "github"} +{ + "USERNAME": "mikedeboertest", + "PASSWORD": "test1324", + "REPO": "github" +} \ No newline at end of file From 6c503e2e11f8dde408ca0f68033c5b2fca27016f Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 28 Nov 2015 16:32:21 +0000 Subject: [PATCH 012/217] Updated dependencies and devDependencies --- package.json | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 01a8ec3f..e9d4cb0c 100644 --- a/package.json +++ b/package.json @@ -4,30 +4,38 @@ "description": "A higher-level wrapper around the Github API.", "main": "github.js", "dependencies": { - "js-base64": "^2.1.8", - "xmlhttprequest": "~1.7.0" + "axios": "^0.9.0", + "base-64": "^0.1.0", + "es6-promise": "^3.0.2", + "utf8": "^2.1.1" }, "devDependencies": { - "chai": "^3.4.0", + "browserify": "^13.0.0", + "chai": "^3.4.1", "codecov": "^1.0.1", + "del": "^2.2.0", "gulp": "^3.9.0", - "gulp-jscs": "^3.0.1", - "gulp-jscs-stylish": "^1.2.1", - "gulp-jshint": "^1.11.2", + "gulp-jscs": "^3.0.2", + "gulp-jscs-stylish": "^1.3.0", + "gulp-jshint": "^2.0.0", "gulp-rename": "^1.2.2", - "gulp-uglify": "^1.4.2", - "istanbul": "^0.3.13", - "jshint": "^2.5.8", - "jshint-stylish": "^2.0.1", - "karma": "^0.13.14", + "gulp-sourcemaps": "^1.6.0", + "gulp-uglify": "^1.5.1", + "istanbul": "^0.4.2", + "jshint": "^2.9.1", + "jshint-stylish": "^2.1.0", + "karma": "^0.13.19", + "karma-browserify": "^4.4.2", "karma-chai": "^0.1.0", "karma-coverage": "^0.5.3", - "karma-json-fixtures-preprocessor": "0.0.5", - "karma-mocha": "^0.2.0", - "karma-mocha-reporter": "^1.1.1", - "karma-phantomjs-launcher": "^0.2.1", + "karma-json-fixtures-preprocessor": "0.0.6", + "karma-mocha": "^0.2.1", + "karma-mocha-reporter": "^1.1.5", + "karma-phantomjs-launcher": "^0.2.3", "karma-sauce-launcher": "^0.3.0", - "mocha": "^2.3.3" + "mocha": "^2.3.4", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0" }, "scripts": { "test": "gulp test && gulp lint", From 759dadd8fc910aac1d87f07e6a907622d513e94b Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:47:43 +0000 Subject: [PATCH 013/217] Integrated axios --- bower.json | 2 +- package.json | 6 +- github.js => src/github.js | 397 ++++++++++++++++++------------------- 3 files changed, 199 insertions(+), 206 deletions(-) rename github.js => src/github.js (73%) diff --git a/bower.json b/bower.json index fc1f8c17..a0f4d1d3 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name":"github-api", - "main":"github.js", + "main":"src/github.js", "homepage":"https://github.com/michael/github", "authors":[ "Sergey Klimov (http://darvin.github.com/)" diff --git a/package.json b/package.json index e9d4cb0c..348913df 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "github-api", "version": "0.10.7", "description": "A higher-level wrapper around the Github API.", - "main": "github.js", + "main": "src/github.js", "dependencies": { "axios": "^0.9.0", "base-64": "^0.1.0", @@ -60,9 +60,5 @@ "gitHead": "aa8aa3c8cd5ce5240373d4fd1d06a7ab4af41a36", "bugs": { "url": "https://github.com/michael/github/issues" - }, - "browser": { - "xmlhttprequest": false, - "base64": false } } diff --git a/github.js b/src/github.js similarity index 73% rename from github.js rename to src/github.js index 9e73e9fc..33a5fec4 100644 --- a/github.js +++ b/src/github.js @@ -3,42 +3,37 @@ * * @copyright (c) 2013 Michael Aufreiter, Development Seed * Github.js is freely distributable. - *de + * * @license Licensed under BSD-3-Clause-Clear * * For all details and documentation: * http://substance.io/michael/github */ -(function (root, factory) { - 'use strict'; +'use strict'; - /* istanbul ignore next */ +(function (root, factory) { if (typeof define === 'function' && define.amd) { - define(['xmlhttprequest', 'js-base64'], function (XMLHttpRequest, b64encode) { - return (root.Github = factory(XMLHttpRequest.XMLHttpRequest, b64encode.Base64.encode)); + define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) { + return (root.Github = factory(Promise, Base64, Utf8, axios)); }); } else if (typeof module === 'object' && module.exports) { - if (typeof window !== 'undefined') { // jscs:ignore - module.exports = factory(window.XMLHttpRequest, window.btoa); - } else { // jscs:ignore - module.exports = factory(require('xmlhttprequest').XMLHttpRequest, require('js-base64').Base64.encode); - } + module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios')); } else { - var b64encode = function(str) { - return root.btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { - return String.fromCharCode('0x' + p1); - })); - }; + root.Github = factory(root.Promise, root.base64, root.utf8, root.axios); + } +}(this, function(Promise, Base64, Utf8, axios) { + function b64encode(string) { + return Base64.encode(Utf8.encode(string)); + } - root.Github = factory(root.XMLHttpRequest, b64encode); + if (Promise.polyfill) { + Promise.polyfill(); } -}(this, function (XMLHttpRequest, b64encode) { - 'use strict'; // Initial Setup // ------------- - var Github = function(options) { + var Github = function (options) { var API_URL = options.apiUrl || 'https://api.github.com'; // HTTP Request Abstraction @@ -46,88 +41,83 @@ // // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec. - var _request = Github._request = function _request(method, path, data, cb, raw, sync) { + var _request = Github._request = function _request(method, path, data, cb, raw) { function getURL() { var url = path.indexOf('//') >= 0 ? path : API_URL + path; url += ((/\?/).test(url) ? '&' : '?'); if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { - for(var param in data) { + for (var param in data) { if (data.hasOwnProperty(param)) - url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); + url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); } } - return url.replace(/(×tamp=\d+)/, '') + - (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); + return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : ''); } - var xhr = new XMLHttpRequest(); - - xhr.open(method, getURL(), !sync); - - if (!sync) { - xhr.onreadystatechange = function () { - if (this.readyState === 4) { - if (this.status >= 200 && this.status < 300 || this.status === 304) { - cb(null, raw ? this.responseText : this.responseText ? JSON.parse(this.responseText) : true, this); - } else { - cb({ - path: path, request: this, error: this.status - }); - } - } - }; - } - - if (!raw) { - xhr.dataType = 'json'; - xhr.setRequestHeader('Accept', 'application/vnd.github.v3+json'); - } else { - xhr.setRequestHeader('Accept', 'application/vnd.github.v3.raw+json'); - } - - xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); + var config = { + headers: { + Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', + 'Content-Type': 'application/json;charset=UTF-8' + }, + method: method, + data: data ? data : {}, + url: getURL() + }; if ((options.token) || (options.username && options.password)) { - var authorization = options.token ? 'token ' + options.token : - 'Basic ' + b64encode(options.username + ':' + options.password); - - xhr.setRequestHeader('Authorization', authorization); + config.headers['Authorization'] = options.token ? + 'token ' + options.token : + 'Basic ' + b64encode(options.username + ':' + options.password); } - if (data) { - xhr.send(JSON.stringify(data)); - } else { - xhr.send(); - } - - if (sync) { - return xhr.response; - } + return axios(config) + .then(function (response) { + cb( + null, + raw ? JSON.stringify(response.data) : response.data || true, + response + ); + }, function (response) { + if (response.status === 304) { + cb( + null, + response.data || true, + response + ); + } else { + cb({ + path: path, + request: response.data, + error: response.status + }); + } + }); }; var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) { var results = []; (function iterate() { - _request('GET', path, null, function(err, res, xhr) { + _request('GET', path, null, function (err, res, xhr) { if (err) { return cb(err); } results.push.apply(results, res); - var next = (xhr.getResponseHeader('link') || '') - .split(';') - .filter(function(part) { - return part.search(/rel="next"/) !== -1; - }) - .map(function(part) { - return part.match(/<(.+?)>/)[1]; - }) - .pop(); + var links = (xhr.headers.link || '').split(/\s*,\s*/g); + var next = null; + + links.forEach(function (link) { + next = /rel="next"/.test(link) ? link : next; + }); + + if (next) { + next = (/<(.*)>/.exec(next) || [])[1]; + } if (!next) { cb(err, results); @@ -142,8 +132,8 @@ // User API // ======= - Github.User = function() { - this.repos = function(options, cb) { + Github.User = function () { + this.repos = function (options, cb) { if (arguments.length === 1 && typeof arguments[0] === 'function') { cb = options; options = {}; @@ -156,7 +146,7 @@ params.push('type=' + encodeURIComponent(options.type || 'all')); params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '1000')); // jscs:ignore + params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore if (options.page) { params.push('page=' + encodeURIComponent(options.page)); @@ -170,21 +160,21 @@ // List user organizations // ------- - this.orgs = function(cb) { + this.orgs = function (cb) { _request('GET', '/user/orgs', null, cb); }; // List authenticated user's gists // ------- - this.gists = function(cb) { + this.gists = function (cb) { _request('GET', '/gists', null, cb); }; // List authenticated user's unread notifications // ------- - this.notifications = function(options, cb) { + this.notifications = function (options, cb) { if (arguments.length === 1 && typeof arguments[0] === 'function') { cb = options; options = {}; @@ -236,7 +226,7 @@ // Show user information // ------- - this.show = function(username, cb) { + this.show = function (username, cb) { var command = username ? '/users/' + username : '/user'; _request('GET', command, null, cb); @@ -245,17 +235,17 @@ // List user repositories // ------- - this.userRepos = function(username, cb) { + this.userRepos = function (username, cb) { // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/users/' + username + '/repos?type=all&per_page=1000&sort=updated', cb); + _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb); }; // List user starred repositories // ------- - this.userStarred = function(username, cb) { + this.userStarred = function (username, cb) { // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/users/' + username + '/starred?type=all&per_page=1000', function(err, res) { + _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) { cb(err, res); }); }; @@ -263,14 +253,14 @@ // List a user's gists // ------- - this.userGists = function(username, cb) { + this.userGists = function (username, cb) { _request('GET', '/users/' + username + '/gists', null, cb); }; // List organization repositories // ------- - this.orgRepos = function(orgname, cb) { + this.orgRepos = function (orgname, cb) { // Github does not always honor the 1000 limit so we want to iterate over the data set. _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb); }; @@ -278,20 +268,20 @@ // Follow user // ------- - this.follow = function(username, cb) { + this.follow = function (username, cb) { _request('PUT', '/user/following/' + username, null, cb); }; // Unfollow user // ------- - this.unfollow = function(username, cb) { + this.unfollow = function (username, cb) { _request('DELETE', '/user/following/' + username, null, cb); }; // Create a repo // ------- - this.createRepo = function(options, cb) { + this.createRepo = function (options, cb) { _request('POST', '/user/repos', options, cb); }; }; @@ -299,7 +289,7 @@ // Repository API // ======= - Github.Repository = function(options) { + Github.Repository = function (options) { var repo = options.name; var user = options.user; var fullname = options.fullname; @@ -318,6 +308,13 @@ sha: null }; + // Delete a repo + // -------- + + this.deleteRepo = function (cb) { + _request('DELETE', repoPath, options, cb); + }; + // Uses the cache if branch has not been changed // ------- @@ -326,7 +323,7 @@ return cb(null, currentTree.sha); } - that.getRef('heads/' + branch, function(err, sha) { + that.getRef('heads/' + branch, function (err, sha) { currentTree.branch = branch; currentTree.sha = sha; cb(err, sha); @@ -336,8 +333,8 @@ // Get a particular reference // ------- - this.getRef = function(ref, cb) { - _request('GET', repoPath + '/git/refs/' + ref, null, function(err, res, xhr) { + this.getRef = function (ref, cb) { + _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) { if (err) { return cb(err); } @@ -354,7 +351,7 @@ // "sha": "827efc6d56897b048c772eb4087f854f46256132" // } - this.createRef = function(options, cb) { + this.createRef = function (options, cb) { _request('POST', repoPath + '/git/refs', options, cb); }; @@ -364,8 +361,8 @@ // Repo.deleteRef('heads/gh-pages') // repo.deleteRef('tags/v1.0') - this.deleteRef = function(ref, cb) { - _request('DELETE', repoPath + '/git/refs/' + ref, options, function(err, res, xhr) { + this.deleteRef = function (ref, cb) { + _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) { cb(err, res, xhr); }); }; @@ -373,22 +370,22 @@ // Create a repo // ------- - this.createRepo = function(options, cb) { + this.createRepo = function (options, cb) { _request('POST', '/user/repos', options, cb); }; // Delete a repo // -------- - this.deleteRepo = function(cb) { + this.deleteRepo = function (cb) { _request('DELETE', repoPath, options, cb); }; // List all tags of a repository // ------- - this.listTags = function(cb) { - _request('GET', repoPath + '/tags', null, function(err, tags, xhr) { + this.listTags = function (cb) { + _request('GET', repoPath + '/tags', null, function (err, tags, xhr) { if (err) { return cb(err); } @@ -400,7 +397,7 @@ // List all pull requests of a respository // ------- - this.listPulls = function(options, cb) { + this.listPulls = function (options, cb) { options = options || {}; var url = repoPath + '/pulls'; var params = []; @@ -442,7 +439,7 @@ url += '?' + params.join('&'); } - _request('GET', url, null, function(err, pulls, xhr) { + _request('GET', url, null, function (err, pulls, xhr) { if (err) return cb(err); cb(null, pulls, xhr); }); @@ -451,8 +448,8 @@ // Gets details for a specific pull request // ------- - this.getPull = function(number, cb) { - _request('GET', repoPath + '/pulls/' + number, null, function(err, pull, xhr) { + this.getPull = function (number, cb) { + _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) { if (err) return cb(err); cb(null, pull, xhr); }); @@ -461,8 +458,8 @@ // Retrieve the changes made between base and head // ------- - this.compare = function(base, head, cb) { - _request('GET', repoPath + '/compare/' + base + '...' + head, null, function(err, diff, xhr) { + this.compare = function (base, head, cb) { + _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) { if (err) return cb(err); cb(null, diff, xhr); }); @@ -471,10 +468,10 @@ // List all branches of a repository // ------- - this.listBranches = function(cb) { - _request('GET', repoPath + '/git/refs/heads', null, function(err, heads, xhr) { + this.listBranches = function (cb) { + _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) { if (err) return cb(err); - cb(null, heads.map(function(head) { + cb(null, heads.map(function (head) { return head.ref.replace(/^refs\/heads\//, ''); }), xhr); }); @@ -483,15 +480,15 @@ // Retrieve the contents of a blob // ------- - this.getBlob = function(sha, cb) { + this.getBlob = function (sha, cb) { _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw'); }; // For a given file path, get the corresponding sha (blob for files, tree for dirs) // ------- - this.getCommit = function(branch, sha, cb) { - _request('GET', repoPath + '/git/commits/' + sha, null, function(err, commit, xhr) { + this.getCommit = function (branch, sha, cb) { + _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) { if (err) return cb(err); cb(null, commit, xhr); }); @@ -500,10 +497,10 @@ // For a given file path, get the corresponding sha (blob for files, tree for dirs) // ------- - this.getSha = function(branch, path, cb) { + this.getSha = function (branch, path, cb) { if (!path || path === '') return that.getRef('heads/' + branch, cb); _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), - null, function(err, pathContent, xhr) { + null, function (err, pathContent, xhr) { if (err) return cb(err); cb(null, pathContent.sha, xhr); }); @@ -512,15 +509,15 @@ // Get the statuses for a particular SHA // ------- - this.getStatuses = function(sha, cb) { + this.getStatuses = function (sha, cb) { _request('GET', repoPath + '/statuses/' + sha, null, cb); }; // Retrieve the tree a commit points to // ------- - this.getTree = function(tree, cb) { - _request('GET', repoPath + '/git/trees/' + tree, null, function(err, res, xhr) { + this.getTree = function (tree, cb) { + _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) { if (err) return cb(err); cb(null, res.tree, xhr); }); @@ -529,7 +526,7 @@ // Post a new blob object, getting a blob SHA back // ------- - this.postBlob = function(content, cb) { + this.postBlob = function (content, cb) { if (typeof (content) === 'string') { content = { content: content, @@ -542,7 +539,7 @@ }; } - _request('POST', repoPath + '/git/blobs', content, function(err, res) { + _request('POST', repoPath + '/git/blobs', content, function (err, res) { if (err) return cb(err); cb(null, res.sha); }); @@ -551,20 +548,20 @@ // Update an existing tree adding a new blob object getting a tree SHA back // ------- - this.updateTree = function(baseTree, path, blob, cb) { + this.updateTree = function (baseTree, path, blob, cb) { var data = { base_tree: baseTree, tree: [ - { - path: path, - mode: '100644', - type: 'blob', - sha: blob - } - ] + { + path: path, + mode: '100644', + type: 'blob', + sha: blob + } + ] }; - _request('POST', repoPath + '/git/trees', data, function(err, res) { + _request('POST', repoPath + '/git/trees', data, function (err, res) { if (err) return cb(err); cb(null, res.sha); }); @@ -574,10 +571,10 @@ // with a new blob SHA getting a tree SHA back // ------- - this.postTree = function(tree, cb) { + this.postTree = function (tree, cb) { _request('POST', repoPath + '/git/trees', { tree: tree - }, function(err, res) { + }, function (err, res) { if (err) return cb(err); cb(null, res.sha); }); @@ -587,10 +584,10 @@ // and the new tree SHA, getting a commit SHA back // ------- - this.commit = function(parent, tree, message, cb) { + this.commit = function (parent, tree, message, cb) { var user = new Github.User(); - user.show(null, function(err, userData) { + user.show(null, function (err, userData) { if (err) return cb(err); var data = { message: message, @@ -599,12 +596,12 @@ email: userData.email }, parents: [ - parent + parent ], tree: tree }; - _request('POST', repoPath + '/git/commits', data, function(err, res) { + _request('POST', repoPath + '/git/commits', data, function (err, res) { if (err) return cb(err); currentTree.sha = res.sha; // Update latest commit cb(null, res.sha); @@ -615,10 +612,10 @@ // Update the reference of your head to point to the new commit SHA // ------- - this.updateHead = function(head, commit, cb) { + this.updateHead = function (head, commit, cb) { _request('PATCH', repoPath + '/git/refs/heads/' + head, { sha: commit - }, function(err) { + }, function (err) { cb(err); }); }; @@ -626,7 +623,7 @@ // Show repository information // ------- - this.show = function(cb) { + this.show = function (cb) { _request('GET', repoPath, null, cb); }; @@ -642,11 +639,11 @@ if (xhr.status === 202) { setTimeout( - function () { - that.contributors(cb, retry); - }, - retry - ); + function () { + that.contributors(cb, retry); + }, + retry + ); } else { cb(err, data, xhr); } @@ -656,7 +653,7 @@ // Get contents // -------- - this.contents = function(ref, path, cb) { + this.contents = function (ref, path, cb) { path = encodeURI(path); _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), { ref: ref @@ -666,28 +663,28 @@ // Fork repository // ------- - this.fork = function(cb) { + this.fork = function (cb) { _request('POST', repoPath + '/forks', null, cb); }; // List forks // -------- - this.listForks = function(cb) { + this.listForks = function (cb) { _request('GET', repoPath + '/forks', null, cb); }; // Branch repository // -------- - this.branch = function(oldBranch, newBranch, cb) { + this.branch = function (oldBranch, newBranch, cb) { if (arguments.length === 2 && typeof arguments[1] === 'function') { cb = newBranch; newBranch = oldBranch; oldBranch = 'master'; } - this.getRef('heads/' + oldBranch, function(err, ref) { + this.getRef('heads/' + oldBranch, function (err, ref) { if (err && cb) return cb(err); that.createRef({ ref: 'refs/heads/' + newBranch, @@ -699,51 +696,51 @@ // Create pull request // -------- - this.createPullRequest = function(options, cb) { + this.createPullRequest = function (options, cb) { _request('POST', repoPath + '/pulls', options, cb); }; // List hooks // -------- - this.listHooks = function(cb) { + this.listHooks = function (cb) { _request('GET', repoPath + '/hooks', null, cb); }; // Get a hook // -------- - this.getHook = function(id, cb) { + this.getHook = function (id, cb) { _request('GET', repoPath + '/hooks/' + id, null, cb); }; // Create a hook // -------- - this.createHook = function(options, cb) { + this.createHook = function (options, cb) { _request('POST', repoPath + '/hooks', options, cb); }; // Edit a hook // -------- - this.editHook = function(id, options, cb) { + this.editHook = function (id, options, cb) { _request('PATCH', repoPath + '/hooks/' + id, options, cb); }; // Delete a hook // -------- - this.deleteHook = function(id, cb) { + this.deleteHook = function (id, cb) { _request('DELETE', repoPath + '/hooks/' + id, null, cb); }; // Read file at given path // ------- - this.read = function(branch, path, cb) { + this.read = function (branch, path, cb) { _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), - null, function(err, obj, xhr) { + null, function (err, obj, xhr) { if (err && err.error === 404) return cb('not found', null, null); if (err) return cb(err); @@ -754,8 +751,8 @@ // Remove a file // ------- - this.remove = function(branch, path, cb) { - that.getSha(branch, path, function(err, sha) { + this.remove = function (branch, path, cb) { + that.getSha(branch, path, function (err, sha) { if (err) return cb(err); _request('DELETE', repoPath + '/contents/' + path, { message: path + ' is removed', @@ -772,19 +769,19 @@ // Move a file to a new location // ------- - this.move = function(branch, path, newPath, cb) { - updateTree(branch, function(err, latestCommit) { - that.getTree(latestCommit + '?recursive=true', function(err, tree) { + this.move = function (branch, path, newPath, cb) { + updateTree(branch, function (err, latestCommit) { + that.getTree(latestCommit + '?recursive=true', function (err, tree) { // Update Tree - tree.forEach(function(ref) { + tree.forEach(function (ref) { if (ref.path === path) ref.path = newPath; if (ref.type === 'tree') delete ref.sha; }); - that.postTree(tree, function(err, rootTree) { - that.commit(latestCommit, rootTree, 'Deleted ' + path , function(err, commit) { - that.updateHead(branch, commit, function(err) { + that.postTree(tree, function (err, rootTree) { + that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) { + that.updateHead(branch, commit, function (err) { cb(err); }); }); @@ -796,13 +793,13 @@ // Write file contents to a given branch and path // ------- - this.write = function(branch, path, content, message, options, cb) { + this.write = function (branch, path, content, message, options, cb) { if (typeof cb === 'undefined') { cb = options; options = {}; } - that.getSha(branch, encodeURI(path), function(err, sha) { + that.getSha(branch, encodeURI(path), function (err, sha) { var writeOptions = { message: message, content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content, @@ -824,7 +821,7 @@ // until: ISO 8601 date - only commits before this date will be returned // ------- - this.getCommits = function(options, cb) { + this.getCommits = function (options, cb) { options = options || {}; var url = repoPath + '/commits'; var params = []; @@ -876,14 +873,14 @@ // Gists API // ======= - Github.Gist = function(options) { + Github.Gist = function (options) { var id = options.id; var gistPath = '/gists/' + id; // Read the gist // -------- - this.read = function(cb) { + this.read = function (cb) { _request('GET', gistPath, null, cb); }; @@ -899,49 +896,49 @@ // } // } - this.create = function(options, cb) { + this.create = function (options, cb) { _request('POST', '/gists', options, cb); }; // Delete the gist // -------- - this.delete = function(cb) { + this.delete = function (cb) { _request('DELETE', gistPath, null, cb); }; // Fork a gist // -------- - this.fork = function(cb) { + this.fork = function (cb) { _request('POST', gistPath + '/fork', null, cb); }; // Update a gist with the new stuff // -------- - this.update = function(options, cb) { + this.update = function (options, cb) { _request('PATCH', gistPath, options, cb); }; // Star a gist // -------- - this.star = function(cb) { + this.star = function (cb) { _request('PUT', gistPath + '/star', null, cb); }; // Untar a gist // -------- - this.unstar = function(cb) { + this.unstar = function (cb) { _request('DELETE', gistPath + '/star', null, cb); }; // Check if a gist is starred // -------- - this.isStarred = function(cb) { + this.isStarred = function (cb) { _request('GET', gistPath + '/star', null, cb); }; }; @@ -949,13 +946,13 @@ // Issues API // ========== - Github.Issue = function(options) { + Github.Issue = function (options) { var path = '/repos/' + options.user + '/' + options.repo + '/issues'; - this.list = function(options, cb) { + this.list = function (options, cb) { var query = []; - for(var key in options) { + for (var key in options) { if (options.hasOwnProperty(key)) { query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key])); } @@ -964,10 +961,10 @@ _requestAllPages(path + '?' + query.join('&'), cb); }; - this.comment = function(issue, comment, cb) { + this.comment = function (issue, comment, cb) { _request('POST', issue.comments_url, { body: comment - }, function(err, res) { + }, function (err, res) { cb(err, res); }); }; @@ -976,23 +973,23 @@ // Search API // ========== - Github.Search = function(options) { + Github.Search = function (options) { var path = '/search/'; var query = '?q=' + options.query; - this.repositories = function(options, cb) { + this.repositories = function (options, cb) { _request('GET', path + 'repositories' + query, options, cb); }; - this.code = function(options, cb) { + this.code = function (options, cb) { _request('GET', path + 'code' + query, options, cb); }; - this.issues = function(options, cb) { + this.issues = function (options, cb) { _request('GET', path + 'issues' + query, options, cb); }; - this.users = function(options, cb) { + this.users = function (options, cb) { _request('GET', path + 'users' + query, options, cb); }; }; @@ -1000,44 +997,44 @@ return Github; }; - // Top Level API - // ------- +// Top Level API +// ------- - Github.getIssues = function(user, repo) { + Github.getIssues = function (user, repo) { return new Github.Issue({ - user: user, repo: repo + user: user, + repo: repo }); }; - Github.getRepo = function(user, repo) { + Github.getRepo = function (user, repo) { if (!repo) { - var fullname = user; - return new Github.Repository({ - fullname: fullname + fullname: user }); } else { return new Github.Repository({ - user: user, name: repo + user: user, + name: repo }); } }; - Github.getUser = function() { + Github.getUser = function () { return new Github.User(); }; - Github.getGist = function(id) { + Github.getGist = function (id) { return new Github.Gist({ id: id }); }; - Github.getSearch = function(query) { + Github.getSearch = function (query) { return new Github.Search({ query: query }); }; return Github; -})); +})); \ No newline at end of file From bb0cc57baa128d43e6a17fc0e6040dd205f138be Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:55:19 +0000 Subject: [PATCH 014/217] Tests updated --- src/github.js | 2 +- test/test.auth.js | 26 +++++++------------------- test/test.issue.js | 19 ++++--------------- test/test.repo.js | 29 ++++++++--------------------- test/test.search.js | 13 ++----------- test/test.user.js | 16 +++------------- 6 files changed, 25 insertions(+), 80 deletions(-) diff --git a/src/github.js b/src/github.js index 33a5fec4..b7a9f0b0 100644 --- a/src/github.js +++ b/src/github.js @@ -77,7 +77,7 @@ .then(function (response) { cb( null, - raw ? JSON.stringify(response.data) : response.data || true, + response.data || true, response ); }, function (response) { diff --git a/test/test.auth.js b/test/test.auth.js index af93d28f..be7138c2 100644 --- a/test/test.auth.js +++ b/test/test.auth.js @@ -1,22 +1,11 @@ 'use strict'; -var testUser, github, user; - -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, user; describe('Github constructor', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -36,21 +25,20 @@ describe('Github constructor', function() { describe('Github constructor (failing case)', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: 'fake124', auth: 'basic' }); + user = github.getUser(); }); it('should fail authentication and return err', function(done) { user.notifications(function(err) { - err.request.status.should.equal(401, 'Return 401 status for bad auth'); - JSON.parse(err.request.responseText).message.should.equal('Bad credentials'); + err.error.should.equal(401, 'Return 401 status for bad auth'); + err.request.message.should.equal('Bad credentials'); done(); }); }); -}); +}); \ No newline at end of file diff --git a/test/test.issue.js b/test/test.issue.js index c261a58c..f3d6ceae 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -1,29 +1,18 @@ 'use strict'; -var testUser, github, issues; - -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, issues; describe('Github.Issue', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, auth: 'basic' }); - issues = github.getIssues('mikedeboertest', 'TestRepo'); + issues = github.getIssues(testUser.USERNAME, 'TestRepo'); }); it('should list issues', function(done) { diff --git a/test/test.repo.js b/test/test.repo.js index d5bab61f..d3cc3b7c 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -1,17 +1,10 @@ 'use strict'; -var github, repo, user, testUser, imageB64, imageBlob; +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, repo, user, imageB64, imageBlob; if (typeof window === 'undefined') { // We're in NodeJS - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); - var fs = require('fs'); var path = require('path'); @@ -46,8 +39,6 @@ if (typeof window === 'undefined') { // We're in NodeJS describe('Github.Repository', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -131,16 +122,16 @@ describe('Github.Repository', function() { it('should get statuses for a SHA from a repo', function(done) { repo.getStatuses('20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, statuses) { - statuses.length.should.equal(6) + statuses.length.should.equal(6); statuses.every(function(status) { - return status.url === 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b' + return status.url === 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; }).should.equal(true); done(); }); }); it('should get a SHA from a repo', function(done) { - repo.getSha('master', '.gitignore', function(err, sha) { + repo.getSha('master', '.gitignore', function(err) { should.not.exist(err); done(); }); @@ -157,12 +148,10 @@ describe('Github.Repository', function() { }); }); -var repoTest = Math.floor(Math.random() * (100000 - 0)) + 0; +var repoTest = Math.floor(Math.random() * 100000); describe('Creating new Github.Repository', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; - github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -399,7 +388,6 @@ describe('Creating new Github.Repository', function() { describe('deleting a Github.Repository', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -419,7 +407,6 @@ describe('deleting a Github.Repository', function() { describe('Repo returns commit errors correctly', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, @@ -432,7 +419,7 @@ describe('Repo returns commit errors correctly', function() { repo.commit('broken-parent-hash', 'broken-tree-hash', 'commit message', function(err) { should.exist(err); should.exist(err.request); - err.request.status.should.equal(422); + err.error.should.equal(422); done(); }); }); diff --git a/test/test.search.js b/test/test.search.js index a084d126..fe6868eb 100644 --- a/test/test.search.js +++ b/test/test.search.js @@ -1,20 +1,11 @@ 'use strict'; +var Github = require('../src/github.js'); +var testUser = require('./user.json'); var github; -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - var testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} - describe('Github.Search', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, diff --git a/test/test.user.js b/test/test.user.js index c4d3d77e..1205d9e6 100644 --- a/test/test.user.js +++ b/test/test.user.js @@ -1,21 +1,11 @@ 'use strict'; -var testUser, user, github; - -if (typeof window === 'undefined') { - // Module dependencies - var chai = require('chai'); - var Github = require('../'); - - testUser = require('./user.json'); - - // Use should flavour for Mocha - var should = chai.should(); -} +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, user; describe('Github.User', function() { before(function() { - if (typeof window !== 'undefined') testUser = window.__fixtures__['test/user']; github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, From 8a050694601cb1a77c757ce677dfa1ae3b276c20 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:55:50 +0000 Subject: [PATCH 015/217] Updated karma configuration --- karma.conf.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 226a0049..842e5dd2 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -5,7 +5,8 @@ module.exports = function(config) { client: { captureConsole: true, mocha: { - timeout: 10000 + timeout: 10000, + ui: 'bdd' } }, @@ -15,10 +16,27 @@ module.exports = function(config) { autoWatch: false, - frameworks: ['mocha', 'chai'], + frameworks: [ + 'browserify', + 'mocha', + 'chai' + ], browsers: ['PhantomJS'], + browserify: { + debug: true + }, + + phantomjsLauncher: { + debug: true, + options: { + settings: { + webSecurityEnabled: false + } + } + }, + coverageReporter: { reporters: [ { From f4b8a6553fd62bc44a079fc886a9bed9abb83d60 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 22 Nov 2015 03:56:06 +0000 Subject: [PATCH 016/217] Updated Gulp config file --- gulpfile.js | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index ce55e31e..800e05ad 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -4,7 +4,12 @@ var gulp = require('gulp'); var jshint = require('gulp-jshint'); var jscs = require('gulp-jscs'); var rename = require('gulp-rename'); +var browserify = require('browserify'); +var source = require('vinyl-source-stream'); +var buffer = require('vinyl-buffer'); var uglify = require('gulp-uglify'); +var sourcemaps = require('gulp-sourcemaps'); +var del = require('del'); var stylish = require('gulp-jscs-stylish'); var path = require('path'); var karma = require('karma'); @@ -15,24 +20,22 @@ function runTests(singleRun, isCI, done) { var files = [ path.join(__dirname, 'test/vendor/*.js'), // PhantomJS 1.x polyfills - path.join(__dirname, 'github.js'), + path.join(__dirname, 'src/github.js'), path.join(__dirname, 'test/test.*.js') ]; if (singleRun) { files.forEach(function(path) { - preprocessors[path] = ['coverage']; + preprocessors[path] = ['browserify', 'coverage']; }); reporters.push('coverage'); } - files.push(path.join(__dirname, 'test/user.json')); files.push({ pattern: path.join(__dirname, 'test/gh.png'), watched: false, included: false }); - preprocessors['test/user.json'] = ['json_fixtures']; var localConfig = { files: files, @@ -101,15 +104,40 @@ gulp.task('test:ci', function(done) { gulp.task('test:auto', function(done) { runTests(false, false, done); }); +gulp.task('clean', function () { + return del('dist/*'); +}); gulp.task('build', function() { - return gulp.src('github.js') + var browserifyInstance = browserify({ + debug: true, + entries: 'src/github.js', + standalone: 'Github' + }); + + browserifyInstance + .bundle() + .pipe(source('github.js')) + .pipe(buffer()) + .pipe(sourcemaps.init({loadMaps: true})) + .pipe(uglify()) + .pipe(rename({ + extname: '.bundle.min.js' + })) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist')); + + return gulp.src('src/github.js') + .pipe(sourcemaps.init()) + .pipe(rename({ + extname: '.min.js' + })) .pipe(uglify()) - .pipe(rename('github.min.js')) - .pipe(gulp.dest('dist/')); + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist')); }); -gulp.task('default', function() { +gulp.task('default', ['clean'], function() { gulp.start('lint', 'test', 'build'); }); From 4247a8a95d6c0201032fc5c3557c3e2fb1a0f09d Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 13 Jan 2016 02:28:20 +0000 Subject: [PATCH 017/217] .jshintrc: Added "should" to the list of globals --- .jshintrc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.jshintrc b/.jshintrc index 07f9a2da..d7c494f7 100644 --- a/.jshintrc +++ b/.jshintrc @@ -86,6 +86,7 @@ "globals" : { "require": false, "define": false, - "escape": false + "escape": false, + "should": false } // additional predefined global variables } From affd447e04f439a7396cfbe5f4c2c5ca1687b9bd Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 20 Jan 2016 00:57:30 +0000 Subject: [PATCH 018/217] Added distribution files --- dist/github.bundle.min.js | 2 ++ dist/github.bundle.min.js.map | 1 + dist/github.min.js | 2 ++ dist/github.min.js.map | 1 + 4 files changed, 6 insertions(+) create mode 100644 dist/github.bundle.min.js create mode 100644 dist/github.bundle.min.js.map create mode 100644 dist/github.min.js create mode 100644 dist/github.min.js.map diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js new file mode 100644 index 00000000..618b769f --- /dev/null +++ b/dist/github.bundle.min.js @@ -0,0 +1,2 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&l.status<300?t:n)(o),l=null}},o.isStandardBrowserEnv()){var p=e("./../helpers/cookies"),h=e("./../helpers/urlIsSameOrigin"),d=h(a.url)?p.read(a.xsrfCookieName||r.xsrfCookieName):void 0;d&&(f[a.xsrfHeaderName||r.xsrfHeaderName]=d)}if(o.forEach(f,function(e,t){c||"content-type"!==t.toLowerCase()?l.setRequestHeader(t,e):delete f[t]}),a.withCredentials&&(l.withCredentials=!0),a.responseType)try{l.responseType=a.responseType}catch(g){if("json"!==l.responseType)throw g}o.isArrayBuffer(c)&&(c=new DataView(c)),l.send(c)}},{"./../defaults":6,"./../helpers/buildUrl":7,"./../helpers/cookies":8,"./../helpers/parseHeaders":9,"./../helpers/transformData":11,"./../helpers/urlIsSameOrigin":12,"./../utils":13}],3:[function(e,t,n){"use strict";var r=e("./defaults"),o=e("./utils"),i=e("./core/dispatchRequest"),s=e("./core/InterceptorManager"),u=t.exports=function(e){"string"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),e=o.merge({method:"get",headers:{},timeout:r.timeout,transformRequest:r.transformRequest,transformResponse:r.transformResponse},e),e.withCredentials=e.withCredentials||r.withCredentials;var t=[i,void 0],n=Promise.resolve(e);for(u.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),u.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};u.defaults=r,u.all=function(e){return Promise.all(e)},u.spread=e("./helpers/spread"),u.interceptors={request:new s,response:new s},function(){function e(){o.forEach(arguments,function(e){u[e]=function(t,n){return u(o.merge(n||{},{method:e,url:t}))}})}function t(){o.forEach(arguments,function(e){u[e]=function(t,n,r){return u(o.merge(r||{},{method:e,url:t,data:n}))}})}e("delete","get","head"),t("post","put","patch")}()},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/spread":10,"./utils":13}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":13}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{"undefined"!=typeof XMLHttpRequest||"undefined"!=typeof ActiveXObject?e("../adapters/xhr")(r,o,t):"undefined"!=typeof n&&e("../adapters/http")(r,o,t)}catch(i){o(i)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:16}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":13}],7:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t){if(!t)return e;var n=[];return o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),n.push(r(t)+"="+r(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}},{"./../utils":13}],8:[function(e,t,n){"use strict";var r=e("./../utils");t.exports={write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}},{"./../utils":13}],9:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":13}],10:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":13}],12:[function(e,t,n){"use strict";function r(e){var t=e;return s&&(u.setAttribute("href",t),t=u.href),u.setAttribute("href",t),{href:u.href,protocol:u.protocol?u.protocol.replace(/:$/,""):"",host:u.host,search:u.search?u.search.replace(/^\?/,""):"",hash:u.hash?u.hash.replace(/^#/,""):"",hostname:u.hostname,port:u.port,pathname:"/"===u.pathname.charAt(0)?u.pathname:"/"+u.pathname}}var o,i=e("./../utils"),s=/(msie|trident)/i.test(navigator.userAgent),u=document.createElement("a");o=r(window.location.href),t.exports=function(e){var t=i.isString(e)?r(e):e;return t.protocol===o.protocol&&t.host===o.host}},{"./../utils":13}],13:[function(e,t,n){"use strict";function r(e){return"[object Array]"===b.call(e)}function o(e){return"[object ArrayBuffer]"===b.call(e)}function i(e){return"[object FormData]"===b.call(e)}function s(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function p(e){return"[object File]"===b.call(e)}function h(e){return"[object Blob]"===b.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(e){return"[object Arguments]"===b.call(e)}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function v(e,t){if(null!==e&&"undefined"!=typeof e){var n=r(e)||g(e);if("object"==typeof e||n||(e=[e]),n)for(var o=0,i=e.length;i>o;o++)t.call(null,e[o],o,e);else for(var s in e)e.hasOwnProperty(s)&&t.call(null,e[s],s,e)}}function y(){var e={};return v(arguments,function(t){v(t,function(t,n){e[n]=t})}),e}var b=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:v,merge:y,trim:d}},{}],14:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],15:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){J=e}function c(e){z=e}function f(){return function(){r.nextTick(g)}}function l(){return function(){V(g)}}function p(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(g,1)}}function g(){for(var e=0;$>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}$=0}function m(){try{var e=t,n=e("vertx");return V=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function w(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){z(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,R(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,R(e,o))},e)}function _(e,t){t._state===oe?S(e,t._result):t._state===ie?R(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){R(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=w(t);n===se?R(e,se.error):void 0===n?S(e,t):s(n)?T(e,t,n):S(e,t)}}function C(e,t){e===t?R(e,y()):i(t)?A(e,t):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),O(e)}function S(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&z(O,e))}function R(e,t){e._state===re&&(e._state=ie,e._result=t,z(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&z(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function L(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return C(n,e),n}function H(e){var t=this,n=new t(v);return R(n,e),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||B(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var V,J,K,Y=X,$=0,z=({}.toString,function(e,t){ne[$]=e,ne[$+1]=t,$+=2,2===$&&(J?J(g):K())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);K=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?m():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;k.prototype._validateInput=function(e){return Y(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var ae=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?R(o,n):r._result[t]=n),0===r._remaining&&S(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=D,fe=q,le=L,pe=H,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=z,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];z(function(){G(r,o,s,i)})}else j(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var ge=M,me={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return me}):"undefined"!=typeof n&&n.exports?n.exports=me:"undefined"!=typeof this&&(this.ES6Promise=me),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:16}],16:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=w(t>>>10&1023|55296),t=56320|1023&t),o+=w(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return w(e>>t&63|128)}function c(e){if(0==(4294967168&e))return w(e);var t="";return 0==(4294965248&e)?t=w(e>>6&31|192):0==(4294901760&e)?(u(e),t=w(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=w(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=w(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[b];if(b++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(b>y)throw Error("Invalid byte index");if(b==y)return!1;if(e=255&v[b],b++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,b=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(o=m);var v,y,b,w=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e)},function(e){304===e.status?u(null,e.data||!0,e):u({path:i,request:e.data,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);r.push.apply(r,i);var u=(s.headers.link||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",function(e,n){t(e,n)})},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.deleteRepo=function(t){n("DELETE",r,e,t)},this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,function(e,t,n){o(e,t,n)})},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,function(t,n,r){return t?e(t):void e(null,n,r)})},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},function(e){o(e)})},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,function(e){o(e)})})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},function(e,t){r(e,t)})}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":14,"es6-promise":15,utf8:17}]},{},[18])(18)}); +//# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map new file mode 100644 index 00000000..77986dad --- /dev/null +++ b/dist/github.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/buildUrl.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/helpers/urlIsSameOrigin.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"defaults","utils","buildUrl","parseHeaders","transformData","resolve","reject","config","data","headers","transformRequest","requestHeaders","merge","common","method","isFormData","request","XMLHttpRequest","ActiveXObject","open","toUpperCase","url","params","timeout","onreadystatechange","readyState","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","isStandardBrowserEnv","cookies","urlIsSameOrigin","xsrfValue","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","withCredentials","isArrayBuffer","DataView","send","./../defaults","./../helpers/buildUrl","./../helpers/cookies","./../helpers/parseHeaders","./../helpers/transformData","./../helpers/urlIsSameOrigin","./../utils",3,"dispatchRequest","InterceptorManager","axios","arguments","chain","promise","Promise","interceptors","interceptor","unshift","fulfilled","rejected","push","then","shift","all","promises","spread","createShortMethods","createShortMethodsWithData","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/spread","./utils",4,"handlers","prototype","use","eject","id","fn","h",5,"process","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"encode","encodeURIComponent","parts","isArray","v","isDate","toISOString","join",8,"write","name","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",9,"parsed","split","line","trim","substr",10,"callback","arr","apply",11,"fns",12,"urlResolve","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","originUrl","test","navigator","userAgent","createElement","location","requestUrl",13,"toString","ArrayBuffer","isView","str","isArguments","obj","isArrayLike","hasOwnProperty","result","Object",14,"root","freeExports","freeModule","freeGlobal","InvalidCharacterError","message","error","TABLE","REGEX_SPACE_CHARACTERS","decode","input","String","bitStorage","bitCounter","output","position","fromCharCode","b","c","padding","charCodeAt","base64","version","nodeType",15,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",16,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","args","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",17,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",18,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","username","password","token","_requestAllPages","results","iterate","err","res","xhr","links","link","next","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","deleteRepo","ref","createRef","deleteRef","listTags","tags","listPulls","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && request.status < 300 ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n }\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n var urlIsSameOrigin = require('./../helpers/urlIsSameOrigin');\n\n // Add xsrf header\n var xsrfValue = urlIsSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName || defaults.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n utils.forEach(requestHeaders, function (val, key) {\n // Remove Content-Type if data is undefined\n if (!data && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n }\n // Otherwise add header to the request\n else {\n request.setRequestHeader(key, val);\n }\n });\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(data)) {\n data = new DataView(data);\n }\n\n // Send the request\n request.send(data);\n};\n\n},{\"./../defaults\":6,\"./../helpers/buildUrl\":7,\"./../helpers/cookies\":8,\"./../helpers/parseHeaders\":9,\"./../helpers/transformData\":11,\"./../helpers/urlIsSameOrigin\":12,\"./../utils\":13}],3:[function(require,module,exports){\n'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\n\nvar axios = module.exports = function (config) {\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge({\n method: 'get',\n headers: {},\n timeout: defaults.timeout,\n transformRequest: defaults.transformRequest,\n transformResponse: defaults.transformResponse\n }, config);\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || defaults.withCredentials;\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n axios.interceptors.request.forEach(function (interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n axios.interceptors.response.forEach(function (interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Expose defaults\naxios.defaults = defaults;\n\n// Expose all/spread\naxios.all = function (promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n};\n\n// Provide aliases for supported request methods\n(function () {\n function createShortMethods() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n });\n }\n\n function createShortMethodsWithData() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, data, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n });\n }\n\n createShortMethods('delete', 'get', 'head');\n createShortMethodsWithData('post', 'put', 'patch');\n})();\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/spread\":10,\"./utils\":13}],4:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function (fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function (id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `remove`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function (fn) {\n utils.forEach(this.handlers, function (h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n},{\"./../utils\":13}],5:[function(require,module,exports){\n(function (process){\n'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function (resolve, reject) {\n try {\n // For browsers use XHR adapter\n if ((typeof XMLHttpRequest !== 'undefined') || (typeof ActiveXObject !== 'undefined')) {\n require('../adapters/xhr')(resolve, reject, config);\n }\n // For node use HTTP adapter\n else if (typeof process !== 'undefined') {\n require('../adapters/http')(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":16}],6:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function (data, headers) {\n if(utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function (val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function (data) {\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n\n},{\"./utils\":13}],7:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildUrl(url, params) {\n if (!params) {\n return url;\n }\n\n var parts = [];\n\n utils.forEach(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function (v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n }\n else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&');\n }\n\n return url;\n};\n\n},{\"./../utils\":13}],8:[function(require,module,exports){\n'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\n\nmodule.exports = {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n};\n\n},{\"./../utils\":13}],9:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {}, key, val, i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n},{\"./../utils\":13}],10:[function(require,module,exports){\n'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function (arr) {\n return callback.apply(null, arr);\n };\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function (fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n},{\"./../utils\":13}],12:[function(require,module,exports){\n'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\nvar msie = /(msie|trident)/i.test(navigator.userAgent);\nvar urlParsingNode = document.createElement('a');\nvar originUrl;\n\n/**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\nfunction urlResolve(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n}\n\noriginUrl = urlResolve(window.location.href);\n\n/**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestUrl The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\nmodule.exports = function urlIsSameOrigin(requestUrl) {\n var parsed = (utils.isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n return (parsed.protocol === originUrl.protocol &&\n parsed.host === originUrl.host);\n};\n\n},{\"./../utils\":13}],13:[function(require,module,exports){\n'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n return ArrayBuffer.isView(val);\n } else {\n return (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if a value is an Arguments object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Arguments object, otherwise false\n */\nfunction isArguments(val) {\n return toString.call(val) === '[object Arguments]';\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createelement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array or arguments callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Check if obj is array-like\n var isArrayLike = isArray(obj) || isArguments(obj);\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArrayLike) {\n obj = [obj];\n }\n\n // Iterate over array values\n if (isArrayLike) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n }\n // Iterate over object keys\n else {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/*obj1, obj2, obj3, ...*/) {\n var result = {};\n forEach(arguments, function (obj) {\n forEach(obj, function (val, key) {\n result[key] = val;\n });\n });\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n},{}],14:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],15:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":16}],16:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],17:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],18:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":14,\"es6-promise\":15,\"utf8\":17}]},{},[18])(18)\n});\n\n","'use strict';\n\n/*global ActiveXObject:true*/\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar buildUrl = require('./../helpers/buildUrl');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n // Transform request data\n var data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Merge headers\n var requestHeaders = utils.merge(\n defaults.headers.common,\n defaults.headers[config.method] || {},\n config.headers || {}\n );\n\n if (utils.isFormData(data)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n // Create the request\n var request = new (XMLHttpRequest || ActiveXObject)('Microsoft.XMLHTTP');\n request.open(config.method.toUpperCase(), buildUrl(config.url, config.params), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function () {\n if (request && request.readyState === 4) {\n // Prepare the response\n var responseHeaders = parseHeaders(request.getAllResponseHeaders());\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config\n };\n\n // Resolve or reject the Promise based on the status\n (request.status >= 200 && request.status < 300 ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n }\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n var urlIsSameOrigin = require('./../helpers/urlIsSameOrigin');\n\n // Add xsrf header\n var xsrfValue = urlIsSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName || defaults.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n utils.forEach(requestHeaders, function (val, key) {\n // Remove Content-Type if data is undefined\n if (!data && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n }\n // Otherwise add header to the request\n else {\n request.setRequestHeader(key, val);\n }\n });\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(data)) {\n data = new DataView(data);\n }\n\n // Send the request\n request.send(data);\n};\n","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\n\nvar axios = module.exports = function (config) {\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge({\n method: 'get',\n headers: {},\n timeout: defaults.timeout,\n transformRequest: defaults.transformRequest,\n transformResponse: defaults.transformResponse\n }, config);\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || defaults.withCredentials;\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n axios.interceptors.request.forEach(function (interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n axios.interceptors.response.forEach(function (interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Expose defaults\naxios.defaults = defaults;\n\n// Expose all/spread\naxios.all = function (promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n};\n\n// Provide aliases for supported request methods\n(function () {\n function createShortMethods() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n });\n }\n\n function createShortMethodsWithData() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, data, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n });\n }\n\n createShortMethods('delete', 'get', 'head');\n createShortMethodsWithData('post', 'put', 'patch');\n})();\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function (fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function (id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `remove`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function (fn) {\n utils.forEach(this.handlers, function (h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function (resolve, reject) {\n try {\n // For browsers use XHR adapter\n if ((typeof XMLHttpRequest !== 'undefined') || (typeof ActiveXObject !== 'undefined')) {\n require('../adapters/xhr')(resolve, reject, config);\n }\n // For node use HTTP adapter\n else if (typeof process !== 'undefined') {\n require('../adapters/http')(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function (data, headers) {\n if(utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function (val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function (data) {\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildUrl(url, params) {\n if (!params) {\n return url;\n }\n\n var parts = [];\n\n utils.forEach(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function (v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n }\n else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&');\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\n\nmodule.exports = {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {}, key, val, i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function (arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function (fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\nvar msie = /(msie|trident)/i.test(navigator.userAgent);\nvar urlParsingNode = document.createElement('a');\nvar originUrl;\n\n/**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\nfunction urlResolve(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n}\n\noriginUrl = urlResolve(window.location.href);\n\n/**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestUrl The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\nmodule.exports = function urlIsSameOrigin(requestUrl) {\n var parsed = (utils.isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n return (parsed.protocol === originUrl.protocol &&\n parsed.host === originUrl.host);\n};\n","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n return ArrayBuffer.isView(val);\n } else {\n return (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if a value is an Arguments object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Arguments object, otherwise false\n */\nfunction isArguments(val) {\n return toString.call(val) === '[object Arguments]';\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createelement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array or arguments callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Check if obj is array-like\n var isArrayLike = isArray(obj) || isArguments(obj);\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArrayLike) {\n obj = [obj];\n }\n\n // Iterate over array values\n if (isArrayLike) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n }\n // Iterate over object keys\n else {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/*obj1, obj2, obj3, ...*/) {\n var result = {};\n forEach(arguments, function (obj) {\n forEach(obj, function (val, key) {\n result[key] = val;\n });\n });\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js new file mode 100644 index 00000000..3584af06 --- /dev/null +++ b/dist/github.min.js @@ -0,0 +1,2 @@ +"use strict";!function(t,n){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(e,o,s,i){return t.Github=n(e,o,s,i)}):"object"==typeof module&&module.exports?module.exports=n(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=n(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,n,e,o){function s(t){return n.encode(e.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var n=t.apiUrl||"https://api.github.com",e=i._request=function(e,i,u,r,c){function a(){var t=i.indexOf("//")>=0?i:n+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(e)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:e,data:u?u:{},url:a()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t)},function(t){304===t.status?r(null,t.data||!0,t):r({path:i,request:t.data,error:t.status})})},u=i._requestAllPages=function(t,n){var o=[];!function s(){e("GET",t,null,function(e,i,u){if(e)return n(e);o.push.apply(o,i);var r=(u.headers.link||"").split(/\s*,\s*/g),c=null;r.forEach(function(t){c=/rel="next"/.test(t)?t:c}),c&&(c=(/<(.*)>/.exec(c)||[])[1]),c?(t=c,s()):n(e,o)})}()};return i.User=function(){this.repos=function(t,n){1===arguments.length&&"function"==typeof arguments[0]&&(n=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),e("GET",o,null,n)},this.orgs=function(t){e("GET","/user/orgs",null,t)},this.gists=function(t){e("GET","/gists",null,t)},this.notifications=function(t,n){1===arguments.length&&"function"==typeof arguments[0]&&(n=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),e("GET",o,null,n)},this.show=function(t,n){var o=t?"/users/"+t:"/user";e("GET",o,null,n)},this.userRepos=function(t,n){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",n)},this.userStarred=function(t,n){u("/users/"+t+"/starred?type=all&per_page=100",function(t,e){n(t,e)})},this.userGists=function(t,n){e("GET","/users/"+t+"/gists",null,n)},this.orgRepos=function(t,n){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",n)},this.follow=function(t,n){e("PUT","/user/following/"+t,null,n)},this.unfollow=function(t,n){e("DELETE","/user/following/"+t,null,n)},this.createRepo=function(t,n){e("POST","/user/repos",t,n)}},i.Repository=function(t){function n(t,n){return t===l.branch&&l.sha?n(null,l.sha):void a.getRef("heads/"+t,function(e,o){l.branch=t,l.sha=o,n(e,o)})}var o,u=t.name,r=t.user,c=t.fullname,a=this;o=c?"/repos/"+c:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.deleteRepo=function(n){e("DELETE",o,t,n)},this.getRef=function(t,n){e("GET",o+"/git/refs/"+t,null,function(t,e,o){return t?n(t):void n(null,e.object.sha,o)})},this.createRef=function(t,n){e("POST",o+"/git/refs",t,n)},this.deleteRef=function(n,s){e("DELETE",o+"/git/refs/"+n,t,function(t,n,e){s(t,n,e)})},this.createRepo=function(t,n){e("POST","/user/repos",t,n)},this.deleteRepo=function(n){e("DELETE",o,t,n)},this.listTags=function(t){e("GET",o+"/tags",null,function(n,e,o){return n?t(n):void t(null,e,o)})},this.listPulls=function(t,n){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),e("GET",s,null,function(t,e,o){return t?n(t):void n(null,e,o)})},this.getPull=function(t,n){e("GET",o+"/pulls/"+t,null,function(t,e,o){return t?n(t):void n(null,e,o)})},this.compare=function(t,n,s){e("GET",o+"/compare/"+t+"..."+n,null,function(t,n,e){return t?s(t):void s(null,n,e)})},this.listBranches=function(t){e("GET",o+"/git/refs/heads",null,function(n,e,o){return n?t(n):void t(null,e.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,n){e("GET",o+"/git/blobs/"+t,null,n,"raw")},this.getCommit=function(t,n,s){e("GET",o+"/git/commits/"+n,null,function(t,n,e){return t?s(t):void s(null,n,e)})},this.getSha=function(t,n,s){return n&&""!==n?void e("GET",o+"/contents/"+n+(t?"?ref="+t:""),null,function(t,n,e){return t?s(t):void s(null,n.sha,e)}):a.getRef("heads/"+t,s)},this.getStatuses=function(t,n){e("GET",o+"/statuses/"+t,null,n)},this.getTree=function(t,n){e("GET",o+"/git/trees/"+t,null,function(t,e,o){return t?n(t):void n(null,e.tree,o)})},this.postBlob=function(t,n){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},e("POST",o+"/git/blobs",t,function(t,e){return t?n(t):void n(null,e.sha)})},this.updateTree=function(t,n,s,i){var u={base_tree:t,tree:[{path:n,mode:"100644",type:"blob",sha:s}]};e("POST",o+"/git/trees",u,function(t,n){return t?i(t):void i(null,n.sha)})},this.postTree=function(t,n){e("POST",o+"/git/trees",{tree:t},function(t,e){return t?n(t):void n(null,e.sha)})},this.commit=function(n,s,u,r){var c=new i.User;c.show(null,function(i,c){if(i)return r(i);var a={message:u,author:{name:t.user,email:c.email},parents:[n],tree:s};e("POST",o+"/git/commits",a,function(t,n){return t?r(t):(l.sha=n.sha,void r(null,n.sha))})})},this.updateHead=function(t,n,s){e("PATCH",o+"/git/refs/heads/"+t,{sha:n},function(t){s(t)})},this.show=function(t){e("GET",o,null,t)},this.contributors=function(t,n){n=n||1e3;var s=this;e("GET",o+"/stats/contributors",null,function(e,o,i){return e?t(e):void(202===i.status?setTimeout(function(){s.contributors(t,n)},n):t(e,o,i))})},this.contents=function(t,n,s){n=encodeURI(n),e("GET",o+"/contents"+(n?"/"+n:""),{ref:t},s)},this.fork=function(t){e("POST",o+"/forks",null,t)},this.listForks=function(t){e("GET",o+"/forks",null,t)},this.branch=function(t,n,e){2===arguments.length&&"function"==typeof arguments[1]&&(e=n,n=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&e?e(t):void a.createRef({ref:"refs/heads/"+n,sha:o},e)})},this.createPullRequest=function(t,n){e("POST",o+"/pulls",t,n)},this.listHooks=function(t){e("GET",o+"/hooks",null,t)},this.getHook=function(t,n){e("GET",o+"/hooks/"+t,null,n)},this.createHook=function(t,n){e("POST",o+"/hooks",t,n)},this.editHook=function(t,n,s){e("PATCH",o+"/hooks/"+t,n,s)},this.deleteHook=function(t,n){e("DELETE",o+"/hooks/"+t,null,n)},this.read=function(t,n,s){e("GET",o+"/contents/"+encodeURI(n)+(t?"?ref="+t:""),null,function(t,n,e){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,n,e)},!0)},this.remove=function(t,n,s){a.getSha(t,n,function(i,u){return i?s(i):void e("DELETE",o+"/contents/"+n,{message:n+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,e,o,s){n(t,function(n,i){a.getTree(i+"?recursive=true",function(n,u){u.forEach(function(t){t.path===e&&(t.path=o),"tree"===t.type&&delete t.sha}),a.postTree(u,function(n,o){a.commit(i,o,"Deleted "+e,function(n,e){a.updateHead(t,e,function(t){s(t)})})})})})},this.write=function(t,n,i,u,r,c){"undefined"==typeof c&&(c=r,r={}),a.getSha(t,encodeURI(n),function(a,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};a&&404!==a.error||(f.sha=l),e("PUT",o+"/contents/"+encodeURI(n),f,c)})},this.getCommits=function(t,n){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),e("GET",s,null,n)}},i.Gist=function(t){var n=t.id,o="/gists/"+n;this.read=function(t){e("GET",o,null,t)},this.create=function(t,n){e("POST","/gists",t,n)},this["delete"]=function(t){e("DELETE",o,null,t)},this.fork=function(t){e("POST",o+"/fork",null,t)},this.update=function(t,n){e("PATCH",o,t,n)},this.star=function(t){e("PUT",o+"/star",null,t)},this.unstar=function(t){e("DELETE",o+"/star",null,t)},this.isStarred=function(t){e("GET",o+"/star",null,t)}},i.Issue=function(t){var n="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,e){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(n+"?"+o.join("&"),e)},this.comment=function(t,n,o){e("POST",t.comments_url,{body:n},function(t,n){o(t,n)})}},i.Search=function(t){var n="/search/",o="?q="+t.query;this.repositories=function(t,s){e("GET",n+"repositories"+o,t,s)},this.code=function(t,s){e("GET",n+"code"+o,t,s)},this.issues=function(t,s){e("GET",n+"issues"+o,t,s)},this.users=function(t,s){e("GET",n+"users"+o,t,s)}},i};return i.getIssues=function(t,n){return new i.Issue({user:t,repo:n})},i.getRepo=function(t,n){return n?new i.Repository({user:t,name:n}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i}); +//# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map new file mode 100644 index 00000000..7cd042ab --- /dev/null +++ b/dist/github.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","status","request","error","_requestAllPages","results","iterate","err","res","xhr","push","apply","links","link","split","next","forEach","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","deleteRepo","ref","object","createRef","deleteRef","listTags","tags","listPulls","state","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","replace","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file From 93df07660e65bc2476c55b720dc56c3acfe9da3a Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 20 Jan 2016 02:34:20 +0000 Subject: [PATCH 019/217] Fixed code coverage --- gulpfile.js | 11 +++++------ karma.conf.js | 15 ++++++++------- package.json | 1 + src/github.js | 1 + 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 800e05ad..1ee9ffdb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,14 +20,11 @@ function runTests(singleRun, isCI, done) { var files = [ path.join(__dirname, 'test/vendor/*.js'), // PhantomJS 1.x polyfills - path.join(__dirname, 'src/github.js'), path.join(__dirname, 'test/test.*.js') ]; if (singleRun) { - files.forEach(function(path) { - preprocessors[path] = ['browserify', 'coverage']; - }); + preprocessors['test/test.*.js'] = ['browserify']; reporters.push('coverage'); } @@ -119,8 +116,10 @@ gulp.task('build', function() { .bundle() .pipe(source('github.js')) .pipe(buffer()) - .pipe(sourcemaps.init({loadMaps: true})) - .pipe(uglify()) + .pipe(sourcemaps.init({ + loadMaps: true + })) + .pipe(uglify()) .pipe(rename({ extname: '.bundle.min.js' })) diff --git a/karma.conf.js b/karma.conf.js index 842e5dd2..6354e678 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,4 +1,4 @@ -module.exports = function(config) { +module.exports = function (config) { 'use strict'; var configuration = { @@ -25,7 +25,8 @@ module.exports = function(config) { browsers: ['PhantomJS'], browserify: { - debug: true + debug: true, + transform: ['browserify-istanbul'] }, phantomjsLauncher: { @@ -40,11 +41,11 @@ module.exports = function(config) { coverageReporter: { reporters: [ { - type: 'lcov' - }, - { - type: 'text-summary' - } + type: 'lcov' + }, + { + type: 'text-summary' + } ], instrumenterOptions: { istanbul: { diff --git a/package.json b/package.json index 348913df..08d0e52f 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "devDependencies": { "browserify": "^13.0.0", + "browserify-istanbul": "^0.2.1", "chai": "^3.4.1", "codecov": "^1.0.1", "del": "^2.2.0", diff --git a/src/github.js b/src/github.js index b7a9f0b0..cb374890 100644 --- a/src/github.js +++ b/src/github.js @@ -12,6 +12,7 @@ 'use strict'; (function (root, factory) { + /* istanbul ignore next */ if (typeof define === 'function' && define.amd) { define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) { return (root.Github = factory(Promise, Base64, Utf8, axios)); From 06f0e660aaa5a2b6a6ea9902c21b8da885cac92b Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Thu, 21 Jan 2016 00:22:11 +0000 Subject: [PATCH 020/217] Gulpfile.js: Added IE9 to Sauce Labs --- gulpfile.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gulpfile.js b/gulpfile.js index 1ee9ffdb..20f1f133 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -157,6 +157,12 @@ var sauceLaunchers = { platform: 'OS X 10.10', version: '8' }, + SL_IE_9: { + base: 'SauceLabs', + browserName: 'internet explorer', + platform: 'Windows 7', + version: '9' + }, SL_IE_10: { base: 'SauceLabs', browserName: 'internet explorer', From 4e5d969413e724939c70749efc45a5298f8dea51 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Thu, 21 Jan 2016 00:55:14 +0000 Subject: [PATCH 021/217] README: Added note about IE9 compatibility --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 5fa5a7fc..3ea87389 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,14 @@ bower install github-api [![Sauce Test Status](https://saucelabs.com/browser-matrix/githubjs.svg)](https://saucelabs.com/u/githubjs) +**Note**: Starting from version 0.10.8, Github.js supports **Internet Explorer 9**. However, the underlying +methodology used under the hood to perform CORS requests (the `XDomainRequest` object), +[has limitations](http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx). +In particular, requests must be targeted to the same scheme as the hosting page. This means that if a page is at +http://example.com, your target URL must also begin with HTTP. Similarly, if your page is at https://example.com, then +your target URL must also begin with HTTPS. For this reason, if your requests are sent to the GitHub API (the default), +which are served via HTTPS, your page must use HTTPS too. + ## Usage Create a Github instance. From eb335382f94eef6a849affc23e6ed0daf9c7f3b9 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Thu, 21 Jan 2016 23:37:08 +0000 Subject: [PATCH 022/217] Tests: Written better assertions for repo.contents() --- test/test.repo.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/test/test.repo.js b/test/test.repo.js index d3cc3b7c..a291bfba 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -57,10 +57,17 @@ describe('Github.Repository', function() { }); it('should show repo contents', function(done) { - repo.contents('master', './', function(err) { + repo.contents('master', '', function(err, contents) { should.not.exist(err); + contents.should.be.instanceof(Array); + + var readme = contents.filter(function(content) { + return content.path === 'README.md'; + }); + + readme.should.have.length(1); + readme[0].should.have.property('type', 'file'); - // @TODO write better assertion. done(); }); }); From 23d61b25f3f2f75fef115adc2bd1e9a28dd4339e Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 00:11:06 +0000 Subject: [PATCH 023/217] Tests: Added test for repo.getBlob() --- test/test.repo.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/test.repo.js b/test/test.repo.js index a291bfba..e95849f2 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -56,6 +56,18 @@ describe('Github.Repository', function() { }); }); + it('should get blob', function(done) { + repo.getSha('master', 'README.md', function(err, sha) { + repo.getBlob(sha, function(err, content) { + should.not.exist(err); + + content.indexOf('# Github.js').should.be.above(-1); + + done(); + }); + }); + }); + it('should show repo contents', function(done) { repo.contents('master', '', function(err, contents) { should.not.exist(err); From 9404ff4500c24389213c40f7e4870c75f266b953 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 00:20:47 +0000 Subject: [PATCH 024/217] package.json: Added Aurelio De Rosa's email --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 08d0e52f..23ddf538 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ ], "contributors": [ "Ændrew Rininsland (http://www.aendrew.com)", - "Aurelio De Rosa (http://www.audero.it/)", + "Aurelio De Rosa (http://www.audero.it/)", "Michael Aufreiter (http://substance.io)" ], "license": "BSD-3-Clause-Clear", From 87e7c0e4b27f077b540e7d002f750d57ec647cd9 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 00:21:15 +0000 Subject: [PATCH 025/217] bower.json: Updated authors --- bower.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index a0f4d1d3..731989f6 100644 --- a/bower.json +++ b/bower.json @@ -3,7 +3,9 @@ "main":"src/github.js", "homepage":"https://github.com/michael/github", "authors":[ - "Sergey Klimov (http://darvin.github.com/)" + "Ændrew Rininsland (http://www.aendrew.com)", + "Aurelio De Rosa (http://www.audero.it/)", + "Michael Aufreiter (http://substance.io)" ], "description":"Github.js provides a minimal higher-level wrapper around git's plumbing commands, exposing an API for manipulating GitHub repositories on the file level. It is being developed in the context of Prose, a content editor for GitHub.", "moduleType":[ From 4945b813a2b380a218ccca0bcf4843c040538baa Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 01:33:41 +0000 Subject: [PATCH 026/217] Tests: Added test for repo.compare() --- test/test.repo.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/test.repo.js b/test/test.repo.js index e95849f2..93c4f6ab 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -214,6 +214,21 @@ describe('Creating new Github.Repository', function() { }); }); + it('should compare two branches', function(done) { + repo.branch('master', 'compare', function() { + repo.write('compare', 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function() { + repo.compare('master', 'compare', function(err, diff) { + should.not.exist(err); + + diff.should.have.property('total_commits', 1); + diff.should.have.deep.property('files[0].filename', 'TEST.md'); + + done(); + }); + }); + }); + }); + it('should get ref from repo', function(done) { repo.getRef('heads/master', function(err) { should.not.exist(err); From 7a5e97ca1695f935597fc83a07e5e6a8105e55f1 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 10:47:04 +0000 Subject: [PATCH 027/217] Tests: Added test for repo.createPullRequest() --- test/test.repo.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/test.repo.js b/test/test.repo.js index 93c4f6ab..57351444 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -229,6 +229,35 @@ describe('Creating new Github.Repository', function() { }); }); + it('should submit a pull request', function(done) { + var baseBranch = 'master'; + var headBranch = 'pull-request'; + var pullRequestTitle = 'Test pull request'; + var pullRequestBody = 'This is a test pull request'; + + repo.branch(baseBranch, headBranch, function() { + repo.write(headBranch, 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function() { + repo.createPullRequest( + { + title: pullRequestTitle, + body: pullRequestBody, + base: baseBranch, + head: headBranch + }, + function(err, pullRequest) { + should.not.exist(err); + + pullRequest.should.have.property('number').above(0); + pullRequest.should.have.property('title', pullRequestTitle); + pullRequest.should.have.property('body', pullRequestBody); + + done(); + } + ); + }); + }); + }); + it('should get ref from repo', function(done) { repo.getRef('heads/master', function(err) { should.not.exist(err); From 5bdd9de702b2089762d24c9555851fb8f40ab48b Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 10:48:21 +0000 Subject: [PATCH 028/217] Tests: Added test for repo.getTree() --- test/test.repo.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/test.repo.js b/test/test.repo.js index 57351444..04bfe912 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -84,6 +84,17 @@ describe('Github.Repository', function() { }); }); + it('should get tree', function(done) { + repo.getTree('master', function(err, tree) { + should.not.exist(err); + + tree.should.be.instanceof(Array); + tree.should.have.length.above(0); + + done(); + }); + }); + it('should fork repo', function(done) { repo.fork(function(err) { should.not.exist(err); From bfe8f10d5e11e2c60ef57196267d2c4756585177 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 10:54:16 +0000 Subject: [PATCH 029/217] Tests: Written better assertions for repo.write() --- test/test.repo.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/test.repo.js b/test/test.repo.js index 04bfe912..6d1bf86f 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -206,8 +206,12 @@ describe('Creating new Github.Repository', function() { repo.write('master', 'TEST.md', 'THIS IS A TEST', 'Creating test', function(err) { should.not.exist(err); - // @TODO write a better assertion. - done(); + repo.read('master', 'TEST.md', function(err, res) { + should.not.exist(err); + res.should.equal('THIS IS A TEST'); + + done(); + }); }); }); From 6096a7c880b44fc0a4830fcb25aa39a560334ead Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 22 Jan 2016 10:54:49 +0000 Subject: [PATCH 030/217] Tests: Reorder of statements --- test/test.repo.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test.repo.js b/test/test.repo.js index 6d1bf86f..9ab064d1 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -221,8 +221,9 @@ describe('Creating new Github.Repository', function() { repo.write('dev', 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function(err) { should.not.exist(err); repo.read('dev', 'TEST.md', function(err, res) { - res.should.equal('THIS IS AN UPDATED TEST'); should.not.exist(err); + res.should.equal('THIS IS AN UPDATED TEST'); + done(); }); }); From b5e43a87e255b102d3233a738c705164d2fbd538 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 15:35:35 +0000 Subject: [PATCH 031/217] package.json: Point axios to fork that exposes the XHR object --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 23ddf538..cfb821d5 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A higher-level wrapper around the Github API.", "main": "src/github.js", "dependencies": { - "axios": "^0.9.0", + "axios": "https://github.com/github-tools/axios.git", "base-64": "^0.1.0", "es6-promise": "^3.0.2", "utf8": "^2.1.1" From 0de71e00b9b8a9eca8c08e4336745ae561cbce48 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 15:35:51 +0000 Subject: [PATCH 032/217] Restored access to the XHR object --- src/github.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/github.js b/src/github.js index cb374890..77d8ac15 100644 --- a/src/github.js +++ b/src/github.js @@ -79,19 +79,19 @@ cb( null, response.data || true, - response + response.request ); }, function (response) { if (response.status === 304) { cb( null, response.data || true, - response + response.request ); } else { cb({ path: path, - request: response.data, + request: response.request, error: response.status }); } From 3cd3885b9d6e43e0693c2ecd7da77789892a8b36 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 16:03:14 +0000 Subject: [PATCH 033/217] Fixed a typo --- src/github.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.js b/src/github.js index 77d8ac15..0723b9c2 100644 --- a/src/github.js +++ b/src/github.js @@ -815,7 +815,7 @@ }); }; - // List commits on a repository. Takes an object of optional paramaters: + // List commits on a repository. Takes an object of optional parameters: // sha: SHA or branch to start listing commits from // path: Only commits containing this file path will be returned // since: ISO 8601 date - only commits after this date will be returned From eef661f03ca12d622d8e1088d3464a724c298e92 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 16:12:01 +0000 Subject: [PATCH 034/217] Tests: Added test for repo.getCommits() --- test/test.repo.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/test.repo.js b/test/test.repo.js index 9ab064d1..3f843782 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -113,6 +113,23 @@ describe('Github.Repository', function() { }); }); + it('should list commits', function(done) { + var options = { + sha: 'master', + path: 'test' + }; + + repo.getCommits(options, function(err, commits) { + should.not.exist(err); + commits.should.be.instanceof(Array); + commits.should.have.length.above(0); + commits[0].should.have.property('commit'); + commits[0].should.have.property('author'); + + done(); + }); + }); + it('should show repo contributors', function(done) { repo.contributors(function(err, res) { should.not.exist(err); From 25818efe47a9531377e24f394e3aa6e02ed3c214 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 16:24:31 +0000 Subject: [PATCH 035/217] getCommits: Added possibility to filter by author --- src/github.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/github.js b/src/github.js index 0723b9c2..24e99207 100644 --- a/src/github.js +++ b/src/github.js @@ -818,6 +818,7 @@ // List commits on a repository. Takes an object of optional parameters: // sha: SHA or branch to start listing commits from // path: Only commits containing this file path will be returned + // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address // since: ISO 8601 date - only commits after this date will be returned // until: ISO 8601 date - only commits before this date will be returned // ------- @@ -835,6 +836,10 @@ params.push('path=' + encodeURIComponent(options.path)); } + if (options.author) { + params.push('author=' + encodeURIComponent(options.author)); + } + if (options.since) { var since = options.since; From e4900861d3f2824480d2ceb68b70a5fe659cf71f Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 16:33:02 +0000 Subject: [PATCH 036/217] README: Added section about GitHub Tools --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 3ea87389..c32d1368 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,12 @@ http://example.com, your target URL must also begin with HTTP. Similarly, if you your target URL must also begin with HTTPS. For this reason, if your requests are sent to the GitHub API (the default), which are served via HTTPS, your page must use HTTPS too. +## GitHub Tools + +The team behind Github.js has created a whole organization, called [GitHub Tools](https://github.com/github-tools), +dedicated to GitHub and its API. In the near future this repository could be moved under the GitHub Tools organization +as well. In the meantime, we recommend you to take a look at other projects of the organization. + ## Usage Create a Github instance. From bd88d625bce41490b5f8a6c148e9b9720c492a75 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 16:35:34 +0000 Subject: [PATCH 037/217] Updated distribution versions --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 618b769f..188990de 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&l.status<300?t:n)(o),l=null}},o.isStandardBrowserEnv()){var p=e("./../helpers/cookies"),h=e("./../helpers/urlIsSameOrigin"),d=h(a.url)?p.read(a.xsrfCookieName||r.xsrfCookieName):void 0;d&&(f[a.xsrfHeaderName||r.xsrfHeaderName]=d)}if(o.forEach(f,function(e,t){c||"content-type"!==t.toLowerCase()?l.setRequestHeader(t,e):delete f[t]}),a.withCredentials&&(l.withCredentials=!0),a.responseType)try{l.responseType=a.responseType}catch(g){if("json"!==l.responseType)throw g}o.isArrayBuffer(c)&&(c=new DataView(c)),l.send(c)}},{"./../defaults":6,"./../helpers/buildUrl":7,"./../helpers/cookies":8,"./../helpers/parseHeaders":9,"./../helpers/transformData":11,"./../helpers/urlIsSameOrigin":12,"./../utils":13}],3:[function(e,t,n){"use strict";var r=e("./defaults"),o=e("./utils"),i=e("./core/dispatchRequest"),s=e("./core/InterceptorManager"),u=t.exports=function(e){"string"==typeof e&&(e=o.merge({url:arguments[0]},arguments[1])),e=o.merge({method:"get",headers:{},timeout:r.timeout,transformRequest:r.transformRequest,transformResponse:r.transformResponse},e),e.withCredentials=e.withCredentials||r.withCredentials;var t=[i,void 0],n=Promise.resolve(e);for(u.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),u.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};u.defaults=r,u.all=function(e){return Promise.all(e)},u.spread=e("./helpers/spread"),u.interceptors={request:new s,response:new s},function(){function e(){o.forEach(arguments,function(e){u[e]=function(t,n){return u(o.merge(n||{},{method:e,url:t}))}})}function t(){o.forEach(arguments,function(e){u[e]=function(t,n,r){return u(o.merge(r||{},{method:e,url:t,data:n}))}})}e("delete","get","head"),t("post","put","patch")}()},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/spread":10,"./utils":13}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":13}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{"undefined"!=typeof XMLHttpRequest||"undefined"!=typeof ActiveXObject?e("../adapters/xhr")(r,o,t):"undefined"!=typeof n&&e("../adapters/http")(r,o,t)}catch(i){o(i)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:16}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":13}],7:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t){if(!t)return e;var n=[];return o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),n.push(r(t)+"="+r(e))}))}),n.length>0&&(e+=(-1===e.indexOf("?")?"?":"&")+n.join("&")),e}},{"./../utils":13}],8:[function(e,t,n){"use strict";var r=e("./../utils");t.exports={write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}},{"./../utils":13}],9:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":13}],10:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":13}],12:[function(e,t,n){"use strict";function r(e){var t=e;return s&&(u.setAttribute("href",t),t=u.href),u.setAttribute("href",t),{href:u.href,protocol:u.protocol?u.protocol.replace(/:$/,""):"",host:u.host,search:u.search?u.search.replace(/^\?/,""):"",hash:u.hash?u.hash.replace(/^#/,""):"",hostname:u.hostname,port:u.port,pathname:"/"===u.pathname.charAt(0)?u.pathname:"/"+u.pathname}}var o,i=e("./../utils"),s=/(msie|trident)/i.test(navigator.userAgent),u=document.createElement("a");o=r(window.location.href),t.exports=function(e){var t=i.isString(e)?r(e):e;return t.protocol===o.protocol&&t.host===o.host}},{"./../utils":13}],13:[function(e,t,n){"use strict";function r(e){return"[object Array]"===b.call(e)}function o(e){return"[object ArrayBuffer]"===b.call(e)}function i(e){return"[object FormData]"===b.call(e)}function s(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===b.call(e)}function p(e){return"[object File]"===b.call(e)}function h(e){return"[object Blob]"===b.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(e){return"[object Arguments]"===b.call(e)}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function v(e,t){if(null!==e&&"undefined"!=typeof e){var n=r(e)||g(e);if("object"==typeof e||n||(e=[e]),n)for(var o=0,i=e.length;i>o;o++)t.call(null,e[o],o,e);else for(var s in e)e.hasOwnProperty(s)&&t.call(null,e[s],s,e)}}function y(){var e={};return v(arguments,function(t){v(t,function(t,n){e[n]=t})}),e}var b=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:v,merge:y,trim:d}},{}],14:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],15:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){J=e}function c(e){z=e}function f(){return function(){r.nextTick(g)}}function l(){return function(){V(g)}}function p(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(g,1)}}function g(){for(var e=0;$>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}$=0}function m(){try{var e=t,n=e("vertx");return V=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function w(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){z(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,R(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,R(e,o))},e)}function _(e,t){t._state===oe?S(e,t._result):t._state===ie?R(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){R(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=w(t);n===se?R(e,se.error):void 0===n?S(e,t):s(n)?T(e,t,n):S(e,t)}}function C(e,t){e===t?R(e,y()):i(t)?A(e,t):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),O(e)}function S(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&z(O,e))}function R(e,t){e._state===re&&(e._state=ie,e._result=t,z(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&z(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function L(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return C(n,e),n}function H(e){var t=this,n=new t(v);return R(n,e),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||B(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var V,J,K,Y=X,$=0,z=({}.toString,function(e,t){ne[$]=e,ne[$+1]=t,$+=2,2===$&&(J?J(g):K())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);K=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?m():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;k.prototype._validateInput=function(e){return Y(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var ae=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?R(o,n):r._result[t]=n),0===r._remaining&&S(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=D,fe=q,le=L,pe=H,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=z,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];z(function(){G(r,o,s,i)})}else j(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var ge=M,me={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return me}):"undefined"!=typeof n&&n.exports?n.exports=me:"undefined"!=typeof this&&(this.ES6Promise=me),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:16}],16:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=w(t>>>10&1023|55296),t=56320|1023&t),o+=w(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return w(e>>t&63|128)}function c(e){if(0==(4294967168&e))return w(e);var t="";return 0==(4294965248&e)?t=w(e>>6&31|192):0==(4294901760&e)?(u(e),t=w(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=w(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=w(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[b];if(b++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(b>y)throw Error("Invalid byte index");if(b==y)return!1;if(e=255&v[b],b++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,b=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(o=m);var v,y,b,w=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],18:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e)},function(e){304===e.status?u(null,e.data||!0,e):u({path:i,request:e.data,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);r.push.apply(r,i);var u=(s.headers.link||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",function(e,n){t(e,n)})},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.deleteRepo=function(t){n("DELETE",r,e,t)},this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,function(e,t,n){o(e,t,n)})},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,function(t,n,r){return t?e(t):void e(null,n,r)})},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},function(e){o(e)})},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,function(e){o(e)})})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},function(e,t){r(e,t)})}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":14,"es6-promise":15,utf8:17}]},{},[18])(18)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){V=e}function c(e){$=e}function f(){return function(){r.nextTick(m)}}function l(){return function(){z(m)}}function p(){var e=0,t=new Q(m),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=m,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(m,1)}}function m(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function g(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){$(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?R(e,n):x(e,n))},function(t){r||(r=!0,S(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,S(e,o))},e)}function _(e,t){t._state===oe?x(e,t._result):t._state===ie?S(e,t._result):U(t,void 0,function(t){R(e,t)},function(t){S(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=b(t);n===se?S(e,se.error):void 0===n?x(e,t):s(n)?T(e,t,n):x(e,t)}}function R(e,t){e===t?S(e,y()):i(t)?A(e,t):x(e,t)}function C(e){e._onerror&&e._onerror(e._result),j(e)}function x(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&$(j,e))}function S(e,t){e._state===re&&(e._state=ie,e._result=t,$(C,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)U(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return R(n,e),n}function B(e){var t=this,n=new t(v);return S(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||H(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=({}.toString,function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(m):J())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?g():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;D.prototype._validateInput=function(e){return K(e)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ae=D;D.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},D.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},D.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?S(o,n):r._result[t]=n),0===r._remaining&&x(o,r._result)},D.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=k,fe=L,le=q,pe=B,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=$,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];$(function(){G(r,o,s,i)})}else U(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var me=M,ge={Promise:de,polyfill:me};"function"==typeof e&&e.amd?e(function(){return ge}):"undefined"!=typeof n&&n.exports?n.exports=ge:"undefined"!=typeof this&&(this.ES6Promise=ge),me()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);r.push.apply(r,i);var u=(s.headers.link||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",function(e,n){t(e,n)})},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.deleteRepo=function(t){n("DELETE",r,e,t)},this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,function(e,t,n){o(e,t,n)})},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,function(t,n,r){return t?e(t):void e(null,n,r)})},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},function(e){o(e)})},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,function(e){o(e)})})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},function(e,t){r(e,t)})}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 77986dad..f0d72ee3 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/buildUrl.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/helpers/urlIsSameOrigin.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"defaults","utils","buildUrl","parseHeaders","transformData","resolve","reject","config","data","headers","transformRequest","requestHeaders","merge","common","method","isFormData","request","XMLHttpRequest","ActiveXObject","open","toUpperCase","url","params","timeout","onreadystatechange","readyState","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","isStandardBrowserEnv","cookies","urlIsSameOrigin","xsrfValue","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","withCredentials","isArrayBuffer","DataView","send","./../defaults","./../helpers/buildUrl","./../helpers/cookies","./../helpers/parseHeaders","./../helpers/transformData","./../helpers/urlIsSameOrigin","./../utils",3,"dispatchRequest","InterceptorManager","axios","arguments","chain","promise","Promise","interceptors","interceptor","unshift","fulfilled","rejected","push","then","shift","all","promises","spread","createShortMethods","createShortMethodsWithData","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/spread","./utils",4,"handlers","prototype","use","eject","id","fn","h",5,"process","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"encode","encodeURIComponent","parts","isArray","v","isDate","toISOString","join",8,"write","name","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",9,"parsed","split","line","trim","substr",10,"callback","arr","apply",11,"fns",12,"urlResolve","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","charAt","originUrl","test","navigator","userAgent","createElement","location","requestUrl",13,"toString","ArrayBuffer","isView","str","isArguments","obj","isArrayLike","hasOwnProperty","result","Object",14,"root","freeExports","freeModule","freeGlobal","InvalidCharacterError","message","error","TABLE","REGEX_SPACE_CHARACTERS","decode","input","String","bitStorage","bitCounter","output","position","fromCharCode","b","c","padding","charCodeAt","base64","version","nodeType",15,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",16,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","args","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",17,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",18,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","username","password","token","_requestAllPages","results","iterate","err","res","xhr","links","link","next","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","deleteRepo","ref","createRef","deleteRef","listTags","tags","listPulls","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,OAAAV,MAAA,WAAA,GAAAG,EAAA,OAAA,SAAAQ,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,EAAAD,GCAAC,EAAAD,QAAAkB,EAAA,iBCEGQ,cAAc,IAAIC,GAAG,SAAST,EAAQjB,EAAOD,GCFhD,YAIA,IAAA4B,GAAAV,EAAA,iBACAW,EAAAX,EAAA,cACAY,EAAAZ,EAAA,yBACAa,EAAAb,EAAA,6BACAc,EAAAd,EAAA,6BAEAjB,GAAAD,QAAA,SAAAiC,EAAAC,EAAAC,GAEA,GAAAC,GAAAJ,EACAG,EAAAC,KACAD,EAAAE,QACAF,EAAAG,kBAIAC,EAAAV,EAAAW,MACAZ,EAAAS,QAAAI,OACAb,EAAAS,QAAAF,EAAAO,YACAP,EAAAE,YAGAR,GAAAc,WAAAP,UACAG,GAAA,eAIA,IAAAK,GAAA,IAAAC,gBAAAC,eAAA,oBAqCA,IApCAF,EAAAG,KAAAZ,EAAAO,OAAAM,cAAAlB,EAAAK,EAAAc,IAAAd,EAAAe,SAAA,GAGAN,EAAAO,QAAAhB,EAAAgB,QAGAP,EAAAQ,mBAAA,WACA,GAAAR,GAAA,IAAAA,EAAAS,WAAA,CAEA,GAAAC,GAAAvB,EAAAa,EAAAW,yBACAC,EAAA,MAAA,OAAA,IAAAC,QAAAtB,EAAAuB,cAAA,IAAAd,EAAAe,aAAAf,EAAAgB,SACAA,GACAxB,KAAAJ,EACAwB,EACAF,EACAnB,EAAA0B,mBAEAC,OAAAlB,EAAAkB,OACAC,WAAAnB,EAAAmB,WACA1B,QAAAiB,EACAnB,OAAAA,IAIAS,EAAAkB,QAAA,KAAAlB,EAAAkB,OAAA,IACA7B,EACAC,GAAA0B,GAGAhB,EAAA,OAOAf,EAAAmC,uBAAA,CACA,GAAAC,GAAA/C,EAAA,wBACAgD,EAAAhD,EAAA,gCAGAiD,EAAAD,EAAA/B,EAAAc,KACAgB,EAAAG,KAAAjC,EAAAkC,gBAAAzC,EAAAyC,gBACAC,MAEAH,KACA5B,EAAAJ,EAAAoC,gBAAA3C,EAAA2C,gBAAAJ,GAsBA,GAjBAtC,EAAA2C,QAAAjC,EAAA,SAAAkC,EAAAC,GAEAtC,GAAA,iBAAAsC,EAAAC,cAKA/B,EAAAgC,iBAAAF,EAAAD,SAJAlC,GAAAmC,KASAvC,EAAA0C,kBACAjC,EAAAiC,iBAAA,GAIA1C,EAAAuB,aACA,IACAd,EAAAc,aAAAvB,EAAAuB,aACA,MAAAhD,GACA,GAAA,SAAAkC,EAAAc,aACA,KAAAhD,GAKAmB,EAAAiD,cAAA1C,KACAA,EAAA,GAAA2C,UAAA3C,IAIAQ,EAAAoC,KAAA5C,MDMG6C,gBAAgB,EAAEC,wBAAwB,EAAEC,uBAAuB,EAAEC,4BAA4B,EAAEC,6BAA6B,GAAGC,+BAA+B,GAAGC,aAAa,KAAKC,GAAG,SAAStE,EAAQjB,EAAOD,GExHrN,YAEA,IAAA4B,GAAAV,EAAA,cACAW,EAAAX,EAAA,WACAuE,EAAAvE,EAAA,0BACAwE,EAAAxE,EAAA,6BAEAyE,EAAA1F,EAAAD,QAAA,SAAAmC,GAEA,gBAAAA,KACAA,EAAAN,EAAAW,OACAS,IAAA2C,UAAA,IACAA,UAAA,KAGAzD,EAAAN,EAAAW,OACAE,OAAA,MACAL,WACAc,QAAAvB,EAAAuB,QACAb,iBAAAV,EAAAU,iBACAuB,kBAAAjC,EAAAiC,mBACA1B,GAGAA,EAAA0C,gBAAA1C,EAAA0C,iBAAAjD,EAAAiD,eAGA,IAAAgB,IAAAJ,EAAAnB,QACAwB,EAAAC,QAAA9D,QAAAE,EAUA,KARAwD,EAAAK,aAAApD,QAAA4B,QAAA,SAAAyB,GACAJ,EAAAK,QAAAD,EAAAE,UAAAF,EAAAG,YAGAT,EAAAK,aAAApC,SAAAY,QAAA,SAAAyB,GACAJ,EAAAQ,KAAAJ,EAAAE,UAAAF,EAAAG,YAGAP,EAAArE,QACAsE,EAAAA,EAAAQ,KAAAT,EAAAU,QAAAV,EAAAU,QAGA,OAAAT,GAIAH,GAAA/D,SAAAA,EAGA+D,EAAAa,IAAA,SAAAC,GACA,MAAAV,SAAAS,IAAAC,IAEAd,EAAAe,OAAAxF,EAAA,oBAGAyE,EAAAK,cACApD,QAAA,GAAA8C,GACA9B,SAAA,GAAA8B,IAIA,WACA,QAAAiB,KACA9E,EAAA2C,QAAAoB,UAAA,SAAAlD,GACAiD,EAAAjD,GAAA,SAAAO,EAAAd,GACA,MAAAwD,GAAA9D,EAAAW,MAAAL,OACAO,OAAAA,EACAO,IAAAA,QAMA,QAAA2D,KACA/E,EAAA2C,QAAAoB,UAAA,SAAAlD,GACAiD,EAAAjD,GAAA,SAAAO,EAAAb,EAAAD,GACA,MAAAwD,GAAA9D,EAAAW,MAAAL,OACAO,OAAAA,EACAO,IAAAA,EACAb,KAAAA,QAMAuE,EAAA,SAAA,MAAA,QACAC,EAAA,OAAA,MAAA,cF4HGC,4BAA4B,EAAEC,yBAAyB,EAAEC,aAAa,EAAEC,mBAAmB,GAAGC,UAAU,KAAKC,GAAG,SAAShG,EAAQjB,EAAOD,GGlN3I,YAIA,SAAA0F,KACAlF,KAAA2G,YAHA,GAAAtF,GAAAX,EAAA,aAcAwE,GAAA0B,UAAAC,IAAA,SAAAlB,EAAAC,GAKA,MAJA5F,MAAA2G,SAAAd,MACAF,UAAAA,EACAC,SAAAA,IAEA5F,KAAA2G,SAAA3F,OAAA,GAQAkE,EAAA0B,UAAAE,MAAA,SAAAC,GACA/G,KAAA2G,SAAAI,KACA/G,KAAA2G,SAAAI,GAAA,OAYA7B,EAAA0B,UAAA5C,QAAA,SAAAgD,GACA3F,EAAA2C,QAAAhE,KAAA2G,SAAA,SAAAM,GACA,OAAAA,GACAD,EAAAC,MAKAxH,EAAAD,QAAA0F,IHqNGH,aAAa,KAAKmC,GAAG,SAASxG,EAAQjB,EAAOD,IAChD,SAAW2H,GIzQX,YASA1H,GAAAD,QAAA,SAAAmC,GACA,MAAA,IAAA4D,SAAA,SAAA9D,EAAAC,GACA,IAEA,mBAAAW,iBAAA,mBAAAC,eACA5B,EAAA,mBAAAe,EAAAC,EAAAC,GAGA,mBAAAwF,IACAzG,EAAA,oBAAAe,EAAAC,EAAAC,GAEA,MAAAzB,GACAwB,EAAAxB,SJgRGa,KAAKf,KAAKU,EAAQ,eAElB0G,mBAAmB,EAAEC,kBAAkB,EAAEC,SAAW,KAAKC,GAAG,SAAS7G,EAAQjB,EAAOD,GKvSvF,YAEA,IAAA6B,GAAAX,EAAA,WAEA8G,EAAA,eACAC,GACAC,eAAA,oCAGAjI,GAAAD,SACAsC,kBAAA,SAAAF,EAAAC,GACA,MAAAR,GAAAc,WAAAP,GACAA,EAEAP,EAAAiD,cAAA1C,GACAA,EAEAP,EAAAsG,kBAAA/F,GACAA,EAAAgG,QAEAvG,EAAAwG,SAAAjG,IAAAP,EAAAyG,OAAAlG,IAAAP,EAAA0G,OAAAnG,GAeAA,GAbAP,EAAA2G,YAAAnG,KACAR,EAAA2C,QAAAnC,EAAA,SAAAoC,EAAAC,GACA,iBAAAA,EAAAC,gBACAtC,EAAA,gBAAAoC,KAIA5C,EAAA2G,YAAAnG,EAAA,mBACAA,EAAA,gBAAA,mCAGAoG,KAAAC,UAAAtG,MAKAyB,mBAAA,SAAAzB,GACA,GAAA,gBAAAA,GAAA,CACAA,EAAAA,EAAAuG,QAAAX,EAAA,GACA,KACA5F,EAAAqG,KAAAG,MAAAxG,GACA,MAAA1B,KAEA,MAAA0B,KAGAC,SACAI,QACAoG,OAAA,qCAEAC,MAAAjH,EAAAW,MAAAyF,GACAc,KAAAlH,EAAAW,MAAAyF,GACAe,IAAAnH,EAAAW,MAAAyF,IAGA9E,QAAA,EAEAkB,eAAA,aACAE,eAAA,kBL2SG0C,UAAU,KAAKgC,GAAG,SAAS/H,EAAQjB,EAAOD,GMvW7C,YAIA,SAAAkJ,GAAAzE,GACA,MAAA0E,oBAAA1E,GACAkE,QAAA,QAAA,KACAA,QAAA,QAAA,KACAA,QAAA,OAAA,KACAA,QAAA,QAAA,KACAA,QAAA,OAAA,KACAA,QAAA,QAAA,KACAA,QAAA,QAAA,KAVA,GAAA9G,GAAAX,EAAA,aAoBAjB,GAAAD,QAAA,SAAAiD,EAAAC,GACA,IAAAA,EACA,MAAAD,EAGA,IAAAmG,KA8BA,OA5BAvH,GAAA2C,QAAAtB,EAAA,SAAAuB,EAAAC,GACA,OAAAD,GAAA,mBAAAA,KAIA5C,EAAAwH,QAAA5E,KACAC,GAAA,MAGA7C,EAAAwH,QAAA5E,KACAA,GAAAA,IAGA5C,EAAA2C,QAAAC,EAAA,SAAA6E,GACAzH,EAAA0H,OAAAD,GACAA,EAAAA,EAAAE,cAEA3H,EAAAwG,SAAAiB,KACAA,EAAAb,KAAAC,UAAAY,IAEAF,EAAA/C,KAAA6C,EAAAxE,GAAA,IAAAwE,EAAAI,SAIAF,EAAA5H,OAAA,IACAyB,IAAA,KAAAA,EAAAQ,QAAA,KAAA,IAAA,KAAA2F,EAAAK,KAAA,MAGAxG,KN2WGsC,aAAa,KAAKmE,GAAG,SAASxI,EAAQjB,EAAOD,GOpahD,YAQA,IAAA6B,GAAAX,EAAA,aAEAjB,GAAAD,SACA2J,MAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACA,GAAAC,KACAA,GAAA7D,KAAAuD,EAAA,IAAAT,mBAAAU,IAEAhI,EAAAsI,SAAAL,IACAI,EAAA7D,KAAA,WAAA,GAAA+D,MAAAN,GAAAO,eAGAxI,EAAAyI,SAAAP,IACAG,EAAA7D,KAAA,QAAA0D,GAGAlI,EAAAyI,SAAAN,IACAE,EAAA7D,KAAA,UAAA2D,GAGAC,KAAA,GACAC,EAAA7D,KAAA,UAGAkE,SAAAL,OAAAA,EAAAT,KAAA,OAGArF,KAAA,SAAAwF,GACA,GAAAY,GAAAD,SAAAL,OAAAM,MAAA,GAAAC,QAAA,aAAAb,EAAA,aACA,OAAAY,GAAAE,mBAAAF,EAAA,IAAA,MAGAG,OAAA,SAAAf,GACApJ,KAAAmJ,MAAAC,EAAA,GAAAQ,KAAAQ,MAAA,WPyaGrF,aAAa,KAAKsF,GAAG,SAAS3J,EAAQjB,EAAOD,GQjdhD,YAEA,IAAA6B,GAAAX,EAAA,aAeAjB,GAAAD,QAAA,SAAAqC,GACA,GAAAqC,GAAAD,EAAAtD,EAAA2J,IAEA,OAAAzI,IAEAR,EAAA2C,QAAAnC,EAAA0I,MAAA,MAAA,SAAAC,GACA7J,EAAA6J,EAAAvH,QAAA,KACAiB,EAAA7C,EAAAoJ,KAAAD,EAAAE,OAAA,EAAA/J,IAAAwD,cACAF,EAAA5C,EAAAoJ,KAAAD,EAAAE,OAAA/J,EAAA,IAEAuD,IACAoG,EAAApG,GAAAoG,EAAApG,GAAAoG,EAAApG,GAAA,KAAAD,EAAAA,KAIAqG,GAZAA,KRieGvF,aAAa,KAAK4F,IAAI,SAASjK,EAAQjB,EAAOD,GSrfjD,YAsBAC,GAAAD,QAAA,SAAAoL,GACA,MAAA,UAAAC,GACA,MAAAD,GAAAE,MAAA,KAAAD,UT0fME,IAAI,SAASrK,EAAQjB,EAAOD,GUlhBlC,YAEA,IAAA6B,GAAAX,EAAA,aAUAjB,GAAAD,QAAA,SAAAoC,EAAAC,EAAAmJ,GAKA,MAJA3J,GAAA2C,QAAAgH,EAAA,SAAAhE,GACApF,EAAAoF,EAAApF,EAAAC,KAGAD,KVshBGmD,aAAa,KAAKkG,IAAI,SAASvK,EAAQjB,EAAOD,GWviBjD,YAmBA,SAAA0L,GAAAzI,GACA,GAAA0I,GAAA1I,CAWA,OATA2I,KAEAC,EAAAC,aAAA,OAAAH,GACAA,EAAAE,EAAAF,MAGAE,EAAAC,aAAA,OAAAH,IAIAA,KAAAE,EAAAF,KACAI,SAAAF,EAAAE,SAAAF,EAAAE,SAAApD,QAAA,KAAA,IAAA,GACAqD,KAAAH,EAAAG,KACAC,OAAAJ,EAAAI,OAAAJ,EAAAI,OAAAtD,QAAA,MAAA,IAAA,GACAuD,KAAAL,EAAAK,KAAAL,EAAAK,KAAAvD,QAAA,KAAA,IAAA,GACAwD,SAAAN,EAAAM,SACAC,KAAAP,EAAAO,KACAC,SAAA,MAAAR,EAAAQ,SAAAC,OAAA,GACAT,EAAAQ,SACA,IAAAR,EAAAQ,UAjCA,GAGAE,GAHA1K,EAAAX,EAAA,cACA0K,EAAA,kBAAAY,KAAAC,UAAAC,WACAb,EAAAtB,SAAAoC,cAAA,IAmCAJ,GAAAb,EAAArL,OAAAuM,SAAAjB,MAQA1L,EAAAD,QAAA,SAAA6M,GACA,GAAA/B,GAAAjJ,EAAAyI,SAAAuC,GAAAnB,EAAAmB,GAAAA,CACA,OAAA/B,GAAAiB,WAAAQ,EAAAR,UACAjB,EAAAkB,OAAAO,EAAAP,QX2iBGzG,aAAa,KAAKuH,IAAI,SAAS5L,EAAQjB,EAAOD,GYnmBjD,YAcA,SAAAqJ,GAAA5E,GACA,MAAA,mBAAAsI,EAAAxL,KAAAkD,GASA,QAAAK,GAAAL,GACA,MAAA,yBAAAsI,EAAAxL,KAAAkD,GASA,QAAA9B,GAAA8B,GACA,MAAA,sBAAAsI,EAAAxL,KAAAkD,GASA,QAAA0D,GAAA1D,GACA,MAAA,mBAAAuI,cAAAA,YAAA,OACAA,YAAAC,OAAAxI,GAEA,GAAAA,EAAA,QAAAA,EAAA2D,iBAAA4E,aAUA,QAAA1C,GAAA7F,GACA,MAAA,gBAAAA,GASA,QAAA0F,GAAA1F,GACA,MAAA,gBAAAA,GASA,QAAA+D,GAAA/D,GACA,MAAA,mBAAAA,GASA,QAAA4D,GAAA5D,GACA,MAAA,QAAAA,GAAA,gBAAAA,GASA,QAAA8E,GAAA9E,GACA,MAAA,kBAAAsI,EAAAxL,KAAAkD,GASA,QAAA6D,GAAA7D,GACA,MAAA,kBAAAsI,EAAAxL,KAAAkD,GASA,QAAA8D,GAAA9D,GACA,MAAA,kBAAAsI,EAAAxL,KAAAkD,GASA,QAAAwG,GAAAiC,GACA,MAAAA,GAAAvE,QAAA,OAAA,IAAAA,QAAA,OAAA,IASA,QAAAwE,GAAA1I,GACA,MAAA,uBAAAsI,EAAAxL,KAAAkD,GAgBA,QAAAT,KACA,MACA,mBAAA3D,SACA,mBAAAkK,WACA,kBAAAA,UAAAoC,cAgBA,QAAAnI,GAAA4I,EAAA5F,GAEA,GAAA,OAAA4F,GAAA,mBAAAA,GAAA,CAKA,GAAAC,GAAAhE,EAAA+D,IAAAD,EAAAC,EAQA,IALA,gBAAAA,IAAAC,IACAD,GAAAA,IAIAC,EACA,IAAA,GAAAlM,GAAA,EAAAG,EAAA8L,EAAA5L,OAAAF,EAAAH,EAAAA,IACAqG,EAAAjG,KAAA,KAAA6L,EAAAjM,GAAAA,EAAAiM,OAKA,KAAA,GAAA1I,KAAA0I,GACAA,EAAAE,eAAA5I,IACA8C,EAAAjG,KAAA,KAAA6L,EAAA1I,GAAAA,EAAA0I,IAuBA,QAAA5K,KACA,GAAA+K,KAMA,OALA/I,GAAAoB,UAAA,SAAAwH,GACA5I,EAAA4I,EAAA,SAAA3I,EAAAC,GACA6I,EAAA7I,GAAAD,MAGA8I,EA/NA,GAAAR,GAAAS,OAAApG,UAAA2F,QAkOA9M,GAAAD,SACAqJ,QAAAA,EACAvE,cAAAA,EACAnC,WAAAA,EACAwF,kBAAAA,EACAmC,SAAAA,EACAH,SAAAA,EACA9B,SAAAA,EACAG,YAAAA,EACAe,OAAAA,EACAjB,OAAAA,EACAC,OAAAA,EACAvE,qBAAAA,EACAQ,QAAAA,EACAhC,MAAAA,EACAyI,KAAAA,QZumBMwC,IAAI,SAASvM,EAAQjB,EAAOD,IAClC,SAAWM,Ia91BX,SAAAoN,GAGA,GAAAC,GAAA,gBAAA3N,IAAAA,EAGA4N,EAAA,gBAAA3N,IAAAA,GACAA,EAAAD,SAAA2N,GAAA1N,EAIA4N,EAAA,gBAAAvN,IAAAA,GACAuN,EAAAvN,SAAAuN,GAAAA,EAAAxN,SAAAwN,KACAH,EAAAG,EAKA,IAAAC,GAAA,SAAAC,GACAvN,KAAAuN,QAAAA,EAEAD,GAAA1G,UAAA,GAAAhG,OACA0M,EAAA1G,UAAAwC,KAAA,uBAEA,IAAAoE,GAAA,SAAAD,GAGA,KAAA,IAAAD,GAAAC,IAGAE,EAAA,mEAEAC,EAAA,eAMAC,EAAA,SAAAC,GACAA,EAAAC,OAAAD,GACAzF,QAAAuF,EAAA,GACA,IAAA1M,GAAA4M,EAAA5M,MACAA,GAAA,GAAA,IACA4M,EAAAA,EAAAzF,QAAA,OAAA,IACAnH,EAAA4M,EAAA5M,SAGAA,EAAA,GAAA,GAEA,kBAAAgL,KAAA4B,KAEAJ,EACA,wEAQA,KALA,GACAM,GACAlG,EAFAmG,EAAA,EAGAC,EAAA,GACAC,EAAA,KACAA,EAAAjN,GACA4G,EAAA6F,EAAAxK,QAAA2K,EAAA9B,OAAAmC,IACAH,EAAAC,EAAA,EAAA,GAAAD,EAAAlG,EAAAA,EAEAmG,IAAA,IAEAC,GAAAH,OAAAK,aACA,IAAAJ,IAAA,GAAAC,EAAA,IAIA,OAAAC,IAKAtF,EAAA,SAAAkF,GACAA,EAAAC,OAAAD,GACA,aAAA5B,KAAA4B,IAGAJ,EACA,4EAeA,KAXA,GAGA/M,GACA0N,EACAC,EAEAxG,EAPAyG,EAAAT,EAAA5M,OAAA,EACAgN,EAAA,GACAC,EAAA,GAOAjN,EAAA4M,EAAA5M,OAAAqN,IAEAJ,EAAAjN,GAEAP,EAAAmN,EAAAU,WAAAL,IAAA,GACAE,EAAAP,EAAAU,aAAAL,IAAA,EACAG,EAAAR,EAAAU,aAAAL,GACArG,EAAAnH,EAAA0N,EAAAC,EAGAJ,GACAP,EAAA3B,OAAAlE,GAAA,GAAA,IACA6F,EAAA3B,OAAAlE,GAAA,GAAA,IACA6F,EAAA3B,OAAAlE,GAAA,EAAA,IACA6F,EAAA3B,OAAA,GAAAlE,EAuBA,OAnBA,IAAAyG,GACA5N,EAAAmN,EAAAU,WAAAL,IAAA,EACAE,EAAAP,EAAAU,aAAAL,GACArG,EAAAnH,EAAA0N,EACAH,GACAP,EAAA3B,OAAAlE,GAAA,IACA6F,EAAA3B,OAAAlE,GAAA,EAAA,IACA6F,EAAA3B,OAAAlE,GAAA,EAAA,IACA,KAEA,GAAAyG,IACAzG,EAAAgG,EAAAU,WAAAL,GACAD,GACAP,EAAA3B,OAAAlE,GAAA,GACA6F,EAAA3B,OAAAlE,GAAA,EAAA,IACA,MAIAoG,GAGAO,GACA7F,OAAAA,EACAiF,OAAAA,EACAa,QAAA,QAKA,IACA,kBAAA9O,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WACA,MAAA6O,SAEA,IAAApB,IAAAA,EAAAsB,SACA,GAAArB,EACAA,EAAA5N,QAAA+O,MAEA,KAAA,GAAArK,KAAAqK,GACAA,EAAAzB,eAAA5I,KAAAiJ,EAAAjJ,GAAAqK,EAAArK,QAIAgJ,GAAAqB,OAAAA,GAGAvO,Qbk2BGe,KAAKf,KAAuB,mBAAXF,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,gBAErH6O,IAAI,SAAShO,EAAQjB,EAAOD,IAClC,SAAW2H,EAAQrH,IcjgCnB,WACA,YACA,SAAA6O,GAAAC,GACA,MAAA,kBAAAA,IAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,kBAAAA,GAGA,QAAAE,GAAAF,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAkCA,QAAAG,GAAAC,GACAC,EAAAD,EAGA,QAAAE,GAAAC,GACAC,EAAAD,EAcA,QAAAE,KAGA,MAAA,YACAlI,EAAAmI,SAAAC,IAKA,QAAAC,KACA,MAAA,YACAC,EAAAF,IAIA,QAAAG,KACA,GAAAC,GAAA,EACAC,EAAA,GAAAC,GAAAN,GACAO,EAAA/F,SAAAgG,eAAA,GAGA,OAFAH,GAAAI,QAAAF,GAAAG,eAAA,IAEA,WACAH,EAAAlO,KAAA+N,IAAAA,EAAA,GAKA,QAAAO,KACA,GAAAC,GAAA,GAAAC,eAEA,OADAD,GAAAE,MAAAC,UAAAf,EACA,WACAY,EAAAI,MAAAC,YAAA,IAIA,QAAAC,KACA,MAAA,YACAC,WAAAnB,EAAA,IAKA,QAAAA,KACA,IAAA,GAAA5O,GAAA,EAAAgQ,EAAAhQ,EAAAA,GAAA,EAAA,CACA,GAAAiK,GAAAgG,GAAAjQ,GACAkQ,EAAAD,GAAAjQ,EAAA,EAEAiK,GAAAiG,GAEAD,GAAAjQ,GAAAmD,OACA8M,GAAAjQ,EAAA,GAAAmD,OAGA6M,EAAA,EAGA,QAAAG,KACA,IACA,GAAAzQ,GAAAK,EACAqQ,EAAA1Q,EAAA,QAEA,OADAoP,GAAAsB,EAAAC,WAAAD,EAAAE,aACAzB,IACA,MAAAtP,GACA,MAAAuQ,MAkBA,QAAAS,MAQA,QAAAC,KACA,MAAA,IAAAC,WAAA,4CAGA,QAAAC,KACA,MAAA,IAAAD,WAAA,wDAGA,QAAAE,GAAAhM,GACA,IACA,MAAAA,GAAAQ,KACA,MAAA0H,GAEA,MADA+D,IAAA/D,MAAAA,EACA+D,IAIA,QAAAC,GAAA1L,EAAAuD,EAAAoI,EAAAC,GACA,IACA5L,EAAA/E,KAAAsI,EAAAoI,EAAAC,GACA,MAAAxR,GACA,MAAAA,IAIA,QAAAyR,GAAArM,EAAAsM,EAAA9L,GACAsJ,EAAA,SAAA9J,GACA,GAAAuM,IAAA,EACArE,EAAAgE,EAAA1L,EAAA8L,EAAA,SAAAvI,GACAwI,IACAA,GAAA,EACAD,IAAAvI,EACAyI,EAAAxM,EAAA+D,GAEA0I,EAAAzM,EAAA+D,KAEA,SAAA2I,GACAH,IACAA,GAAA,EAEAI,EAAA3M,EAAA0M,KACA,YAAA1M,EAAA4M,QAAA,sBAEAL,GAAArE,IACAqE,GAAA,EACAI,EAAA3M,EAAAkI,KAEAlI,GAGA,QAAA6M,GAAA7M,EAAAsM,GACAA,EAAAQ,SAAAC,GACAN,EAAAzM,EAAAsM,EAAAU,SACAV,EAAAQ,SAAAG,GACAN,EAAA3M,EAAAsM,EAAAU,SAEAE,EAAAZ,EAAA9N,OAAA,SAAAuF,GACAyI,EAAAxM,EAAA+D,IACA,SAAA2I,GACAC,EAAA3M,EAAA0M,KAKA,QAAAS,GAAAnN,EAAAoN,GACA,GAAAA,EAAAC,cAAArN,EAAAqN,YACAR,EAAA7M,EAAAoN,OACA,CACA,GAAA5M,GAAAwL,EAAAoB,EAEA5M,KAAAyL,GACAU,EAAA3M,EAAAiM,GAAA/D,OACA1J,SAAAgC,EACAiM,EAAAzM,EAAAoN,GACA7D,EAAA/I,GACA6L,EAAArM,EAAAoN,EAAA5M,GAEAiM,EAAAzM,EAAAoN,IAKA,QAAAZ,GAAAxM,EAAA+D,GACA/D,IAAA+D,EACA4I,EAAA3M,EAAA6L,KACAxC,EAAAtF,GACAoJ,EAAAnN,EAAA+D,GAEA0I,EAAAzM,EAAA+D,GAIA,QAAAuJ,GAAAtN,GACAA,EAAAuN,UACAvN,EAAAuN,SAAAvN,EAAAgN,SAGAQ,EAAAxN,GAGA,QAAAyM,GAAAzM,EAAA+D,GACA/D,EAAA8M,SAAAW,KAEAzN,EAAAgN,QAAAjJ,EACA/D,EAAA8M,OAAAC,GAEA,IAAA/M,EAAA0N,aAAAhS,QACAoO,EAAA0D,EAAAxN,IAIA,QAAA2M,GAAA3M,EAAA0M,GACA1M,EAAA8M,SAAAW,KACAzN,EAAA8M,OAAAG,GACAjN,EAAAgN,QAAAN,EAEA5C,EAAAwD,EAAAtN,IAGA,QAAAkN,GAAAS,EAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAJ,EAAAD,aACAhS,EAAAqS,EAAArS,MAEAiS,GAAAJ,SAAA,KAEAQ,EAAArS,GAAAkS,EACAG,EAAArS,EAAAqR,IAAAc,EACAE,EAAArS,EAAAuR,IAAAa,EAEA,IAAApS,GAAAiS,EAAAb,QACAhD,EAAA0D,EAAAG,GAIA,QAAAH,GAAAxN,GACA,GAAA+N,GAAA/N,EAAA0N,aACAM,EAAAhO,EAAA8M,MAEA,IAAA,IAAAiB,EAAArS,OAAA,CAIA,IAAA,GAFAkS,GAAAtI,EAAA2I,EAAAjO,EAAAgN,QAEA3R,EAAA,EAAAA,EAAA0S,EAAArS,OAAAL,GAAA,EACAuS,EAAAG,EAAA1S,GACAiK,EAAAyI,EAAA1S,EAAA2S,GAEAJ,EACAM,EAAAF,EAAAJ,EAAAtI,EAAA2I,GAEA3I,EAAA2I,EAIAjO,GAAA0N,aAAAhS,OAAA,GAGA,QAAAyS,KACAzT,KAAAwN,MAAA,KAKA,QAAAkG,GAAA9I,EAAA2I,GACA,IACA,MAAA3I,GAAA2I,GACA,MAAArT,GAEA,MADAyT,IAAAnG,MAAAtN,EACAyT,IAIA,QAAAH,GAAAF,EAAAhO,EAAAsF,EAAA2I,GACA,GACAlK,GAAAmE,EAAAoG,EAAAC,EADAC,EAAAjF,EAAAjE,EAGA,IAAAkJ,GAWA,GAVAzK,EAAAqK,EAAA9I,EAAA2I,GAEAlK,IAAAsK,IACAE,GAAA,EACArG,EAAAnE,EAAAmE,MACAnE,EAAA,MAEAuK,GAAA,EAGAtO,IAAA+D,EAEA,WADA4I,GAAA3M,EAAA+L,SAKAhI,GAAAkK,EACAK,GAAA,CAGAtO,GAAA8M,SAAAW,KAEAe,GAAAF,EACA9B,EAAAxM,EAAA+D,GACAwK,EACA5B,EAAA3M,EAAAkI,GACA8F,IAAAjB,GACAN,EAAAzM,EAAA+D,GACAiK,IAAAf,IACAN,EAAA3M,EAAA+D,IAIA,QAAA0K,GAAAzO,EAAA0O,GACA,IACAA,EAAA,SAAA3K,GACAyI,EAAAxM,EAAA+D,IACA,SAAA2I,GACAC,EAAA3M,EAAA0M,KAEA,MAAA9R,GACA+R,EAAA3M,EAAApF,IAIA,QAAA+T,GAAAC,EAAAtG,GACA,GAAAuG,GAAAnU,IAEAmU,GAAAC,qBAAAF,EACAC,EAAA7O,QAAA,GAAA4O,GAAAhD,GAEAiD,EAAAE,eAAAzG,IACAuG,EAAAG,OAAA1G,EACAuG,EAAAnT,OAAA4M,EAAA5M,OACAmT,EAAAI,WAAA3G,EAAA5M,OAEAmT,EAAAK,QAEA,IAAAL,EAAAnT,OACA+Q,EAAAoC,EAAA7O,QAAA6O,EAAA7B,UAEA6B,EAAAnT,OAAAmT,EAAAnT,QAAA,EACAmT,EAAAM,aACA,IAAAN,EAAAI,YACAxC,EAAAoC,EAAA7O,QAAA6O,EAAA7B,WAIAL,EAAAkC,EAAA7O,QAAA6O,EAAAO,oBA2EA,QAAAC,GAAAC,GACA,MAAA,IAAAC,IAAA7U,KAAA4U,GAAAtP,QAGA,QAAAwP,GAAAF,GAaA,QAAAzB,GAAA9J,GACAyI,EAAAxM,EAAA+D,GAGA,QAAA+J,GAAApB,GACAC,EAAA3M,EAAA0M,GAhBA,GAAAkC,GAAAlU,KAEAsF,EAAA,GAAA4O,GAAAhD,EAEA,KAAA6D,EAAAH,GAEA,MADA3C,GAAA3M,EAAA,GAAA8L,WAAA,oCACA9L,CAaA,KAAA,GAVAtE,GAAA4T,EAAA5T,OAUAL,EAAA,EAAA2E,EAAA8M,SAAAW,IAAA/R,EAAAL,EAAAA,IACA6R,EAAA0B,EAAAzS,QAAAmT,EAAAjU,IAAAmD,OAAAqP,EAAAC,EAGA,OAAA9N,GAGA,QAAA0P,GAAAC,GAEA,GAAAf,GAAAlU,IAEA,IAAAiV,GAAA,gBAAAA,IAAAA,EAAAtC,cAAAuB,EACA,MAAAe,EAGA,IAAA3P,GAAA,GAAA4O,GAAAhD,EAEA,OADAY,GAAAxM,EAAA2P,GACA3P,EAGA,QAAA4P,GAAAlD,GAEA,GAAAkC,GAAAlU,KACAsF,EAAA,GAAA4O,GAAAhD,EAEA,OADAe,GAAA3M,EAAA0M,GACA1M,EAMA,QAAA6P,KACA,KAAA,IAAA/D,WAAA,sFAGA,QAAAgE,KACA,KAAA,IAAAhE,WAAA,yHA2GA,QAAAiE,GAAArB,GACAhU,KAAAsV,IAAAC,KACAvV,KAAAoS,OAAAtO,OACA9D,KAAAsS,QAAAxO,OACA9D,KAAAgT,gBAEA9B,IAAA8C,IACAnF,EAAAmF,IACAmB,IAGAnV,eAAAqV,IACAD,IAGArB,EAAA/T,KAAAgU,IAsQA,QAAAwB,KACA,GAAAC,EAEA,IAAA,mBAAA3V,GACA2V,EAAA3V,MACA,IAAA,mBAAAC,MACA0V,EAAA1V,SAEA,KACA0V,EAAAC,SAAA,iBACA,MAAAxV,GACA,KAAA,IAAAU,OAAA,4EAIA,GAAA+U,GAAAF,EAAAlQ,UAEAoQ,GAAA,qBAAA3I,OAAApG,UAAA2F,SAAAxL,KAAA4U,EAAAlU,YAAAkU,EAAAC,QAIAH,EAAAlQ,QAAAsQ,IA55BA,GAAAC,EAMAA,GALAC,MAAAlN,QAKAkN,MAAAlN,QAJA,SAAA+F,GACA,MAAA,mBAAA5B,OAAApG,UAAA2F,SAAAxL,KAAA6N,GAMA,IAGAa,GACAR,EAwGA+G,EA5GAjB,EAAAe,EACAnF,EAAA,EAKAvB,MAJA7C,SAIA,SAAA3B,EAAAiG,GACAD,GAAAD,GAAA/F,EACAgG,GAAAD,EAAA,GAAAE,EACAF,GAAA,EACA,IAAAA,IAIA1B,EACAA,EAAAM,GAEAyG,OAaAC,EAAA,mBAAApW,QAAAA,OAAAiE,OACAoS,EAAAD,MACApG,EAAAqG,EAAAC,kBAAAD,EAAAE,uBACAC,GAAA,mBAAAlP,IAAA,wBAAAoF,SAAAxL,KAAAoG,GAGAmP,GAAA,mBAAAC,oBACA,mBAAAC,gBACA,mBAAApG,gBA4CAQ,GAAA,GAAAmF,OAAA,IA6BAC,GADAK,GACAhH,IACAQ,EACAH,IACA4G,GACApG,IACApM,SAAAmS,GAAA,kBAAAvV,GACAoQ,IAEAL,GAKA,IAAAsC,IAAA,OACAV,GAAA,EACAE,GAAA,EAEAhB,GAAA,GAAAkC,GAkKAE,GAAA,GAAAF,EAwFAQ,GAAArN,UAAAyN,eAAA,SAAAzG,GACA,MAAAmH,GAAAnH,IAGAqG,EAAArN,UAAA8N,iBAAA,WACA,MAAA,IAAA9T,OAAA,4CAGAqT,EAAArN,UAAA4N,MAAA,WACAxU,KAAAsS,QAAA,GAAAyD,OAAA/V,KAAAgB,QAGA,IAAA6T,IAAAZ,CAEAA,GAAArN,UAAA6N,WAAA,WAOA,IAAA,GANAN,GAAAnU,KAEAgB,EAAAmT,EAAAnT,OACAsE,EAAA6O,EAAA7O,QACAsI,EAAAuG,EAAAG,OAEA3T,EAAA,EAAA2E,EAAA8M,SAAAW,IAAA/R,EAAAL,EAAAA,IACAwT,EAAAsC,WAAA7I,EAAAjN,GAAAA,IAIAsT,EAAArN,UAAA6P,WAAA,SAAAC,EAAA/V,GACA,GAAAwT,GAAAnU,KACAoO,EAAA+F,EAAAC,oBAEAtF,GAAA4H,GACAA,EAAA/D,cAAAvE,GAAAsI,EAAAtE,SAAAW,IACA2D,EAAA7D,SAAA,KACAsB,EAAAwC,WAAAD,EAAAtE,OAAAzR,EAAA+V,EAAApE,UAEA6B,EAAAyC,cAAAxI,EAAA3M,QAAAiV,GAAA/V,IAGAwT,EAAAI,aACAJ,EAAA7B,QAAA3R,GAAA+V,IAIAzC,EAAArN,UAAA+P,WAAA,SAAAE,EAAAlW,EAAA0I,GACA,GAAA8K,GAAAnU,KACAsF,EAAA6O,EAAA7O,OAEAA,GAAA8M,SAAAW,KACAoB,EAAAI,aAEAsC,IAAAtE,GACAN,EAAA3M,EAAA+D,GAEA8K,EAAA7B,QAAA3R,GAAA0I,GAIA,IAAA8K,EAAAI,YACAxC,EAAAzM,EAAA6O,EAAA7B,UAIA2B,EAAArN,UAAAgQ,cAAA,SAAAtR,EAAA3E,GACA,GAAAwT,GAAAnU,IAEAwS,GAAAlN,EAAAxB,OAAA,SAAAuF,GACA8K,EAAAwC,WAAAtE,GAAA1R,EAAA0I,IACA,SAAA2I,GACAmC,EAAAwC,WAAApE,GAAA5R,EAAAqR,KAMA,IAAA8E,IAAAnC,EA4BAoC,GAAAjC,EAaAkC,GAAAhC,EAQAiC,GAAA/B,EAEAK,GAAA,EAUAM,GAAAR,CA2HAA,GAAArP,IAAA8Q,GACAzB,EAAA6B,KAAAH,GACA1B,EAAA5T,QAAAuV,GACA3B,EAAA3T,OAAAuV,GACA5B,EAAA8B,cAAApI,EACAsG,EAAA+B,SAAAlI,EACAmG,EAAAgC,MAAAjI,EAEAiG,EAAAzO,WACA+L,YAAA0C,EAmMAvP,KAAA,SAAAqN,EAAAC,GACA,GAAAH,GAAAjT,KACA6W,EAAA5D,EAAAb,MAEA,IAAAyE,IAAAxE,KAAAc,GAAA0D,IAAAtE,KAAAa,EACA,MAAApT,KAGA,IAAAkT,GAAA,GAAAlT,MAAA2S,YAAAzB,GACAnE,EAAAkG,EAAAX,OAEA,IAAAuE,EAAA,CACA,GAAAjM,GAAAxF,UAAAyR,EAAA,EACAzH,GAAA,WACAoE,EAAAqD,EAAA3D,EAAAtI,EAAAmC,SAGAyF,GAAAS,EAAAC,EAAAC,EAAAC,EAGA,OAAAF,IA8BAoE,QAAA,SAAAlE,GACA,MAAApT,MAAA8F,KAAA,KAAAsN,IA0BA,IAAAmE,IAAA/B,EAEAgC,IACAjS,QAAAsQ,GACA4B,SAAAF,GAIA,mBAAA7X,IAAAA,EAAA,IACAA,EAAA,WAAA,MAAA8X,MACA,mBAAA/X,IAAAA,EAAA,QACAA,EAAA,QAAA+X,GACA,mBAAAxX,QACAA,KAAA,WAAAwX,IAGAD,OACAxW,KAAAf,Qd6gCGe,KAAKf,KAAKU,EAAQ,YAA8B,mBAAXZ,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,aAE5IyH,SAAW,KAAKoQ,IAAI,SAAShX,EAAQjB,EAAOD,Ge58D/C,QAAAmY,KACAC,GAAA,EACAC,EAAA7W,OACA8W,EAAAD,EAAAE,OAAAD,GAEAE,EAAA,GAEAF,EAAA9W,QACAiX,IAIA,QAAAA,KACA,IAAAL,EAAA,CAGA,GAAAjV,GAAA+N,WAAAiH,EACAC,IAAA,CAGA,KADA,GAAAM,GAAAJ,EAAA9W,OACAkX,GAAA,CAGA,IAFAL,EAAAC,EACAA,OACAE,EAAAE,GACAL,GACAA,EAAAG,GAAAG,KAGAH,GAAA,GACAE,EAAAJ,EAAA9W,OAEA6W,EAAA,KACAD,GAAA,EACAQ,aAAAzV,IAiBA,QAAA0V,GAAAC,EAAAC,GACAvY,KAAAsY,IAAAA,EACAtY,KAAAuY,MAAAA,EAYA,QAAAC,MAtEA,GAGAX,GAHA1Q,EAAA1H,EAAAD,WACAsY,KACAF,GAAA,EAEAI,EAAA,EAsCA7Q,GAAAmI,SAAA,SAAAgJ,GACA,GAAAG,GAAA,GAAA1C,OAAA3Q,UAAApE,OAAA,EACA,IAAAoE,UAAApE,OAAA,EACA,IAAA,GAAAL,GAAA,EAAAA,EAAAyE,UAAApE,OAAAL,IACA8X,EAAA9X,EAAA,GAAAyE,UAAAzE,EAGAmX,GAAAjS,KAAA,GAAAwS,GAAAC,EAAAG,IACA,IAAAX,EAAA9W,QAAA4W,GACAlH,WAAAuH,EAAA,IASAI,EAAAzR,UAAAuR,IAAA,WACAnY,KAAAsY,IAAAxN,MAAA,KAAA9K,KAAAuY,QAEApR,EAAAuR,MAAA,UACAvR,EAAAwR,SAAA,EACAxR,EAAAyR,OACAzR,EAAA0R,QACA1R,EAAAqH,QAAA,GACArH,EAAA2R,YAIA3R,EAAA4R,GAAAP,EACArR,EAAA6R,YAAAR,EACArR,EAAA8R,KAAAT,EACArR,EAAA+R,IAAAV,EACArR,EAAAgS,eAAAX,EACArR,EAAAiS,mBAAAZ,EACArR,EAAAkS,KAAAb,EAEArR,EAAAmS,QAAA,SAAAlQ,GACA,KAAA,IAAAxI,OAAA,qCAGAuG,EAAAoS,IAAA,WAAA,MAAA,KACApS,EAAAqS,MAAA,SAAAC,GACA,KAAA,IAAA7Y,OAAA,mCAEAuG,EAAAuS,MAAA,WAAA,MAAA,Sfu9DMC,IAAI,SAASjZ,EAAQjB,EAAOD,IAClC,SAAWM,IgBjjEX,SAAAoN,GAqBA,QAAA0M,GAAAC,GAMA,IALA,GAGAxQ,GACAyQ,EAJA9L,KACA+L,EAAA,EACA/Y,EAAA6Y,EAAA7Y,OAGAA,EAAA+Y,GACA1Q,EAAAwQ,EAAAvL,WAAAyL,KACA1Q,GAAA,OAAA,OAAAA,GAAArI,EAAA+Y,GAEAD,EAAAD,EAAAvL,WAAAyL,KACA,QAAA,MAAAD,GACA9L,EAAAnI,OAAA,KAAAwD,IAAA,KAAA,KAAAyQ,GAAA,QAIA9L,EAAAnI,KAAAwD,GACA0Q,MAGA/L,EAAAnI,KAAAwD,EAGA,OAAA2E,GAIA,QAAAgM,GAAAzB,GAKA,IAJA,GAEAlP,GAFArI,EAAAuX,EAAAvX,OACAiZ,EAAA,GAEAjM,EAAA,KACAiM,EAAAjZ,GACAqI,EAAAkP,EAAA0B,GACA5Q,EAAA,QACAA,GAAA,MACA2E,GAAAkM,EAAA7Q,IAAA,GAAA,KAAA,OACAA,EAAA,MAAA,KAAAA,GAEA2E,GAAAkM,EAAA7Q,EAEA,OAAA2E,GAGA,QAAAmM,GAAAC,GACA,GAAAA,GAAA,OAAA,OAAAA,EACA,KAAAxZ,OACA,oBAAAwZ,EAAA7N,SAAA,IAAA/J,cACA,0BAMA,QAAA6X,GAAAD,EAAArU,GACA,MAAAmU,GAAAE,GAAArU,EAAA,GAAA,KAGA,QAAAuU,GAAAF,GACA,GAAA,IAAA,WAAAA,GACA,MAAAF,GAAAE,EAEA,IAAAG,GAAA,EAeA,OAdA,KAAA,WAAAH,GACAG,EAAAL,EAAAE,GAAA,EAAA,GAAA,KAEA,IAAA,WAAAA,IACAD,EAAAC,GACAG,EAAAL,EAAAE,GAAA,GAAA,GAAA,KACAG,GAAAF,EAAAD,EAAA,IAEA,IAAA,WAAAA,KACAG,EAAAL,EAAAE,GAAA,GAAA,EAAA,KACAG,GAAAF,EAAAD,EAAA,IACAG,GAAAF,EAAAD,EAAA,IAEAG,GAAAL,EAAA,GAAAE,EAAA,KAIA,QAAAI,GAAAX,GAMA,IALA,GAGAO,GAHAK,EAAAb,EAAAC,GACA7Y,EAAAyZ,EAAAzZ,OACAiZ,EAAA,GAEAS,EAAA,KACAT,EAAAjZ,GACAoZ,EAAAK,EAAAR,GACAS,GAAAJ,EAAAF,EAEA,OAAAM,GAKA,QAAAC,KACA,GAAAC,GAAAC,EACA,KAAAja,OAAA,qBAGA,IAAAka,GAAA,IAAAC,EAAAH,EAGA,IAFAA,IAEA,MAAA,IAAAE,GACA,MAAA,IAAAA,CAIA,MAAAla,OAAA,6BAGA,QAAAoa,KACA,GAAAC,GACAC,EACAC,EACAC,EACAhB,CAEA,IAAAQ,EAAAC,EACA,KAAAja,OAAA,qBAGA,IAAAga,GAAAC,EACA,OAAA,CAQA,IAJAI,EAAA,IAAAF,EAAAH,GACAA,IAGA,IAAA,IAAAK,GACA,MAAAA,EAIA,IAAA,MAAA,IAAAA,GAAA,CACA,GAAAC,GAAAP,GAEA,IADAP,GAAA,GAAAa,IAAA,EAAAC,EACAd,GAAA,IACA,MAAAA,EAEA,MAAAxZ,OAAA,6BAKA,GAAA,MAAA,IAAAqa,GAAA,CAIA,GAHAC,EAAAP,IACAQ,EAAAR,IACAP,GAAA,GAAAa,IAAA,GAAAC,GAAA,EAAAC,EACAf,GAAA,KAEA,MADAD,GAAAC,GACAA,CAEA,MAAAxZ,OAAA,6BAKA,GAAA,MAAA,IAAAqa,KACAC,EAAAP,IACAQ,EAAAR,IACAS,EAAAT,IACAP,GAAA,GAAAa,IAAA,GAAAC,GAAA,GACAC,GAAA,EAAAC,EACAhB,GAAA,OAAA,SAAAA,GACA,MAAAA,EAIA,MAAAxZ,OAAA,0BAMA,QAAAya,GAAAX,GACAK,EAAAnB,EAAAc,GACAG,EAAAE,EAAA/Z,OACA4Z,EAAA,CAGA,KAFA,GACAU,GADAb,MAEAa,EAAAN,QAAA,GACAP,EAAA5U,KAAAyV,EAEA,OAAAtB,GAAAS,GA5MA,GAAAtN,GAAA,gBAAA3N,IAAAA,EAGA4N,EAAA,gBAAA3N,IAAAA,GACAA,EAAAD,SAAA2N,GAAA1N,EAIA4N,EAAA,gBAAAvN,IAAAA,GACAuN,EAAAvN,SAAAuN,GAAAA,EAAAxN,SAAAwN,KACAH,EAAAG,EAKA,IAiLA0N,GACAF,EACAD,EAnLAV,EAAArM,OAAAK,aAkMAqN,GACA/M,QAAA,QACA9F,OAAA8R,EACA7M,OAAA0N,EAKA,IACA,kBAAA3b,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WACA,MAAA6b,SAEA,IAAApO,IAAAA,EAAAsB,SACA,GAAArB,EACAA,EAAA5N,QAAA+b,MACA,CACA,GAAAtG,MACAnI,EAAAmI,EAAAnI,cACA,KAAA,GAAA5I,KAAAqX,GACAzO,EAAA/L,KAAAwa,EAAArX,KAAAiJ,EAAAjJ,GAAAqX,EAAArX,QAIAgJ,GAAAqO,KAAAA,GAGAvb,QhBqjEGe,KAAKf,KAAuB,mBAAXF,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,gBAErH2b,IAAI,SAAS9a,EAAQjB,EAAOD,GiB/xElC,cAEA,SAAA0N,EAAAuO,GACA,kBAAA/b,IAAAA,EAAAC,IACAD,GAAA,cAAA,UAAA,OAAA,SAAA,SAAA6F,EAAAmW,EAAAC,EAAAxW,GACA,MAAA+H,GAAAjN,OAAAwb,EAAAlW,EAAAmW,EAAAC,EAAAxW,KAEA,gBAAA1F,IAAAA,EAAAD,QACAC,EAAAD,QAAAic,EAAA/a,EAAA,eAAAA,EAAA,WAAAA,EAAA,QAAAA,EAAA,UAEAwM,EAAAjN,OAAAwb,EAAAvO,EAAA3H,QAAA2H,EAAAqB,OAAArB,EAAAqO,KAAArO,EAAA/H,QAEAnF,KAAA,SAAAuF,EAAAmW,EAAAC,EAAAxW,GACA,QAAAyW,GAAA/B,GACA,MAAA6B,GAAAhT,OAAAiT,EAAAjT,OAAAmR,IAGAtU,EAAAkS,UACAlS,EAAAkS,UAMA,IAAAxX,GAAA,SAAA4b,GACA,GAAAC,GAAAD,EAAAE,QAAA,yBAOAC,EAAA/b,EAAA+b,SAAA,SAAA9Z,EAAAqH,EAAA3H,EAAAqa,EAAAC,GACA,QAAAC,KACA,GAAA1Z,GAAA8G,EAAAtG,QAAA,OAAA,EAAAsG,EAAAuS,EAAAvS,CAIA,IAFA9G,GAAA,KAAAuJ,KAAAvJ,GAAA,IAAA,IAEAb,GAAA,gBAAAA,KAAA,MAAA,OAAA,UAAAqB,QAAAf,GAAA,GACA,IAAA,GAAAka,KAAAxa,GACAA,EAAAkL,eAAAsP,KACA3Z,GAAA,IAAAkG,mBAAAyT,GAAA,IAAAzT,mBAAA/G,EAAAwa,IAIA,OAAA3Z,IAAA,mBAAA5C,QAAA,KAAA,GAAA+J,OAAAyS,UAAA,IAGA,GAAA1a,IACAE,SACAwG,OAAA6T,EAAA,qCAAA,iCACAxU,eAAA,kCAEAxF,OAAAA,EACAN,KAAAA,EAAAA,KACAa,IAAA0Z,IASA,QANAN,EAAA,OAAAA,EAAAS,UAAAT,EAAAU,YACA5a,EAAAE,QAAA,cAAAga,EAAAW,MACA,SAAAX,EAAAW,MACA,SAAAZ,EAAAC,EAAAS,SAAA,IAAAT,EAAAU,WAGApX,EAAAxD,GACAmE,KAAA,SAAA1C,GACA6Y,EACA,KACA7Y,EAAAxB,OAAA,EACAwB,IAEA,SAAAA,GACA,MAAAA,EAAAE,OACA2Y,EACA,KACA7Y,EAAAxB,OAAA,EACAwB,GAGA6Y,GACA1S,KAAAA,EACAnH,QAAAgB,EAAAxB,KACA4L,MAAApK,EAAAE,YAMAmZ,EAAAxc,EAAAwc,iBAAA,SAAAlT,EAAA0S,GACA,GAAAS,OAEA,QAAAC,KACAX,EAAA,MAAAzS,EAAA,KAAA,SAAAqT,EAAAC,EAAAC,GACA,GAAAF,EACA,MAAAX,GAAAW,EAGAF,GAAA7W,KAAAiF,MAAA4R,EAAAG,EAEA,IAAAE,IAAAD,EAAAjb,QAAAmb,MAAA,IAAAzS,MAAA,YACA0S,EAAA,IAEAF,GAAA/Y,QAAA,SAAAgZ,GACAC,EAAA,aAAAjR,KAAAgR,GAAAA,EAAAC,IAGAA,IACAA,GAAA,SAAAC,KAAAD,QAAA,IAGAA,GAGA1T,EAAA0T,EACAN,KAHAV,EAAAW,EAAAF,QA02BA,OA91BAzc,GAAAkd,KAAA,WACAnd,KAAAod,MAAA,SAAAvB,EAAAI,GACA,IAAA7W,UAAApE,QAAA,kBAAAoE,WAAA,KACA6W,EAAAJ,EACAA,MAGAA,EAAAA,KAEA,IAAApZ,GAAA,cACAC,IAEAA,GAAAmD,KAAA,QAAA8C,mBAAAkT,EAAAwB,MAAA,QACA3a,EAAAmD,KAAA,QAAA8C,mBAAAkT,EAAAyB,MAAA,YACA5a,EAAAmD,KAAA,YAAA8C,mBAAAkT,EAAA0B,UAAA,QAEA1B,EAAA2B,MACA9a,EAAAmD,KAAA,QAAA8C,mBAAAkT,EAAA2B,OAGA/a,GAAA,IAAAC,EAAAuG,KAAA,KAEA+S,EAAA,MAAAvZ,EAAA,KAAAwZ,IAMAjc,KAAAyd,KAAA,SAAAxB,GACAD,EAAA,MAAA,aAAA,KAAAC,IAMAjc,KAAA0d,MAAA,SAAAzB,GACAD,EAAA,MAAA,SAAA,KAAAC,IAMAjc,KAAA2d,cAAA,SAAA9B,EAAAI,GACA,IAAA7W,UAAApE,QAAA,kBAAAoE,WAAA,KACA6W,EAAAJ,EACAA,MAGAA,EAAAA,KACA,IAAApZ,GAAA,iBACAC,IAUA,IARAmZ,EAAA7V,KACAtD,EAAAmD,KAAA,YAGAgW,EAAA+B,eACAlb,EAAAmD,KAAA,sBAGAgW,EAAAgC,MAAA,CACA,GAAAA,GAAAhC,EAAAgC,KAEAA,GAAAlL,cAAA/I,OACAiU,EAAAA,EAAA7U,eAGAtG,EAAAmD,KAAA,SAAA8C,mBAAAkV,IAGA,GAAAhC,EAAAiC,OAAA,CACA,GAAAA,GAAAjC,EAAAiC,MAEAA,GAAAnL,cAAA/I,OACAkU,EAAAA,EAAA9U,eAGAtG,EAAAmD,KAAA,UAAA8C,mBAAAmV,IAGAjC,EAAA2B,MACA9a,EAAAmD,KAAA,QAAA8C,mBAAAkT,EAAA2B,OAGA9a,EAAA1B,OAAA,IACAyB,GAAA,IAAAC,EAAAuG,KAAA,MAGA+S,EAAA,MAAAvZ,EAAA,KAAAwZ,IAMAjc,KAAA+d,KAAA,SAAAzB,EAAAL,GACA,GAAA+B,GAAA1B,EAAA,UAAAA,EAAA,OAEAN,GAAA,MAAAgC,EAAA,KAAA/B,IAMAjc,KAAAie,UAAA,SAAA3B,EAAAL,GAEAQ,EAAA,UAAAH,EAAA,4CAAAL,IAMAjc,KAAAke,YAAA,SAAA5B,EAAAL,GAEAQ,EAAA,UAAAH,EAAA,iCAAA,SAAAM,EAAAC,GACAZ,EAAAW,EAAAC,MAOA7c,KAAAme,UAAA,SAAA7B,EAAAL,GACAD,EAAA,MAAA,UAAAM,EAAA,SAAA,KAAAL,IAMAjc,KAAAoe,SAAA,SAAAC,EAAApC,GAEAQ,EAAA,SAAA4B,EAAA,6DAAApC,IAMAjc,KAAAse,OAAA,SAAAhC,EAAAL,GACAD,EAAA,MAAA,mBAAAM,EAAA,KAAAL,IAMAjc,KAAAue,SAAA,SAAAjC,EAAAL,GACAD,EAAA,SAAA,mBAAAM,EAAA,KAAAL,IAKAjc,KAAAwe,WAAA,SAAA3C,EAAAI,GACAD,EAAA,OAAA,cAAAH,EAAAI,KAOAhc,EAAAwe,WAAA,SAAA5C,GA6BA,QAAA6C,GAAAC,EAAA1C,GACA,MAAA0C,KAAAC,EAAAD,QAAAC,EAAAC,IACA5C,EAAA,KAAA2C,EAAAC,SAGAC,GAAAC,OAAA,SAAAJ,EAAA,SAAA/B,EAAAiC,GACAD,EAAAD,OAAAA,EACAC,EAAAC,IAAAA,EACA5C,EAAAW,EAAAiC,KApCA,GAKAG,GALAC,EAAApD,EAAAzS,KACA8V,EAAArD,EAAAqD,KACAC,EAAAtD,EAAAsD,SAEAL,EAAA9e,IAIAgf,GADAG,EACA,UAAAA,EAEA,UAAAD,EAAA,IAAAD,CAGA,IAAAL,IACAD,OAAA,KACAE,IAAA,KAMA7e,MAAAof,WAAA,SAAAnD,GACAD,EAAA,SAAAgD,EAAAnD,EAAAI,IAqBAjc,KAAA+e,OAAA,SAAAM,EAAApD,GACAD,EAAA,MAAAgD,EAAA,aAAAK,EAAA,KAAA,SAAAzC,EAAAC,EAAAC,GACA,MAAAF,GACAX,EAAAW,OAGAX,GAAA,KAAAY,EAAA5H,OAAA4J,IAAA/B,MAYA9c,KAAAsf,UAAA,SAAAzD,EAAAI,GACAD,EAAA,OAAAgD,EAAA,YAAAnD,EAAAI,IASAjc,KAAAuf,UAAA,SAAAF,EAAApD,GACAD,EAAA,SAAAgD,EAAA,aAAAK,EAAAxD,EAAA,SAAAe,EAAAC,EAAAC,GACAb,EAAAW,EAAAC,EAAAC,MAOA9c,KAAAwe,WAAA,SAAA3C,EAAAI,GACAD,EAAA,OAAA,cAAAH,EAAAI,IAMAjc,KAAAof,WAAA,SAAAnD,GACAD,EAAA,SAAAgD,EAAAnD,EAAAI,IAMAjc,KAAAwf,SAAA,SAAAvD,GACAD,EAAA,MAAAgD,EAAA,QAAA,KAAA,SAAApC,EAAA6C,EAAA3C,GACA,MAAAF,GACAX,EAAAW,OAGAX,GAAA,KAAAwD,EAAA3C,MAOA9c,KAAA0f,UAAA,SAAA7D,EAAAI,GACAJ,EAAAA,KACA,IAAApZ,GAAAuc,EAAA,SACAtc,IAEA,iBAAAmZ,GAEAnZ,EAAAmD,KAAA,SAAAgW,IAEAA,EAAAhF,OACAnU,EAAAmD,KAAA,SAAA8C,mBAAAkT,EAAAhF,QAGAgF,EAAA8D,MACAjd,EAAAmD,KAAA,QAAA8C,mBAAAkT,EAAA8D,OAGA9D,EAAA+D,MACAld,EAAAmD,KAAA,QAAA8C,mBAAAkT,EAAA+D,OAGA/D,EAAAyB,MACA5a,EAAAmD,KAAA,QAAA8C,mBAAAkT,EAAAyB,OAGAzB,EAAAgE,WACAnd,EAAAmD,KAAA,aAAA8C,mBAAAkT,EAAAgE,YAGAhE,EAAA2B,MACA9a,EAAAmD,KAAA,QAAAgW,EAAA2B,MAGA3B,EAAA0B,UACA7a,EAAAmD,KAAA,YAAAgW,EAAA0B,WAIA7a,EAAA1B,OAAA,IACAyB,GAAA,IAAAC,EAAAuG,KAAA,MAGA+S,EAAA,MAAAvZ,EAAA,KAAA,SAAAma,EAAAkD,EAAAhD,GACA,MAAAF,GAAAX,EAAAW,OACAX,GAAA,KAAA6D,EAAAhD,MAOA9c,KAAA+f,QAAA,SAAAC,EAAA/D,GACAD,EAAA,MAAAgD,EAAA,UAAAgB,EAAA,KAAA,SAAApD,EAAAqD,EAAAnD,GACA,MAAAF,GAAAX,EAAAW,OACAX,GAAA,KAAAgE,EAAAnD,MAOA9c,KAAAkgB,QAAA,SAAAN,EAAAD,EAAA1D,GACAD,EAAA,MAAAgD,EAAA,YAAAY,EAAA,MAAAD,EAAA,KAAA,SAAA/C,EAAAuD,EAAArD,GACA,MAAAF,GAAAX,EAAAW,OACAX,GAAA,KAAAkE,EAAArD,MAOA9c,KAAAogB,aAAA,SAAAnE,GACAD,EAAA,MAAAgD,EAAA,kBAAA,KAAA,SAAApC,EAAAyD,EAAAvD,GACA,MAAAF,GAAAX,EAAAW,OACAX,GAAA,KAAAoE,EAAAC,IAAA,SAAAX,GACA,MAAAA,GAAAN,IAAAlX,QAAA,iBAAA,MACA2U,MAOA9c,KAAAugB,QAAA,SAAA1B,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,cAAAH,EAAA,KAAA5C,EAAA,QAMAjc,KAAAwgB,UAAA,SAAA7B,EAAAE,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,gBAAAH,EAAA,KAAA,SAAAjC,EAAA6D,EAAA3D,GACA,MAAAF,GAAAX,EAAAW,OACAX,GAAA,KAAAwE,EAAA3D,MAOA9c,KAAA0gB,OAAA,SAAA/B,EAAApV,EAAA0S,GACA,MAAA1S,IAAA,KAAAA,MACAyS,GAAA,MAAAgD,EAAA,aAAAzV,GAAAoV,EAAA,QAAAA,EAAA,IACA,KAAA,SAAA/B,EAAA+D,EAAA7D,GACA,MAAAF,GAAAX,EAAAW,OACAX,GAAA,KAAA0E,EAAA9B,IAAA/B,KAJAgC,EAAAC,OAAA,SAAAJ,EAAA1C,IAWAjc,KAAA4gB,YAAA,SAAA/B,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,aAAAH,EAAA,KAAA5C,IAMAjc,KAAA6gB,QAAA,SAAAC,EAAA7E,GACAD,EAAA,MAAAgD,EAAA,cAAA8B,EAAA,KAAA,SAAAlE,EAAAC,EAAAC,GACA,MAAAF,GAAAX,EAAAW,OACAX,GAAA,KAAAY,EAAAiE,KAAAhE,MAOA9c,KAAA+gB,SAAA,SAAAC,EAAA/E,GAEA+E,EADA,gBAAA,IAEAA,QAAAA,EACAC,SAAA,UAIAD,QAAApF,EAAAoF,GACAC,SAAA,UAIAjF,EAAA,OAAAgD,EAAA,aAAAgC,EAAA,SAAApE,EAAAC,GACA,MAAAD,GAAAX,EAAAW,OACAX,GAAA,KAAAY,EAAAgC,QAOA7e,KAAA0e,WAAA,SAAAwC,EAAA3X,EAAA4X,EAAAlF,GACA,GAAAra,IACAwf,UAAAF,EACAJ,OAEAvX,KAAAA,EACA8X,KAAA,SACAhE,KAAA,OACAwB,IAAAsC,IAKAnF,GAAA,OAAAgD,EAAA,aAAApd,EAAA,SAAAgb,EAAAC,GACA,MAAAD,GAAAX,EAAAW,OACAX,GAAA,KAAAY,EAAAgC,QAQA7e,KAAAshB,SAAA,SAAAR,EAAA7E,GACAD,EAAA,OAAAgD,EAAA,cACA8B,KAAAA,GACA,SAAAlE,EAAAC,GACA,MAAAD,GAAAX,EAAAW,OACAX,GAAA,KAAAY,EAAAgC,QAQA7e,KAAAygB,OAAA,SAAAxN,EAAA6N,EAAAvT,EAAA0O,GACA,GAAAiD,GAAA,GAAAjf,GAAAkd,IAEA+B,GAAAnB,KAAA,KAAA,SAAAnB,EAAA2E,GACA,GAAA3E,EAAA,MAAAX,GAAAW,EACA,IAAAhb,IACA2L,QAAAA,EACAiU,QACApY,KAAAyS,EAAAqD,KACAuC,MAAAF,EAAAE,OAEAC,SACAzO,GAEA6N,KAAAA,EAGA9E,GAAA,OAAAgD,EAAA,eAAApd,EAAA,SAAAgb,EAAAC,GACA,MAAAD,GAAAX,EAAAW,IACAgC,EAAAC,IAAAhC,EAAAgC,QACA5C,GAAA,KAAAY,EAAAgC,WAQA7e,KAAA2hB,WAAA,SAAAhC,EAAAc,EAAAxE,GACAD,EAAA,QAAAgD,EAAA,mBAAAW,GACAd,IAAA4B,GACA,SAAA7D,GACAX,EAAAW,MAOA5c,KAAA+d,KAAA,SAAA9B,GACAD,EAAA,MAAAgD,EAAA,KAAA/C,IAMAjc,KAAA4hB,aAAA,SAAA3F,EAAA4F,GACAA,EAAAA,GAAA,GACA,IAAA/C,GAAA9e,IAEAgc,GAAA,MAAAgD,EAAA,sBAAA,KAAA,SAAApC,EAAAhb,EAAAkb,GACA,MAAAF,GAAAX,EAAAW,QAEA,MAAAE,EAAAxZ,OACAoN,WACA,WACAoO,EAAA8C,aAAA3F,EAAA4F,IAEAA,GAGA5F,EAAAW,EAAAhb,EAAAkb,OAQA9c,KAAA8hB,SAAA,SAAAzC,EAAA9V,EAAA0S,GACA1S,EAAAwY,UAAAxY,GACAyS,EAAA,MAAAgD,EAAA,aAAAzV,EAAA,IAAAA,EAAA,KACA8V,IAAAA,GACApD,IAMAjc,KAAAgiB,KAAA,SAAA/F,GACAD,EAAA,OAAAgD,EAAA,SAAA,KAAA/C,IAMAjc,KAAAiiB,UAAA,SAAAhG,GACAD,EAAA,MAAAgD,EAAA,SAAA,KAAA/C,IAMAjc,KAAA2e,OAAA,SAAAuD,EAAAC,EAAAlG,GACA,IAAA7W,UAAApE,QAAA,kBAAAoE,WAAA,KACA6W,EAAAkG,EACAA,EAAAD,EACAA,EAAA,UAGAliB,KAAA+e,OAAA,SAAAmD,EAAA,SAAAtF,EAAAyC,GACA,MAAAzC,IAAAX,EAAAA,EAAAW,OACAkC,GAAAQ,WACAD,IAAA,cAAA8C,EACAtD,IAAAQ,GACApD,MAOAjc,KAAAoiB,kBAAA,SAAAvG,EAAAI,GACAD,EAAA,OAAAgD,EAAA,SAAAnD,EAAAI,IAMAjc,KAAAqiB,UAAA,SAAApG,GACAD,EAAA,MAAAgD,EAAA,SAAA,KAAA/C,IAMAjc,KAAAsiB,QAAA,SAAAvb,EAAAkV,GACAD,EAAA,MAAAgD,EAAA,UAAAjY,EAAA,KAAAkV,IAMAjc,KAAAuiB,WAAA,SAAA1G,EAAAI,GACAD,EAAA,OAAAgD,EAAA,SAAAnD,EAAAI,IAMAjc,KAAAwiB,SAAA,SAAAzb,EAAA8U,EAAAI,GACAD,EAAA,QAAAgD,EAAA,UAAAjY,EAAA8U,EAAAI,IAMAjc,KAAAyiB,WAAA,SAAA1b,EAAAkV,GACAD,EAAA,SAAAgD,EAAA,UAAAjY,EAAA,KAAAkV,IAMAjc,KAAA4D,KAAA,SAAA+a,EAAApV,EAAA0S,GACAD,EAAA,MAAAgD,EAAA,aAAA+C,UAAAxY,IAAAoV,EAAA,QAAAA,EAAA,IACA,KAAA,SAAA/B,EAAAhQ,EAAAkQ,GACA,MAAAF,IAAA,MAAAA,EAAApP,MAAAyO,EAAA,YAAA,KAAA,MAEAW,EAAAX,EAAAW,OACAX,GAAA,KAAArP,EAAAkQ,KACA,IAMA9c,KAAAmK,OAAA,SAAAwU,EAAApV,EAAA0S,GACA6C,EAAA4B,OAAA/B,EAAApV,EAAA,SAAAqT,EAAAiC,GACA,MAAAjC,GAAAX,EAAAW,OACAZ,GAAA,SAAAgD,EAAA,aAAAzV,GACAgE,QAAAhE,EAAA,cACAsV,IAAAA,EACAF,OAAAA,GACA1C,MAMAjc,KAAAA,UAAAA,KAAAmK,OAKAnK,KAAA0iB,KAAA,SAAA/D,EAAApV,EAAAoZ,EAAA1G,GACAyC,EAAAC,EAAA,SAAA/B,EAAAgG,GACA9D,EAAA+B,QAAA+B,EAAA,kBAAA,SAAAhG,EAAAkE,GAEAA,EAAA9c,QAAA,SAAAqb,GACAA,EAAA9V,OAAAA,IAAA8V,EAAA9V,KAAAoZ,GAEA,SAAAtD,EAAAhC,YAAAgC,GAAAR,MAGAC,EAAAwC,SAAAR,EAAA,SAAAlE,EAAAiG,GACA/D,EAAA2B,OAAAmC,EAAAC,EAAA,WAAAtZ,EAAA,SAAAqT,EAAA6D,GACA3B,EAAA6C,WAAAhD,EAAA8B,EAAA,SAAA7D,GACAX,EAAAW,cAWA5c,KAAAmJ,MAAA,SAAAwV,EAAApV,EAAAyX,EAAAzT,EAAAsO,EAAAI,GACA,mBAAAA,KACAA,EAAAJ,EACAA,MAGAiD,EAAA4B,OAAA/B,EAAAoD,UAAAxY,GAAA,SAAAqT,EAAAiC,GACA,GAAAiE,IACAvV,QAAAA,EACAyT,QAAA,mBAAAnF,GAAAnT,QAAAmT,EAAAnT,OAAAkT,EAAAoF,GAAAA,EACArC,OAAAA,EACAoE,UAAAlH,GAAAA,EAAAkH,UAAAlH,EAAAkH,UAAAjf,OACA0d,OAAA3F,GAAAA,EAAA2F,OAAA3F,EAAA2F,OAAA1d,OAIA8Y,IAAA,MAAAA,EAAApP,QAAAsV,EAAAjE,IAAAA,GACA7C,EAAA,MAAAgD,EAAA,aAAA+C,UAAAxY,GAAAuZ,EAAA7G,MAWAjc,KAAAgjB,WAAA,SAAAnH,EAAAI,GACAJ,EAAAA,KACA,IAAApZ,GAAAuc,EAAA,WACAtc,IAUA,IARAmZ,EAAAgD,KACAnc,EAAAmD,KAAA,OAAA8C,mBAAAkT,EAAAgD,MAGAhD,EAAAtS,MACA7G,EAAAmD,KAAA,QAAA8C,mBAAAkT,EAAAtS,OAGAsS,EAAAgC,MAAA,CACA,GAAAA,GAAAhC,EAAAgC,KAEAA,GAAAlL,cAAA/I,OACAiU,EAAAA,EAAA7U,eAGAtG,EAAAmD,KAAA,SAAA8C,mBAAAkV,IAGA,GAAAhC,EAAAoH,MAAA,CACA,GAAAA,GAAApH,EAAAoH,KAEAA,GAAAtQ,cAAA/I,OACAqZ,EAAAA,EAAAja,eAGAtG,EAAAmD,KAAA,SAAA8C,mBAAAsa,IAGApH,EAAA2B,MACA9a,EAAAmD,KAAA,QAAAgW,EAAA2B,MAGA3B,EAAAqH,SACAxgB,EAAAmD,KAAA,YAAAgW,EAAAqH,SAGAxgB,EAAA1B,OAAA,IACAyB,GAAA,IAAAC,EAAAuG,KAAA,MAGA+S,EAAA,MAAAvZ,EAAA,KAAAwZ,KAOAhc,EAAAkjB,KAAA,SAAAtH,GACA,GAAA9U,GAAA8U,EAAA9U,GACAqc,EAAA,UAAArc,CAKA/G,MAAA4D,KAAA,SAAAqY,GACAD,EAAA,MAAAoH,EAAA,KAAAnH,IAeAjc,KAAAqjB,OAAA,SAAAxH,EAAAI,GACAD,EAAA,OAAA,SAAAH,EAAAI,IAMAjc,KAAAA,UAAA,SAAAic,GACAD,EAAA,SAAAoH,EAAA,KAAAnH,IAMAjc,KAAAgiB,KAAA,SAAA/F,GACAD,EAAA,OAAAoH,EAAA,QAAA,KAAAnH,IAMAjc,KAAAsjB,OAAA,SAAAzH,EAAAI,GACAD,EAAA,QAAAoH,EAAAvH,EAAAI,IAMAjc,KAAAujB,KAAA,SAAAtH,GACAD,EAAA,MAAAoH,EAAA,QAAA,KAAAnH,IAMAjc,KAAAwjB,OAAA,SAAAvH,GACAD,EAAA,SAAAoH,EAAA,QAAA,KAAAnH,IAMAjc,KAAAyjB,UAAA,SAAAxH,GACAD,EAAA,MAAAoH,EAAA,QAAA,KAAAnH,KAOAhc,EAAAyjB,MAAA,SAAA7H,GACA,GAAAtS,GAAA,UAAAsS,EAAAqD,KAAA,IAAArD,EAAAoD,KAAA,SAEAjf,MAAA2jB,KAAA,SAAA9H,EAAAI,GACA,GAAA2H,KAEA,KAAA,GAAA1f,KAAA2X,GACAA,EAAA/O,eAAA5I,IACA0f,EAAA/d,KAAA8C,mBAAAzE,GAAA,IAAAyE,mBAAAkT,EAAA3X,IAIAuY,GAAAlT,EAAA,IAAAqa,EAAA3a,KAAA,KAAAgT,IAGAjc,KAAA6jB,QAAA,SAAAC,EAAAD,EAAA5H,GACAD,EAAA,OAAA8H,EAAAC,cACAC,KAAAH,GACA,SAAAjH,EAAAC,GACAZ,EAAAW,EAAAC,OAQA5c,EAAAgkB,OAAA,SAAApI,GACA,GAAAtS,GAAA,WACAqa,EAAA,MAAA/H,EAAA+H,KAEA5jB,MAAAkkB,aAAA,SAAArI,EAAAI,GACAD,EAAA,MAAAzS,EAAA,eAAAqa,EAAA/H,EAAAI,IAGAjc,KAAAa,KAAA,SAAAgb,EAAAI,GACAD,EAAA,MAAAzS,EAAA,OAAAqa,EAAA/H,EAAAI,IAGAjc,KAAAmkB,OAAA,SAAAtI,EAAAI,GACAD,EAAA,MAAAzS,EAAA,SAAAqa,EAAA/H,EAAAI,IAGAjc,KAAAokB,MAAA,SAAAvI,EAAAI,GACAD,EAAA,MAAAzS,EAAA,QAAAqa,EAAA/H,EAAAI,KAIAhc,EA0CA,OApCAA,GAAAokB,UAAA,SAAAnF,EAAAD,GACA,MAAA,IAAAhf,GAAAyjB,OACAxE,KAAAA,EACAD,KAAAA,KAIAhf,EAAAqkB,QAAA,SAAApF,EAAAD,GACA,MAAAA,GAKA,GAAAhf,GAAAwe,YACAS,KAAAA,EACA9V,KAAA6V,IANA,GAAAhf,GAAAwe,YACAU,SAAAD,KAUAjf,EAAAskB,QAAA,WACA,MAAA,IAAAtkB,GAAAkd,MAGAld,EAAAukB,QAAA,SAAAzd,GACA,MAAA,IAAA9G,GAAAkjB,MACApc,GAAAA,KAIA9G,EAAAwkB,UAAA,SAAAb,GACA,MAAA,IAAA3jB,GAAAgkB,QACAL,MAAAA,KAIA3jB,MjB6yEGkF,MAAQ,EAAEuf,UAAU,GAAGC,cAAc,GAAGpJ,KAAO,UAAU,KAAK","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && request.status < 300 ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n }\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n var urlIsSameOrigin = require('./../helpers/urlIsSameOrigin');\n\n // Add xsrf header\n var xsrfValue = urlIsSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName || defaults.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n utils.forEach(requestHeaders, function (val, key) {\n // Remove Content-Type if data is undefined\n if (!data && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n }\n // Otherwise add header to the request\n else {\n request.setRequestHeader(key, val);\n }\n });\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(data)) {\n data = new DataView(data);\n }\n\n // Send the request\n request.send(data);\n};\n\n},{\"./../defaults\":6,\"./../helpers/buildUrl\":7,\"./../helpers/cookies\":8,\"./../helpers/parseHeaders\":9,\"./../helpers/transformData\":11,\"./../helpers/urlIsSameOrigin\":12,\"./../utils\":13}],3:[function(require,module,exports){\n'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\n\nvar axios = module.exports = function (config) {\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge({\n method: 'get',\n headers: {},\n timeout: defaults.timeout,\n transformRequest: defaults.transformRequest,\n transformResponse: defaults.transformResponse\n }, config);\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || defaults.withCredentials;\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n axios.interceptors.request.forEach(function (interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n axios.interceptors.response.forEach(function (interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Expose defaults\naxios.defaults = defaults;\n\n// Expose all/spread\naxios.all = function (promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n};\n\n// Provide aliases for supported request methods\n(function () {\n function createShortMethods() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n });\n }\n\n function createShortMethodsWithData() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, data, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n });\n }\n\n createShortMethods('delete', 'get', 'head');\n createShortMethodsWithData('post', 'put', 'patch');\n})();\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/spread\":10,\"./utils\":13}],4:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function (fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function (id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `remove`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function (fn) {\n utils.forEach(this.handlers, function (h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n},{\"./../utils\":13}],5:[function(require,module,exports){\n(function (process){\n'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function (resolve, reject) {\n try {\n // For browsers use XHR adapter\n if ((typeof XMLHttpRequest !== 'undefined') || (typeof ActiveXObject !== 'undefined')) {\n require('../adapters/xhr')(resolve, reject, config);\n }\n // For node use HTTP adapter\n else if (typeof process !== 'undefined') {\n require('../adapters/http')(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":16}],6:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function (data, headers) {\n if(utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function (val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function (data) {\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n\n},{\"./utils\":13}],7:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildUrl(url, params) {\n if (!params) {\n return url;\n }\n\n var parts = [];\n\n utils.forEach(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function (v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n }\n else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&');\n }\n\n return url;\n};\n\n},{\"./../utils\":13}],8:[function(require,module,exports){\n'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\n\nmodule.exports = {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n};\n\n},{\"./../utils\":13}],9:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {}, key, val, i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n},{\"./../utils\":13}],10:[function(require,module,exports){\n'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function (arr) {\n return callback.apply(null, arr);\n };\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function (fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n},{\"./../utils\":13}],12:[function(require,module,exports){\n'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\nvar msie = /(msie|trident)/i.test(navigator.userAgent);\nvar urlParsingNode = document.createElement('a');\nvar originUrl;\n\n/**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\nfunction urlResolve(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n}\n\noriginUrl = urlResolve(window.location.href);\n\n/**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestUrl The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\nmodule.exports = function urlIsSameOrigin(requestUrl) {\n var parsed = (utils.isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n return (parsed.protocol === originUrl.protocol &&\n parsed.host === originUrl.host);\n};\n\n},{\"./../utils\":13}],13:[function(require,module,exports){\n'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n return ArrayBuffer.isView(val);\n } else {\n return (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if a value is an Arguments object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Arguments object, otherwise false\n */\nfunction isArguments(val) {\n return toString.call(val) === '[object Arguments]';\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createelement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array or arguments callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Check if obj is array-like\n var isArrayLike = isArray(obj) || isArguments(obj);\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArrayLike) {\n obj = [obj];\n }\n\n // Iterate over array values\n if (isArrayLike) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n }\n // Iterate over object keys\n else {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/*obj1, obj2, obj3, ...*/) {\n var result = {};\n forEach(arguments, function (obj) {\n forEach(obj, function (val, key) {\n result[key] = val;\n });\n });\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n},{}],14:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],15:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":16}],16:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],17:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],18:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":14,\"es6-promise\":15,\"utf8\":17}]},{},[18])(18)\n});\n\n","'use strict';\n\n/*global ActiveXObject:true*/\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar buildUrl = require('./../helpers/buildUrl');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n // Transform request data\n var data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Merge headers\n var requestHeaders = utils.merge(\n defaults.headers.common,\n defaults.headers[config.method] || {},\n config.headers || {}\n );\n\n if (utils.isFormData(data)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n // Create the request\n var request = new (XMLHttpRequest || ActiveXObject)('Microsoft.XMLHTTP');\n request.open(config.method.toUpperCase(), buildUrl(config.url, config.params), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function () {\n if (request && request.readyState === 4) {\n // Prepare the response\n var responseHeaders = parseHeaders(request.getAllResponseHeaders());\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config\n };\n\n // Resolve or reject the Promise based on the status\n (request.status >= 200 && request.status < 300 ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n }\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n var urlIsSameOrigin = require('./../helpers/urlIsSameOrigin');\n\n // Add xsrf header\n var xsrfValue = urlIsSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName || defaults.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName || defaults.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n utils.forEach(requestHeaders, function (val, key) {\n // Remove Content-Type if data is undefined\n if (!data && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n }\n // Otherwise add header to the request\n else {\n request.setRequestHeader(key, val);\n }\n });\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(data)) {\n data = new DataView(data);\n }\n\n // Send the request\n request.send(data);\n};\n","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\n\nvar axios = module.exports = function (config) {\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge({\n method: 'get',\n headers: {},\n timeout: defaults.timeout,\n transformRequest: defaults.transformRequest,\n transformResponse: defaults.transformResponse\n }, config);\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || defaults.withCredentials;\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n axios.interceptors.request.forEach(function (interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n axios.interceptors.response.forEach(function (interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Expose defaults\naxios.defaults = defaults;\n\n// Expose all/spread\naxios.all = function (promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n};\n\n// Provide aliases for supported request methods\n(function () {\n function createShortMethods() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n });\n }\n\n function createShortMethodsWithData() {\n utils.forEach(arguments, function (method) {\n axios[method] = function (url, data, config) {\n return axios(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n });\n }\n\n createShortMethods('delete', 'get', 'head');\n createShortMethodsWithData('post', 'put', 'patch');\n})();\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function (fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function (id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `remove`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function (fn) {\n utils.forEach(this.handlers, function (h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function (resolve, reject) {\n try {\n // For browsers use XHR adapter\n if ((typeof XMLHttpRequest !== 'undefined') || (typeof ActiveXObject !== 'undefined')) {\n require('../adapters/xhr')(resolve, reject, config);\n }\n // For node use HTTP adapter\n else if (typeof process !== 'undefined') {\n require('../adapters/http')(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function (data, headers) {\n if(utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function (val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function (data) {\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildUrl(url, params) {\n if (!params) {\n return url;\n }\n\n var parts = [];\n\n utils.forEach(params, function (val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function (v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n }\n else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n if (parts.length > 0) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + parts.join('&');\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\n\nmodule.exports = {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {}, key, val, i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function (arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function (fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\n/**\n * WARNING:\n * This file makes references to objects that aren't safe in all environments.\n * Please see lib/utils.isStandardBrowserEnv before including this file.\n */\n\nvar utils = require('./../utils');\nvar msie = /(msie|trident)/i.test(navigator.userAgent);\nvar urlParsingNode = document.createElement('a');\nvar originUrl;\n\n/**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\nfunction urlResolve(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n}\n\noriginUrl = urlResolve(window.location.href);\n\n/**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestUrl The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\nmodule.exports = function urlIsSameOrigin(requestUrl) {\n var parsed = (utils.isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;\n return (parsed.protocol === originUrl.protocol &&\n parsed.host === originUrl.host);\n};\n","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n return ArrayBuffer.isView(val);\n } else {\n return (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if a value is an Arguments object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Arguments object, otherwise false\n */\nfunction isArguments(val) {\n return toString.call(val) === '[object Arguments]';\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createelement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array or arguments callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Check if obj is array-like\n var isArrayLike = isArray(obj) || isArguments(obj);\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArrayLike) {\n obj = [obj];\n }\n\n // Iterate over array values\n if (isArrayLike) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n }\n // Iterate over object keys\n else {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/*obj1, obj2, obj3, ...*/) {\n var result = {};\n forEach(arguments, function (obj) {\n forEach(obj, function (val, key) {\n result[key] = val;\n });\n });\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","link","next","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","deleteRepo","ref","createRef","deleteRef","listTags","tags","listPulls","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","Gist","gistPath","update","star","unstar","isStarred","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 3584af06..d9ba1852 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,n){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(e,o,s,i){return t.Github=n(e,o,s,i)}):"object"==typeof module&&module.exports?module.exports=n(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=n(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,n,e,o){function s(t){return n.encode(e.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var n=t.apiUrl||"https://api.github.com",e=i._request=function(e,i,u,r,c){function a(){var t=i.indexOf("//")>=0?i:n+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(e)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:e,data:u?u:{},url:a()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t)},function(t){304===t.status?r(null,t.data||!0,t):r({path:i,request:t.data,error:t.status})})},u=i._requestAllPages=function(t,n){var o=[];!function s(){e("GET",t,null,function(e,i,u){if(e)return n(e);o.push.apply(o,i);var r=(u.headers.link||"").split(/\s*,\s*/g),c=null;r.forEach(function(t){c=/rel="next"/.test(t)?t:c}),c&&(c=(/<(.*)>/.exec(c)||[])[1]),c?(t=c,s()):n(e,o)})}()};return i.User=function(){this.repos=function(t,n){1===arguments.length&&"function"==typeof arguments[0]&&(n=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),e("GET",o,null,n)},this.orgs=function(t){e("GET","/user/orgs",null,t)},this.gists=function(t){e("GET","/gists",null,t)},this.notifications=function(t,n){1===arguments.length&&"function"==typeof arguments[0]&&(n=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),e("GET",o,null,n)},this.show=function(t,n){var o=t?"/users/"+t:"/user";e("GET",o,null,n)},this.userRepos=function(t,n){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",n)},this.userStarred=function(t,n){u("/users/"+t+"/starred?type=all&per_page=100",function(t,e){n(t,e)})},this.userGists=function(t,n){e("GET","/users/"+t+"/gists",null,n)},this.orgRepos=function(t,n){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",n)},this.follow=function(t,n){e("PUT","/user/following/"+t,null,n)},this.unfollow=function(t,n){e("DELETE","/user/following/"+t,null,n)},this.createRepo=function(t,n){e("POST","/user/repos",t,n)}},i.Repository=function(t){function n(t,n){return t===l.branch&&l.sha?n(null,l.sha):void a.getRef("heads/"+t,function(e,o){l.branch=t,l.sha=o,n(e,o)})}var o,u=t.name,r=t.user,c=t.fullname,a=this;o=c?"/repos/"+c:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.deleteRepo=function(n){e("DELETE",o,t,n)},this.getRef=function(t,n){e("GET",o+"/git/refs/"+t,null,function(t,e,o){return t?n(t):void n(null,e.object.sha,o)})},this.createRef=function(t,n){e("POST",o+"/git/refs",t,n)},this.deleteRef=function(n,s){e("DELETE",o+"/git/refs/"+n,t,function(t,n,e){s(t,n,e)})},this.createRepo=function(t,n){e("POST","/user/repos",t,n)},this.deleteRepo=function(n){e("DELETE",o,t,n)},this.listTags=function(t){e("GET",o+"/tags",null,function(n,e,o){return n?t(n):void t(null,e,o)})},this.listPulls=function(t,n){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),e("GET",s,null,function(t,e,o){return t?n(t):void n(null,e,o)})},this.getPull=function(t,n){e("GET",o+"/pulls/"+t,null,function(t,e,o){return t?n(t):void n(null,e,o)})},this.compare=function(t,n,s){e("GET",o+"/compare/"+t+"..."+n,null,function(t,n,e){return t?s(t):void s(null,n,e)})},this.listBranches=function(t){e("GET",o+"/git/refs/heads",null,function(n,e,o){return n?t(n):void t(null,e.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,n){e("GET",o+"/git/blobs/"+t,null,n,"raw")},this.getCommit=function(t,n,s){e("GET",o+"/git/commits/"+n,null,function(t,n,e){return t?s(t):void s(null,n,e)})},this.getSha=function(t,n,s){return n&&""!==n?void e("GET",o+"/contents/"+n+(t?"?ref="+t:""),null,function(t,n,e){return t?s(t):void s(null,n.sha,e)}):a.getRef("heads/"+t,s)},this.getStatuses=function(t,n){e("GET",o+"/statuses/"+t,null,n)},this.getTree=function(t,n){e("GET",o+"/git/trees/"+t,null,function(t,e,o){return t?n(t):void n(null,e.tree,o)})},this.postBlob=function(t,n){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},e("POST",o+"/git/blobs",t,function(t,e){return t?n(t):void n(null,e.sha)})},this.updateTree=function(t,n,s,i){var u={base_tree:t,tree:[{path:n,mode:"100644",type:"blob",sha:s}]};e("POST",o+"/git/trees",u,function(t,n){return t?i(t):void i(null,n.sha)})},this.postTree=function(t,n){e("POST",o+"/git/trees",{tree:t},function(t,e){return t?n(t):void n(null,e.sha)})},this.commit=function(n,s,u,r){var c=new i.User;c.show(null,function(i,c){if(i)return r(i);var a={message:u,author:{name:t.user,email:c.email},parents:[n],tree:s};e("POST",o+"/git/commits",a,function(t,n){return t?r(t):(l.sha=n.sha,void r(null,n.sha))})})},this.updateHead=function(t,n,s){e("PATCH",o+"/git/refs/heads/"+t,{sha:n},function(t){s(t)})},this.show=function(t){e("GET",o,null,t)},this.contributors=function(t,n){n=n||1e3;var s=this;e("GET",o+"/stats/contributors",null,function(e,o,i){return e?t(e):void(202===i.status?setTimeout(function(){s.contributors(t,n)},n):t(e,o,i))})},this.contents=function(t,n,s){n=encodeURI(n),e("GET",o+"/contents"+(n?"/"+n:""),{ref:t},s)},this.fork=function(t){e("POST",o+"/forks",null,t)},this.listForks=function(t){e("GET",o+"/forks",null,t)},this.branch=function(t,n,e){2===arguments.length&&"function"==typeof arguments[1]&&(e=n,n=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&e?e(t):void a.createRef({ref:"refs/heads/"+n,sha:o},e)})},this.createPullRequest=function(t,n){e("POST",o+"/pulls",t,n)},this.listHooks=function(t){e("GET",o+"/hooks",null,t)},this.getHook=function(t,n){e("GET",o+"/hooks/"+t,null,n)},this.createHook=function(t,n){e("POST",o+"/hooks",t,n)},this.editHook=function(t,n,s){e("PATCH",o+"/hooks/"+t,n,s)},this.deleteHook=function(t,n){e("DELETE",o+"/hooks/"+t,null,n)},this.read=function(t,n,s){e("GET",o+"/contents/"+encodeURI(n)+(t?"?ref="+t:""),null,function(t,n,e){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,n,e)},!0)},this.remove=function(t,n,s){a.getSha(t,n,function(i,u){return i?s(i):void e("DELETE",o+"/contents/"+n,{message:n+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,e,o,s){n(t,function(n,i){a.getTree(i+"?recursive=true",function(n,u){u.forEach(function(t){t.path===e&&(t.path=o),"tree"===t.type&&delete t.sha}),a.postTree(u,function(n,o){a.commit(i,o,"Deleted "+e,function(n,e){a.updateHead(t,e,function(t){s(t)})})})})})},this.write=function(t,n,i,u,r,c){"undefined"==typeof c&&(c=r,r={}),a.getSha(t,encodeURI(n),function(a,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};a&&404!==a.error||(f.sha=l),e("PUT",o+"/contents/"+encodeURI(n),f,c)})},this.getCommits=function(t,n){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),e("GET",s,null,n)}},i.Gist=function(t){var n=t.id,o="/gists/"+n;this.read=function(t){e("GET",o,null,t)},this.create=function(t,n){e("POST","/gists",t,n)},this["delete"]=function(t){e("DELETE",o,null,t)},this.fork=function(t){e("POST",o+"/fork",null,t)},this.update=function(t,n){e("PATCH",o,t,n)},this.star=function(t){e("PUT",o+"/star",null,t)},this.unstar=function(t){e("DELETE",o+"/star",null,t)},this.isStarred=function(t){e("GET",o+"/star",null,t)}},i.Issue=function(t){var n="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,e){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(n+"?"+o.join("&"),e)},this.comment=function(t,n,o){e("POST",t.comments_url,{body:n},function(t,n){o(t,n)})}},i.Search=function(t){var n="/search/",o="?q="+t.query;this.repositories=function(t,s){e("GET",n+"repositories"+o,t,s)},this.code=function(t,s){e("GET",n+"code"+o,t,s)},this.issues=function(t,s){e("GET",n+"issues"+o,t,s)},this.users=function(t,s){e("GET",n+"users"+o,t,s)}},i};return i.getIssues=function(t,n){return new i.Issue({user:t,repo:n})},i.getRepo=function(t,n){return n?new i.Repository({user:t,name:n}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,c){function a(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:a()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);o.push.apply(o,i);var r=(u.headers.link||"").split(/\s*,\s*/g),c=null;r.forEach(function(t){c=/rel="next"/.test(t)?t:c}),c&&(c=(/<(.*)>/.exec(c)||[])[1]),c?(t=c,s()):e(n,o)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",function(t,n){e(t,n)})},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void a.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,c=t.fullname,a=this;o=c?"/repos/"+c:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.deleteRepo=function(e){n("DELETE",o,t,e)},this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,function(t,e,n){s(t,e,n)})},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,function(e,n,o){return e?t(e):void t(null,n,o)})},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):a.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var c=new i.User;c.show(null,function(i,c){if(i)return r(i);var a={message:u,author:{name:t.user,email:c.email},parents:[e],tree:s};n("POST",o+"/git/commits",a,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},function(t){s(t)})},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void a.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){a.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){a.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),a.postTree(u,function(e,o){a.commit(i,o,"Deleted "+n,function(e,n){a.updateHead(t,n,function(t){s(t)})})})})})},this.write=function(t,e,i,u,r,c){"undefined"==typeof c&&(c=r,r={}),a.getSha(t,encodeURI(e),function(a,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};a&&404!==a.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,c)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},function(t,e){o(t,e)})}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 7cd042ab..e22a53e6 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","status","request","error","_requestAllPages","results","iterate","err","res","xhr","push","apply","links","link","split","next","forEach","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","deleteRepo","ref","object","createRef","deleteRef","listTags","tags","listPulls","state","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","replace","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.data,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional paramaters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","push","apply","links","link","split","next","forEach","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","deleteRepo","ref","object","createRef","deleteRef","listTags","tags","listPulls","state","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","replace","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file From 956c395bb2654e0385a15e6637481198861d1c46 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 17:57:13 +0000 Subject: [PATCH 038/217] Updated _requestAllPages due to the restore of the XHR object --- src/github.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/github.js b/src/github.js index 24e99207..c39e1bfd 100644 --- a/src/github.js +++ b/src/github.js @@ -109,7 +109,7 @@ results.push.apply(results, res); - var links = (xhr.headers.link || '').split(/\s*,\s*/g); + var links = (xhr.getResponseHeader('link') || '').split(/\s*,\s*/g); var next = null; links.forEach(function (link) { From c50d5c3a8b14166fff79858a31ac53d35ff87f3f Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 17:57:37 +0000 Subject: [PATCH 039/217] Tests: Updated auth tests due to the restore of the XHR object --- test/test.auth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test.auth.js b/test/test.auth.js index be7138c2..b47ab489 100644 --- a/test/test.auth.js +++ b/test/test.auth.js @@ -37,7 +37,7 @@ describe('Github constructor (failing case)', function() { it('should fail authentication and return err', function(done) { user.notifications(function(err) { err.error.should.equal(401, 'Return 401 status for bad auth'); - err.request.message.should.equal('Bad credentials'); + JSON.parse(err.request.responseText).message.should.equal('Bad credentials'); done(); }); }); From 56c0c5267ea51205607af765667a80ee3b5d0d80 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 23 Jan 2016 17:58:28 +0000 Subject: [PATCH 040/217] Updated distribution files --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 188990de..0fc013e2 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){V=e}function c(e){$=e}function f(){return function(){r.nextTick(m)}}function l(){return function(){z(m)}}function p(){var e=0,t=new Q(m),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=m,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(m,1)}}function m(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function g(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){$(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?R(e,n):x(e,n))},function(t){r||(r=!0,S(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,S(e,o))},e)}function _(e,t){t._state===oe?x(e,t._result):t._state===ie?S(e,t._result):U(t,void 0,function(t){R(e,t)},function(t){S(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=b(t);n===se?S(e,se.error):void 0===n?x(e,t):s(n)?T(e,t,n):x(e,t)}}function R(e,t){e===t?S(e,y()):i(t)?A(e,t):x(e,t)}function C(e){e._onerror&&e._onerror(e._result),j(e)}function x(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&$(j,e))}function S(e,t){e._state===re&&(e._state=ie,e._result=t,$(C,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)U(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return R(n,e),n}function B(e){var t=this,n=new t(v);return S(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||H(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=({}.toString,function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(m):J())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?g():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;D.prototype._validateInput=function(e){return K(e)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ae=D;D.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},D.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},D.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?S(o,n):r._result[t]=n),0===r._remaining&&x(o,r._result)},D.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=k,fe=L,le=q,pe=B,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=$,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];$(function(){G(r,o,s,i)})}else U(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var me=M,ge={Promise:de,polyfill:me};"function"==typeof e&&e.amd?e(function(){return ge}):"undefined"!=typeof n&&n.exports?n.exports=ge:"undefined"!=typeof this&&(this.ES6Promise=ge),me()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);r.push.apply(r,i);var u=(s.headers.link||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",function(e,n){t(e,n)})},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.deleteRepo=function(t){n("DELETE",r,e,t)},this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,function(e,t,n){o(e,t,n)})},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,function(t,n,r){return t?e(t):void e(null,n,r)})},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},function(e){o(e)})},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,function(e){o(e)})})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},function(e,t){r(e,t)})}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var g=e("./../helpers/cookies"),m=c.withCredentials||u(c.url)?g.read(c.xsrfCookieName):void 0;m&&(l[c.xsrfHeaderName]=m)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:g,forEach:m,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){V=e}function c(e){$=e}function f(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function p(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(g,1)}}function g(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){$(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?R(e,n):x(e,n))},function(t){r||(r=!0,S(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,S(e,o))},e)}function _(e,t){t._state===oe?x(e,t._result):t._state===ie?S(e,t._result):U(t,void 0,function(t){R(e,t)},function(t){S(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=b(t);n===se?S(e,se.error):void 0===n?x(e,t):s(n)?T(e,t,n):x(e,t)}}function R(e,t){e===t?S(e,y()):i(t)?A(e,t):x(e,t)}function C(e){e._onerror&&e._onerror(e._result),j(e)}function x(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&$(j,e))}function S(e,t){e._state===re&&(e._state=ie,e._result=t,$(C,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)U(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return R(n,e),n}function B(e){var t=this,n=new t(v);return S(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||H(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=({}.toString,function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(g):J())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?m():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;D.prototype._validateInput=function(e){return K(e)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ae=D;D.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},D.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},D.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?S(o,n):r._result[t]=n),0===r._remaining&&x(o,r._result)},D.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=k,fe=L,le=q,pe=B,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=$,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];$(function(){G(r,o,s,i)})}else U(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var ge=M,me={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return me}):"undefined"!=typeof n&&n.exports?n.exports=me:"undefined"!=typeof this&&(this.ES6Promise=me),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(o=m);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",function(e,n){t(e,n)})},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.deleteRepo=function(t){n("DELETE",r,e,t)},this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,function(e,t,n){o(e,t,n)})},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,function(t,n,r){return t?e(t):void e(null,n,r)})},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},function(e){o(e)})},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,function(e){o(e)})})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},function(e,t){r(e,t)})}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index f0d72ee3..2fbbb065 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","link","next","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","deleteRepo","ref","createRef","deleteRef","listTags","tags","listPulls","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","Gist","gistPath","update","star","unstar","isStarred","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","deleteRepo","ref","createRef","deleteRef","listTags","tags","listPulls","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","Gist","gistPath","update","star","unstar","isStarred","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index d9ba1852..2663a6b2 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,c){function a(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:a()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);o.push.apply(o,i);var r=(u.headers.link||"").split(/\s*,\s*/g),c=null;r.forEach(function(t){c=/rel="next"/.test(t)?t:c}),c&&(c=(/<(.*)>/.exec(c)||[])[1]),c?(t=c,s()):e(n,o)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",function(t,n){e(t,n)})},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void a.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,c=t.fullname,a=this;o=c?"/repos/"+c:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.deleteRepo=function(e){n("DELETE",o,t,e)},this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,function(t,e,n){s(t,e,n)})},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,function(e,n,o){return e?t(e):void t(null,n,o)})},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):a.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var c=new i.User;c.show(null,function(i,c){if(i)return r(i);var a={message:u,author:{name:t.user,email:c.email},parents:[e],tree:s};n("POST",o+"/git/commits",a,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},function(t){s(t)})},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void a.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){a.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){a.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),a.postTree(u,function(e,o){a.commit(i,o,"Deleted "+n,function(e,n){a.updateHead(t,n,function(t){s(t)})})})})})},this.write=function(t,e,i,u,r,c){"undefined"==typeof c&&(c=r,r={}),a.getSha(t,encodeURI(e),function(a,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};a&&404!==a.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,c)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},function(t,e){o(t,e)})}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,c){function a(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:a()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),c=null;r.forEach(function(t){c=/rel="next"/.test(t)?t:c}),c&&(c=(/<(.*)>/.exec(c)||[])[1]),c?(t=c,s()):e(n,o)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",function(t,n){e(t,n)})},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void a.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,c=t.fullname,a=this;o=c?"/repos/"+c:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.deleteRepo=function(e){n("DELETE",o,t,e)},this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,function(t,e,n){s(t,e,n)})},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,function(e,n,o){return e?t(e):void t(null,n,o)})},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):a.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var c=new i.User;c.show(null,function(i,c){if(i)return r(i);var a={message:u,author:{name:t.user,email:c.email},parents:[e],tree:s};n("POST",o+"/git/commits",a,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},function(t){s(t)})},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void a.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){a.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){a.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),a.postTree(u,function(e,o){a.commit(i,o,"Deleted "+n,function(e,n){a.updateHead(t,n,function(t){s(t)})})})})})},this.write=function(t,e,i,u,r,c){"undefined"==typeof c&&(c=r,r={}),a.getSha(t,encodeURI(e),function(a,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};a&&404!==a.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,c)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},function(t,e){o(t,e)})}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index e22a53e6..6e14c25f 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","push","apply","links","link","split","next","forEach","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","deleteRepo","ref","object","createRef","deleteRef","listTags","tags","listPulls","state","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","replace","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.headers.link || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","deleteRepo","ref","object","createRef","deleteRef","listTags","tags","listPulls","state","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","replace","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file From 39b78fe9b95013a8f4d24805c138063bc5dfbc52 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 03:00:05 +0000 Subject: [PATCH 041/217] Tests: Added tests for Gist API --- test/test.gist.js | 97 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 test/test.gist.js diff --git a/test/test.gist.js b/test/test.gist.js new file mode 100644 index 00000000..3d470085 --- /dev/null +++ b/test/test.gist.js @@ -0,0 +1,97 @@ +'use strict'; + +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' +}); + +describe('Github.Gist', function() { + var gist; + + before(function() { + gist = github.getGist('f1c0f84e53aa6b98ec03'); + }); + + it('should read gist', function(done) { + gist.read(function(err, res) { + should.not.exist(err); + res.should.have.property('description', 'This is a test gist'); + res.files["README.md"].should.have.property('content', 'Hello World'); + + done(); + }); + }); + + it('should star', function(done) { + gist.star(function(err) { + should.not.exist(err); + + gist.isStarred(function(err) { + should.not.exist(err); + + done(); + }); + }); + }); +}); + +describe('Creating new Github.Gist', function() { + var gist; + + before(function() { + gist = github.getGist(); + }); + + it('should create gist', function(done) { + var gistData = { + description: 'This is a test gist', + public: true, + files: { + 'README.md': { + content: 'Hello World' + } + } + }; + + gist.create(gistData, function(err, res) { + should.not.exist(err); + res.should.have.property('description', gistData.description); + res.should.have.property('public', gistData.public); + res.should.have.property('id').to.be.a('string'); + done(); + }); + }); +}); + +describe('deleting a Github.Gist', function() { + var gist; + + before(function(done) { + var gistData = { + description: 'This is a test gist', + public: true, + files: { + 'README.md': { + content: 'Hello World' + } + } + }; + + github.getGist().create(gistData, function(err, res) { + gist = github.getGist(res.id); + + done(); + }); + }); + + it('should delete gist', function(done) { + gist.delete(function(err) { + should.not.exist(err); + + done(); + }); + }); +}); \ No newline at end of file From 1a7269cb547dad1a79b155b3022a123813b5ea6e Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 03:09:17 +0000 Subject: [PATCH 042/217] .travis.yml: Added instructions to cache npm modules --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 05882674..24c1f66f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,10 @@ node_js: - "0.11" - "0.10" +cache: + directories: + - node_modules + script: - gulp lint - gulp test:ci From e564dd1d5dd8d37eff2e90f47489c01fd4f79225 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 03:09:38 +0000 Subject: [PATCH 043/217] .travis.yml: Added instructions to use npm 3 --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 24c1f66f..88181684 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,9 @@ cache: directories: - node_modules +before_install: + - npm i -g npm@^3.3.0 + script: - gulp lint - gulp test:ci From dbe45990ccd369ed6f65e81f808769999b89adc2 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 03:13:57 +0000 Subject: [PATCH 044/217] Fixed failing test --- test/test.gist.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/test/test.gist.js b/test/test.gist.js index 3d470085..d2bf88ee 100644 --- a/test/test.gist.js +++ b/test/test.gist.js @@ -2,16 +2,18 @@ var Github = require('../src/github.js'); var testUser = require('./user.json'); -var github = new Github({ - username: testUser.USERNAME, - password: testUser.PASSWORD, - auth: 'basic' -}); +var github; describe('Github.Gist', function() { var gist; before(function() { + github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' + }); + gist = github.getGist('f1c0f84e53aa6b98ec03'); }); From 66390e9b137b560176ecaa12432fa0745a3c030f Mon Sep 17 00:00:00 2001 From: Jeff Stieler Date: Mon, 28 Dec 2015 23:42:37 -0700 Subject: [PATCH 045/217] requestAllPages: Wrap response in array if needed Fixes gh-267 Closes gh-268 --- src/github.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/github.js b/src/github.js index c39e1bfd..6ade9ffa 100644 --- a/src/github.js +++ b/src/github.js @@ -107,6 +107,10 @@ return cb(err); } + if (!(res instanceof Array)) { + res = [res]; + } + results.push.apply(results, res); var links = (xhr.getResponseHeader('link') || '').split(/\s*,\s*/g); From 44875e4cbcd3a498e6e40d0563a809c2a78a753c Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 16:30:07 +0000 Subject: [PATCH 046/217] Removed duplicated deleteRepo() declaration --- src/github.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/github.js b/src/github.js index 6ade9ffa..708e7c27 100644 --- a/src/github.js +++ b/src/github.js @@ -313,13 +313,6 @@ sha: null }; - // Delete a repo - // -------- - - this.deleteRepo = function (cb) { - _request('DELETE', repoPath, options, cb); - }; - // Uses the cache if branch has not been changed // ------- From a8cb40b23398ad185e91c340b09ac19cf5614ca0 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 16:35:05 +0000 Subject: [PATCH 047/217] Removed redundant anonymous functions --- src/github.js | 48 ++++++++++-------------------------------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/src/github.js b/src/github.js index 708e7c27..1998022e 100644 --- a/src/github.js +++ b/src/github.js @@ -250,9 +250,7 @@ this.userStarred = function (username, cb) { // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) { - cb(err, res); - }); + _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb); }; // List a user's gists @@ -360,9 +358,7 @@ // repo.deleteRef('tags/v1.0') this.deleteRef = function (ref, cb) { - _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) { - cb(err, res, xhr); - }); + _request('DELETE', repoPath + '/git/refs/' + ref, options, cb); }; // Create a repo @@ -383,13 +379,7 @@ // ------- this.listTags = function (cb) { - _request('GET', repoPath + '/tags', null, function (err, tags, xhr) { - if (err) { - return cb(err); - } - - cb(null, tags, xhr); - }); + _request('GET', repoPath + '/tags', null, cb); }; // List all pull requests of a respository @@ -437,30 +427,21 @@ url += '?' + params.join('&'); } - _request('GET', url, null, function (err, pulls, xhr) { - if (err) return cb(err); - cb(null, pulls, xhr); - }); + _request('GET', url, null, cb); }; // Gets details for a specific pull request // ------- this.getPull = function (number, cb) { - _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) { - if (err) return cb(err); - cb(null, pull, xhr); - }); + _request('GET', repoPath + '/pulls/' + number, null, cb); }; // Retrieve the changes made between base and head // ------- this.compare = function (base, head, cb) { - _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) { - if (err) return cb(err); - cb(null, diff, xhr); - }); + _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb); }; // List all branches of a repository @@ -486,10 +467,7 @@ // ------- this.getCommit = function (branch, sha, cb) { - _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) { - if (err) return cb(err); - cb(null, commit, xhr); - }); + _request('GET', repoPath + '/git/commits/' + sha, null, cb); }; // For a given file path, get the corresponding sha (blob for files, tree for dirs) @@ -613,9 +591,7 @@ this.updateHead = function (head, commit, cb) { _request('PATCH', repoPath + '/git/refs/heads/' + head, { sha: commit - }, function (err) { - cb(err); - }); + }, cb); }; // Show repository information @@ -779,9 +755,7 @@ that.postTree(tree, function (err, rootTree) { that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) { - that.updateHead(branch, commit, function (err) { - cb(err); - }); + that.updateHead(branch, commit, cb); }); }); }); @@ -967,9 +941,7 @@ this.comment = function (issue, comment, cb) { _request('POST', issue.comments_url, { body: comment - }, function (err, res) { - cb(err, res); - }); + }, cb); }; }; From 4683ba8c92202443f5e7c69b93c6d7435c67bc67 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 17:12:55 +0000 Subject: [PATCH 048/217] Tests: Improved tests for getCommits() --- test/test.repo.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/test/test.repo.js b/test/test.repo.js index 3f843782..b565eebf 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -113,10 +113,27 @@ describe('Github.Repository', function() { }); }); - it('should list commits', function(done) { + it('should list commits with no options', function(done) { + repo.getCommits(null, function(err, commits) { + should.not.exist(err); + commits.should.be.instanceof(Array); + commits.should.have.length.above(0); + commits[0].should.have.property('commit'); + commits[0].should.have.property('author'); + + done(); + }); + }); + + it('should list commits with all options', function(done) { + var sinceDate = new Date(2015, 0, 1); + var untilDate = new Date(2016, 0, 20); var options = { sha: 'master', - path: 'test' + path: 'test', + author: 'AurelioDeRosa', + since: sinceDate, + until: untilDate }; repo.getCommits(options, function(err, commits) { @@ -124,7 +141,8 @@ describe('Github.Repository', function() { commits.should.be.instanceof(Array); commits.should.have.length.above(0); commits[0].should.have.property('commit'); - commits[0].should.have.property('author'); + commits[0].should.have.deep.property('author.login', 'AurelioDeRosa'); + (new Date(commits[0].commit.author.date)).getTime().should.be.within(sinceDate.getTime(), untilDate.getTime()); done(); }); From 15b69aa54f8ee628d7d08f0fe94854cbd9351fad Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 17:33:10 +0000 Subject: [PATCH 049/217] Added isStarred() method --- README.md | 6 ++++++ src/github.js | 7 +++++++ test/test.repo.js | 9 ++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c32d1368..30802209 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,12 @@ Get contributors list with additions, deletions, and commit counts. repo.contributors(function(err, data) {}); ``` +Check if a repository is starred. + +```js +repo.isStarred(owner, repository, function(err) {}); +``` + ## User API diff --git a/src/github.js b/src/github.js index 1998022e..8548a387 100644 --- a/src/github.js +++ b/src/github.js @@ -845,6 +845,13 @@ _request('GET', url, null, cb); }; + + // Check if a repository is starred. + // -------- + + this.isStarred = function(owner, repository, cb) { + _request('GET', '/user/starred/' + owner + '/' + repository, null, cb); + }; }; // Gists API diff --git a/test/test.repo.js b/test/test.repo.js index b565eebf..dce61fc4 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -37,7 +37,7 @@ if (typeof window === 'undefined') { // We're in NodeJS } } -describe('Github.Repository', function() { +describe.only('Github.Repository', function() { before(function() { github = new Github({ username: testUser.USERNAME, @@ -211,6 +211,13 @@ describe('Github.Repository', function() { done(); }); }); + + it('should check if the repo is starred', function(done) { + repo.isStarred('michael', 'github', function(err) { + err.error.should.equal(404); + done(); + }); + }); }); var repoTest = Math.floor(Math.random() * 100000); From 1fd209d55efad56ad1812642a39a4e3a2ff50813 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 17:39:42 +0000 Subject: [PATCH 050/217] Added star() method --- README.md | 6 ++++++ src/github.js | 7 +++++++ test/test.repo.js | 11 +++++++++++ 3 files changed, 24 insertions(+) diff --git a/README.md b/README.md index 30802209..e4cc176a 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,12 @@ Check if a repository is starred. repo.isStarred(owner, repository, function(err) {}); ``` +Star a repository. + +```js +repo.star(owner, repository, function(err) {}); +``` + ## User API diff --git a/src/github.js b/src/github.js index 8548a387..744a0cc7 100644 --- a/src/github.js +++ b/src/github.js @@ -852,6 +852,13 @@ this.isStarred = function(owner, repository, cb) { _request('GET', '/user/starred/' + owner + '/' + repository, null, cb); }; + + // Star a repository. + // -------- + + this.star = function(owner, repository, cb) { + _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb) + }; }; // Gists API diff --git a/test/test.repo.js b/test/test.repo.js index dce61fc4..fa600ead 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -505,6 +505,17 @@ describe('Creating new Github.Repository', function() { }); }); }); + + it('should star the repo', function(done) { + repo.star(testUser.USERNAME, repoTest, function(err) { + should.not.exist(err); + + repo.isStarred(testUser.USERNAME, repoTest, function(err) { + should.not.exist(err); + done(); + }); + }); + }); }); describe('deleting a Github.Repository', function() { From bc25f25adaa666b60a819d863f4f6136afe3da7d Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 17:42:42 +0000 Subject: [PATCH 051/217] Added unstar() method --- README.md | 6 ++++++ src/github.js | 7 +++++++ test/test.repo.js | 13 ++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e4cc176a..36c23cad 100644 --- a/README.md +++ b/README.md @@ -250,6 +250,12 @@ Star a repository. repo.star(owner, repository, function(err) {}); ``` +Unstar a repository. + +```js +repo.unstar(owner, repository, function(err) {}); +``` + ## User API diff --git a/src/github.js b/src/github.js index 744a0cc7..20abc455 100644 --- a/src/github.js +++ b/src/github.js @@ -859,6 +859,13 @@ this.star = function(owner, repository, cb) { _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb) }; + + // Unstar a repository. + // -------- + + this.unstar = function(owner, repository, cb) { + _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb) + }; }; // Gists API diff --git a/test/test.repo.js b/test/test.repo.js index fa600ead..5c7ddf67 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -37,7 +37,7 @@ if (typeof window === 'undefined') { // We're in NodeJS } } -describe.only('Github.Repository', function() { +describe('Github.Repository', function() { before(function() { github = new Github({ username: testUser.USERNAME, @@ -516,6 +516,17 @@ describe('Creating new Github.Repository', function() { }); }); }); + + it('should unstar the repo', function(done) { + repo.unstar(testUser.USERNAME, repoTest, function(err) { + should.not.exist(err); + + repo.isStarred(testUser.USERNAME, repoTest, function(err) { + err.error.should.equal(404); + done(); + }); + }); + }); }); describe('deleting a Github.Repository', function() { From 398e7bd01a11033f18c1fcffadb287e8732bbef7 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 18:12:44 +0000 Subject: [PATCH 052/217] Updated version of bower.json and package.json --- bower.json | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 731989f6..d65c2656 100644 --- a/bower.json +++ b/bower.json @@ -1,5 +1,6 @@ { "name":"github-api", + "version": "0.11.1", "main":"src/github.js", "homepage":"https://github.com/michael/github", "authors":[ diff --git a/package.json b/package.json index cfb821d5..6eb395ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "0.10.7", + "version": "0.11.1", "description": "A higher-level wrapper around the Github API.", "main": "src/github.js", "dependencies": { From 2d737013751672dc464fec1e0492f4be6f49bb18 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 18:14:55 +0000 Subject: [PATCH 053/217] Updated distribution versions --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 0fc013e2..71b81937 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var g=e("./../helpers/cookies"),m=c.withCredentials||u(c.url)?g.read(c.xsrfCookieName):void 0;m&&(l[c.xsrfHeaderName]=m)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:g,forEach:m,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){V=e}function c(e){$=e}function f(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function p(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(g,1)}}function g(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){$(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?R(e,n):x(e,n))},function(t){r||(r=!0,S(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,S(e,o))},e)}function _(e,t){t._state===oe?x(e,t._result):t._state===ie?S(e,t._result):U(t,void 0,function(t){R(e,t)},function(t){S(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=b(t);n===se?S(e,se.error):void 0===n?x(e,t):s(n)?T(e,t,n):x(e,t)}}function R(e,t){e===t?S(e,y()):i(t)?A(e,t):x(e,t)}function C(e){e._onerror&&e._onerror(e._result),j(e)}function x(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&$(j,e))}function S(e,t){e._state===re&&(e._state=ie,e._result=t,$(C,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)U(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return R(n,e),n}function B(e){var t=this,n=new t(v);return S(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||H(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=({}.toString,function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(g):J())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?m():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;D.prototype._validateInput=function(e){return K(e)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ae=D;D.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},D.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},D.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?S(o,n):r._result[t]=n),0===r._remaining&&x(o,r._result)},D.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=k,fe=L,le=q,pe=B,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=$,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];$(function(){G(r,o,s,i)})}else U(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var ge=M,me={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return me}):"undefined"!=typeof n&&n.exports?n.exports=me:"undefined"!=typeof this&&(this.ES6Promise=me),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(o=m);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",function(e,n){t(e,n)})},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.deleteRepo=function(t){n("DELETE",r,e,t)},this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,function(e,t,n){o(e,t,n)})},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,function(t,n,r){return t?e(t):void e(null,n,r)})},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,function(e,n,r){return e?t(e):void t(null,n,r)})},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,function(e,t,n){return e?o(e):void o(null,t,n)})},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},function(e){o(e)})},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,function(e){o(e)})})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},function(e,t){r(e,t)})}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var g=e("./../helpers/cookies"),m=c.withCredentials||u(c.url)?g.read(c.xsrfCookieName):void 0;m&&(l[c.xsrfHeaderName]=m)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:g,forEach:m,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){V=e}function c(e){$=e}function f(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function p(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(g,1)}}function g(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){$(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?R(e,n):x(e,n))},function(t){r||(r=!0,S(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,S(e,o))},e)}function _(e,t){t._state===oe?x(e,t._result):t._state===ie?S(e,t._result):U(t,void 0,function(t){R(e,t)},function(t){S(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=b(t);n===se?S(e,se.error):void 0===n?x(e,t):s(n)?T(e,t,n):x(e,t)}}function R(e,t){e===t?S(e,y()):i(t)?A(e,t):x(e,t)}function C(e){e._onerror&&e._onerror(e._result),j(e)}function x(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&$(j,e))}function S(e,t){e._state===re&&(e._state=ie,e._result=t,$(C,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)U(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return R(n,e),n}function B(e){var t=this,n=new t(v);return S(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||H(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=({}.toString,function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(g):J())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?m():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;D.prototype._validateInput=function(e){return K(e)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ae=D;D.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},D.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},D.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?S(o,n):r._result[t]=n),0===r._remaining&&x(o,r._result)},D.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=k,fe=L,le=q,pe=B,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=$,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];$(function(){G(r,o,s,i)})}else U(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var ge=M,me={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return me}):"undefined"!=typeof n&&n.exports?n.exports=me:"undefined"!=typeof this&&(this.ES6Promise=me),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(o=m);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 2fbbb065..c168f132 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","deleteRepo","ref","createRef","deleteRef","listTags","tags","listPulls","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","Gist","gistPath","update","star","unstar","isStarred","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 2663a6b2..41886fea 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,c){function a(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:a()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),c=null;r.forEach(function(t){c=/rel="next"/.test(t)?t:c}),c&&(c=(/<(.*)>/.exec(c)||[])[1]),c?(t=c,s()):e(n,o)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",function(t,n){e(t,n)})},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void a.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,c=t.fullname,a=this;o=c?"/repos/"+c:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.deleteRepo=function(e){n("DELETE",o,t,e)},this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,function(t,e,n){s(t,e,n)})},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,function(e,n,o){return e?t(e):void t(null,n,o)})},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,function(t,n,o){return t?e(t):void e(null,n,o)})},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,function(t,e,n){return t?s(t):void s(null,e,n)})},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):a.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var c=new i.User;c.show(null,function(i,c){if(i)return r(i);var a={message:u,author:{name:t.user,email:c.email},parents:[e],tree:s};n("POST",o+"/git/commits",a,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},function(t){s(t)})},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void a.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){a.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){a.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),a.postTree(u,function(e,o){a.commit(i,o,"Deleted "+n,function(e,n){a.updateHead(t,n,function(t){s(t)})})})})})},this.write=function(t,e,i,u,r,c){"undefined"==typeof c&&(c=r,r={}),a.getSha(t,encodeURI(e),function(a,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};a&&404!==a.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,c)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},function(t,e){o(t,e)})}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,s()):t(n,o)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(e.type||"all")),s.push("sort="+encodeURIComponent(e.sort||"updated")),s.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&s.push("page="+encodeURIComponent(e.page)),o+="?"+s.join("&"),n("GET",o,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t){u("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t){return e?r(e):(l.sha=t.sha,void r(null,t.sha))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?s("not found",null,null):e?s(e):void s(null,t,n)},!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 6e14c25f..e1160756 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","deleteRepo","ref","object","createRef","deleteRef","listTags","tags","listPulls","state","head","base","direction","pulls","getPull","number","pull","compare","diff","listBranches","heads","map","replace","getBlob","getCommit","commit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","Gist","gistPath","create","update","star","unstar","isStarred","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, function (err, res, xhr) {\r\n cb(err, res, xhr);\r\n });\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, function (err, tags, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, tags, xhr);\r\n });\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, function (err, pulls, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pulls, xhr);\r\n });\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, function (err, pull, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pull, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, function (err, diff, xhr) {\r\n if (err) return cb(err);\r\n cb(null, diff, xhr);\r\n });\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, function (err, commit, xhr) {\r\n if (err) return cb(err);\r\n cb(null, commit, xhr);\r\n });\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, function (err) {\r\n cb(err);\r\n });\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, function (err) {\r\n cb(err);\r\n });\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, function (err, res) {\r\n cb(err, res);\r\n });\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","replace","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file From a479306d1e05398bfdc7c48a5250b8f021f1dee7 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 24 Jan 2016 18:15:15 +0000 Subject: [PATCH 054/217] Released version v0.11.2 --- bower.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index d65c2656..4ef5d8a8 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name":"github-api", - "version": "0.11.1", + "version": "0.11.2", "main":"src/github.js", "homepage":"https://github.com/michael/github", "authors":[ diff --git a/package.json b/package.json index 6eb395ee..44cbb36b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "0.11.1", + "version": "0.11.2", "description": "A higher-level wrapper around the Github API.", "main": "src/github.js", "dependencies": { From cb27c482089ad8263574e9448fc8db2160a7601e Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 19 Feb 2016 23:48:52 +0000 Subject: [PATCH 055/217] bower.json: Added missing dependencies --- bower.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bower.json b/bower.json index 4ef5d8a8..deff6a12 100644 --- a/bower.json +++ b/bower.json @@ -2,6 +2,12 @@ "name":"github-api", "version": "0.11.2", "main":"src/github.js", + "dependencies": { + "axios": "https://github.com/github-tools/axios.git", + "base-64": "^0.1.0", + "es6-promise": "^3.0.2", + "utf8": "^2.1.1" + }, "homepage":"https://github.com/michael/github", "authors":[ "Ændrew Rininsland (http://www.aendrew.com)", From 045d8b7dfe2d440387a3cfa2c6b493282e7e6191 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 12:59:17 +0000 Subject: [PATCH 056/217] Added Rate Limit API --- README.md | 11 +++++++++++ src/github.js | 13 +++++++++++++ test/test.rate-limit.js | 30 ++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 test/test.rate-limit.js diff --git a/README.md b/README.md index 36c23cad..5af7fce7 100644 --- a/README.md +++ b/README.md @@ -426,6 +426,17 @@ search.users(options, function (err, users) {}); Here, we’re looking at users with the name Tom. We’re only interested in those with more than 42 repositories, and only if they have over 1,000 followers. +## Rate Limit API + +```js +var rateLimit = github.getRateLimit(); +``` + +Get the rate limit. + +```js +rateLimit.getRateLimit(function (err, rateInfo) {}); +``` ## Change Log diff --git a/src/github.js b/src/github.js index 20abc455..412c9bfd 100644 --- a/src/github.js +++ b/src/github.js @@ -990,6 +990,15 @@ }; }; + // Rate Limit API + // ========== + + Github.RateLimit = function() { + this.getRateLimit = function(cb) { + _request('GET', '/rate_limit', null, cb); + }; + } + return Github; }; @@ -1032,5 +1041,9 @@ }); }; + Github.getRateLimit = function() { + return new Github.RateLimit(); + }; + return Github; })); \ No newline at end of file diff --git a/test/test.rate-limit.js b/test/test.rate-limit.js new file mode 100644 index 00000000..0f751a41 --- /dev/null +++ b/test/test.rate-limit.js @@ -0,0 +1,30 @@ +'use strict'; + +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, rateLimit; + +describe('Github.RateLimit', function() { + before(function() { + github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' + }); + + rateLimit = github.getRateLimit(); + }); + + it('should get rate limit', function(done) { + rateLimit.getRateLimit(function(err, rateInfo) { + should.not.exist(err); + rateInfo.should.be.an('object'); + rateInfo.should.have.deep.property('rate.limit'); + rateInfo.rate.limit.should.be.a('number'); + rateInfo.should.have.deep.property('rate.remaining'); + rateInfo.rate.remaining.should.be.a('number'); + rateInfo.rate.remaining.should.be.at.most(rateInfo.rate.limit); + done(); + }); + }); +}); From d04c339140e394846636732c81d1db2d855cd77d Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 12:59:43 +0000 Subject: [PATCH 057/217] Fixed a minor style issue --- test/test.gist.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test.gist.js b/test/test.gist.js index d2bf88ee..54843392 100644 --- a/test/test.gist.js +++ b/test/test.gist.js @@ -21,7 +21,7 @@ describe('Github.Gist', function() { gist.read(function(err, res) { should.not.exist(err); res.should.have.property('description', 'This is a test gist'); - res.files["README.md"].should.have.property('content', 'Hello World'); + res.files['README.md'].should.have.property('content', 'Hello World'); done(); }); From bf7f56eae96002794549e92efa77df7581202b0e Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 13:09:51 +0000 Subject: [PATCH 058/217] Updated distribution files --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 71b81937..4dda6369 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var g=e("./../helpers/cookies"),m=c.withCredentials||u(c.url)?g.read(c.xsrfCookieName):void 0;m&&(l[c.xsrfHeaderName]=m)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function m(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)m(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:g,forEach:m,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){return"object"==typeof e&&null!==e}function a(e){V=e}function c(e){$=e}function f(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function p(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function h(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function d(){return function(){setTimeout(g,1)}}function g(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return d()}}function v(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return se.error=t,se}}function E(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function T(e,t,n){$(function(e){var r=!1,o=E(n,t,function(n){r||(r=!0,t!==n?R(e,n):x(e,n))},function(t){r||(r=!0,S(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,S(e,o))},e)}function _(e,t){t._state===oe?x(e,t._result):t._state===ie?S(e,t._result):U(t,void 0,function(t){R(e,t)},function(t){S(e,t)})}function A(e,t){if(t.constructor===e.constructor)_(e,t);else{var n=b(t);n===se?S(e,se.error):void 0===n?x(e,t):s(n)?T(e,t,n):x(e,t)}}function R(e,t){e===t?S(e,y()):i(t)?A(e,t):x(e,t)}function C(e){e._onerror&&e._onerror(e._result),j(e)}function x(e,t){e._state===re&&(e._result=t,e._state=oe,0!==e._subscribers.length&&$(j,e))}function S(e,t){e._state===re&&(e._state=ie,e._result=t,$(C,e))}function U(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+oe]=n,o[i+ie]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)U(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return R(n,e),n}function B(e){var t=this,n=new t(v);return S(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(s(e)||H(),this instanceof N||F(),P(this,e))}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=({}.toString,function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(g):J())}),W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?f():Q?p():te?h():void 0===W&&"function"==typeof t?m():d();var re=void 0,oe=1,ie=2,se=new I,ue=new I;D.prototype._validateInput=function(e){return K(e)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ae=D;D.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===re&&t>o;o++)e._eachEntry(r[o],o)},D.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;u(e)?e.constructor===r&&e._state!==re?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},D.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===re&&(r._remaining--,e===ie?S(o,n):r._result[t]=n),0===r._remaining&&x(o,r._result)},D.prototype._willSettleAt=function(e,t){var n=this;U(e,void 0,function(e){n._settledAt(oe,t,e)},function(e){n._settledAt(ie,t,e)})};var ce=k,fe=L,le=q,pe=B,he=0,de=N;N.all=ce,N.race=fe,N.resolve=le,N.reject=pe,N._setScheduler=a,N._setAsap=c,N._asap=$,N.prototype={constructor:N,then:function(e,t){var n=this,r=n._state;if(r===oe&&!e||r===ie&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];$(function(){G(r,o,s,i)})}else U(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var ge=M,me={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return me}):"undefined"!=typeof n&&n.exports?n.exports=me:"undefined"!=typeof this&&(this.ES6Promise=me),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(o=m);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,o()):t(n,r)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),n("GET",r,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t){s("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t){return e?u(e):(f.sha=t.sha,void u(null,t.sha))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?o("not found",null,null):e?o(e):void o(null,t,n)},!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,o()):e(n,r)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index c168f132..918b9f22 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 41886fea..387364c1 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(e){a=/rel="next"/.test(e)?e:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(e=a,s()):t(n,o)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(e.type||"all")),s.push("sort="+encodeURIComponent(e.sort||"updated")),s.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&s.push("page="+encodeURIComponent(e.page)),o+="?"+s.join("&"),n("GET",o,null,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t){u("/users/"+e+"/repos?type=all&per_page=100&sort=updated",t)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):void e(null,n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n){return e?t(e):void t(null,n.sha)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t){return e?i(e):void i(null,t.sha)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n){return e?t(e):void t(null,n.sha)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t){return e?r(e):(l.sha=t.sha,void r(null,t.sha))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,function(e,t,n){return e&&404===e.error?s("not found",null,null):e?s(e):void s(null,t,n)},!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,s()):e(n,o)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index e1160756..ba96707b 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","replace","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","replace","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file From 5bcfa70cc4817b9c1b7e771537cc7f6553dae9d9 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 13:23:53 +0000 Subject: [PATCH 059/217] _requestAllPages: Fixes XHR object not passed to the callback --- src/github.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/github.js b/src/github.js index 412c9bfd..a1343bc1 100644 --- a/src/github.js +++ b/src/github.js @@ -104,7 +104,7 @@ (function iterate() { _request('GET', path, null, function (err, res, xhr) { if (err) { - return cb(err); + return cb(err, null, xhr); } if (!(res instanceof Array)) { @@ -125,7 +125,7 @@ } if (!next) { - cb(err, results); + cb(err, results, xhr); } else { path = next; iterate(); From 159ee18f815b98ec4659905e12df85079f20ff83 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 13:32:57 +0000 Subject: [PATCH 060/217] Updated distribution files --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 4dda6369..df432f3a 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,o()):e(n,r)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 918b9f22..0f3eb640 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 387364c1..68e6926b 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,s()):e(n,o)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index ba96707b..c3d8eb1a 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","replace","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","replace","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file From 20654ea41014cc37e06c7688113385298f59e46c Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 17:05:03 +0000 Subject: [PATCH 061/217] Allow one timestamp per request --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index df432f3a..56b6dbf2 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 0f3eb640..314665b9 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 68e6926b..4e8a64ae 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t+("undefined"!=typeof window?"&"+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index c3d8eb1a..9ed1c223 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","replace","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAAQ,cAAe,UAAW,OAAQ,SAAU,SAAUE,EAASC,EAAQC,EAAMC,GAClF,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAE9B,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpB,GAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAK,GAAIS,KAASP,GACXA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAIhF,OAAOH,IAAyB,mBAAXM,QAAyB,KAAM,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQb,EAAM,qCAAuC,iCACrDc,eAAgB,kCAEnBlB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQuB,UAAYvB,EAAQwB,YACjDL,EAAOC,QAAuB,cAAIpB,EAAQyB,MAC1C,SAAWzB,EAAQyB,MACnB,SAAW7B,EAAUI,EAAQuB,SAAW,IAAMvB,EAAQwB,WAGlDpC,EAAM+B,GACTO,KAAK,SAAUC,GACbpB,EACG,KACAoB,EAASrB,OAAQ,EACjBqB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVtB,EACG,KACAoB,EAASrB,OAAQ,EACjBqB,EAASC,SAGZrB,GACGF,KAAMA,EACNuB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB1C,EAAO0C,iBAAmB,SAA0B1B,EAAME,GAC9E,GAAIyB,OAEJ,QAAUC,KACP9B,EAAS,MAAOE,EAAM,KAAM,SAAU6B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO3B,GAAG2B,EAAK,KAAME,EAGlBD,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAASJ,EAAIK,kBAAkB,SAAW,IAAIC,MAAM,YACpDC,EAAO,IAEXH,GAAMI,QAAQ,SAAUC,GACrBF,EAAO,aAAa/B,KAAKiC,GAAQA,EAAOF,IAGvCA,IACDA,GAAQ,SAASG,KAAKH,QAAa,IAGjCA,GAGFtC,EAAOsC,EACPV,KAHA1B,EAAG2B,EAAKF,EAASI,QA02B7B,OA91BA/C,GAAO0D,KAAO,WACXpD,KAAKqD,MAAQ,SAAUhD,EAASO,GACJ,IAArB0C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C1C,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACNyC,IAEJA,GAAOb,KAAK,QAAUvB,mBAAmBf,EAAQoD,MAAQ,QACzDD,EAAOb,KAAK,QAAUvB,mBAAmBf,EAAQqD,MAAQ,YACzDF,EAAOb,KAAK,YAAcvB,mBAAmBf,EAAQsD,UAAY,QAE7DtD,EAAQuD,MACTJ,EAAOb,KAAK,QAAUvB,mBAAmBf,EAAQuD,OAGpD7C,GAAO,IAAMyC,EAAOK,KAAK,KAEzBrD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK8D,KAAO,SAAUlD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAK+D,MAAQ,SAAUnD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKgE,cAAgB,SAAU3D,EAASO,GACZ,IAArB0C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C1C,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACNyC,IAUJ,IARInD,EAAQ4D,KACTT,EAAOb,KAAK,YAGXtC,EAAQ6D,eACTV,EAAOb,KAAK,sBAGXtC,EAAQ8D,MAAO,CAChB,GAAIA,GAAQ9D,EAAQ8D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOb,KAAK,SAAWvB,mBAAmB+C,IAG7C,GAAI9D,EAAQiE,OAAQ,CACjB,GAAIA,GAASjE,EAAQiE,MAEjBA,GAAOF,cAAgB9C,OACxBgD,EAASA,EAAOD,eAGnBb,EAAOb,KAAK,UAAYvB,mBAAmBkD,IAG1CjE,EAAQuD,MACTJ,EAAOb,KAAK,QAAUvB,mBAAmBf,EAAQuD,OAGhDJ,EAAOD,OAAS,IACjBxC,GAAO,IAAMyC,EAAOK,KAAK,MAG5BrD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKuE,KAAO,SAAU3C,EAAUhB,GAC7B,GAAI4D,GAAU5C,EAAW,UAAYA,EAAW,OAEhDpB,GAAS,MAAOgE,EAAS,KAAM5D,IAMlCZ,KAAKyE,UAAY,SAAU7C,EAAUhB,GAElCwB,EAAiB,UAAYR,EAAW,4CAA6ChB,IAMxFZ,KAAK0E,YAAc,SAAU9C,EAAUhB,GAEpCwB,EAAiB,UAAYR,EAAW,iCAAkChB,IAM7EZ,KAAK2E,UAAY,SAAU/C,EAAUhB,GAClCJ,EAAS,MAAO,UAAYoB,EAAW,SAAU,KAAMhB,IAM1DZ,KAAK4E,SAAW,SAAUC,EAASjE,GAEhCwB,EAAiB,SAAWyC,EAAU,6DAA8DjE,IAMvGZ,KAAK8E,OAAS,SAAUlD,EAAUhB,GAC/BJ,EAAS,MAAO,mBAAqBoB,EAAU,KAAMhB,IAMxDZ,KAAK+E,SAAW,SAAUnD,EAAUhB,GACjCJ,EAAS,SAAU,mBAAqBoB,EAAU,KAAMhB,IAK3DZ,KAAKgF,WAAa,SAAU3E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAOuF,WAAa,SAAU5E,GAsB3B,QAAS6E,GAAWC,EAAQvE,GACzB,MAAIuE,KAAWC,EAAYD,QAAUC,EAAYC,IACvCzE,EAAG,KAAMwE,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU5C,EAAK8C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClBzE,EAAG2B,EAAK8C,KA7Bd,GAKIG,GALAC,EAAOpF,EAAQqF,KACfC,EAAOtF,EAAQsF,KACfC,EAAWvF,EAAQuF,SAEnBN,EAAOtF,IAIRwF,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRrF,MAAKuF,OAAS,SAAUM,EAAKjF,GAC1BJ,EAAS,MAAOgF,EAAW,aAAeK,EAAK,KAAM,SAAUtD,EAAKC,EAAKC,GACtE,MAAIF,GACM3B,EAAG2B,OAGb3B,GAAG,KAAM4B,EAAIsD,OAAOT,IAAK5C,MAY/BzC,KAAK+F,UAAY,SAAU1F,EAASO,GACjCJ,EAAS,OAAQgF,EAAW,YAAanF,EAASO,IASrDZ,KAAKgG,UAAY,SAAUH,EAAKjF,GAC7BJ,EAAS,SAAUgF,EAAW,aAAeK,EAAKxF,EAASO,IAM9DZ,KAAKgF,WAAa,SAAU3E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,IAM5CZ,KAAKiG,WAAa,SAAUrF,GACzBJ,EAAS,SAAUgF,EAAUnF,EAASO,IAMzCZ,KAAKkG,SAAW,SAAUtF,GACvBJ,EAAS,MAAOgF,EAAW,QAAS,KAAM5E,IAM7CZ,KAAKmG,UAAY,SAAU9F,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAMyE,EAAW,SACjBhC,IAEmB,iBAAZnD,GAERmD,EAAOb,KAAK,SAAWtC,IAEnBA,EAAQ+F,OACT5C,EAAOb,KAAK,SAAWvB,mBAAmBf,EAAQ+F,QAGjD/F,EAAQgG,MACT7C,EAAOb,KAAK,QAAUvB,mBAAmBf,EAAQgG,OAGhDhG,EAAQiG,MACT9C,EAAOb,KAAK,QAAUvB,mBAAmBf,EAAQiG,OAGhDjG,EAAQqD,MACTF,EAAOb,KAAK,QAAUvB,mBAAmBf,EAAQqD,OAGhDrD,EAAQkG,WACT/C,EAAOb,KAAK,aAAevB,mBAAmBf,EAAQkG,YAGrDlG,EAAQuD,MACTJ,EAAOb,KAAK,QAAUtC,EAAQuD,MAG7BvD,EAAQsD,UACTH,EAAOb,KAAK,YAActC,EAAQsD,WAIpCH,EAAOD,OAAS,IACjBxC,GAAO,IAAMyC,EAAOK,KAAK,MAG5BrD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKwG,QAAU,SAAUC,EAAQ7F,GAC9BJ,EAAS,MAAOgF,EAAW,UAAYiB,EAAQ,KAAM7F,IAMxDZ,KAAK0G,QAAU,SAAUJ,EAAMD,EAAMzF,GAClCJ,EAAS,MAAOgF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAMzF,IAMvEZ,KAAK2G,aAAe,SAAU/F,GAC3BJ,EAAS,MAAOgF,EAAW,kBAAmB,KAAM,SAAUjD,EAAKqE,EAAOnE,GACvE,MAAIF,GAAY3B,EAAG2B,OACnB3B,GAAG,KAAMgG,EAAMC,IAAI,SAAUR,GAC1B,MAAOA,GAAKR,IAAIiB,QAAQ,iBAAkB,MACzCrE,MAOVzC,KAAK+G,QAAU,SAAU1B,EAAKzE,GAC3BJ,EAAS,MAAOgF,EAAW,cAAgBH,EAAK,KAAMzE,EAAI,QAM7DZ,KAAKgH,UAAY,SAAU7B,EAAQE,EAAKzE,GACrCJ,EAAS,MAAOgF,EAAW,gBAAkBH,EAAK,KAAMzE,IAM3DZ,KAAKiH,OAAS,SAAU9B,EAAQzE,EAAME,GACnC,MAAKF,IAAiB,KAATA,MACbF,GAAS,MAAOgF,EAAW,aAAe9E,GAAQyE,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU5C,EAAK2E,EAAazE,GAC/B,MAAIF,GAAY3B,EAAG2B,OACnB3B,GAAG,KAAMsG,EAAY7B,IAAK5C,KAJC6C,EAAKC,OAAO,SAAWJ,EAAQvE,IAWnEZ,KAAKmH,YAAc,SAAU9B,EAAKzE,GAC/BJ,EAAS,MAAOgF,EAAW,aAAeH,EAAK,KAAMzE,IAMxDZ,KAAKoH,QAAU,SAAUC,EAAMzG,GAC5BJ,EAAS,MAAOgF,EAAW,cAAgB6B,EAAM,KAAM,SAAU9E,EAAKC,EAAKC,GACxE,MAAIF,GAAY3B,EAAG2B,OACnB3B,GAAG,KAAM4B,EAAI6E,KAAM5E,MAOzBzC,KAAKsH,SAAW,SAAUC,EAAS3G,GAE7B2G,EADsB,gBAAd,IAELA,QAASA,EACTC,SAAU,UAIVD,QAAStH,EAAUsH,GACnBC,SAAU,UAIhBhH,EAAS,OAAQgF,EAAW,aAAc+B,EAAS,SAAUhF,EAAKC,GAC/D,MAAID,GAAY3B,EAAG2B,OACnB3B,GAAG,KAAM4B,EAAI6C,QAOnBrF,KAAKkF,WAAa,SAAUuC,EAAU/G,EAAMgH,EAAM9G,GAC/C,GAAID,IACDgH,UAAWF,EACXJ,OAEM3G,KAAMA,EACNkH,KAAM,SACNnE,KAAM,OACN4B,IAAKqC,IAKdlH,GAAS,OAAQgF,EAAW,aAAc7E,EAAM,SAAU4B,EAAKC,GAC5D,MAAID,GAAY3B,EAAG2B,OACnB3B,GAAG,KAAM4B,EAAI6C,QAQnBrF,KAAK6H,SAAW,SAAUR,EAAMzG,GAC7BJ,EAAS,OAAQgF,EAAW,cACzB6B,KAAMA,GACN,SAAU9E,EAAKC,GACf,MAAID,GAAY3B,EAAG2B,OACnB3B,GAAG,KAAM4B,EAAI6C,QAQnBrF,KAAK8H,OAAS,SAAUC,EAAQV,EAAMW,EAASpH,GAC5C,GAAI+E,GAAO,GAAIjG,GAAO0D,IAEtBuC,GAAKpB,KAAK,KAAM,SAAUhC,EAAK0F,GAC5B,GAAI1F,EAAK,MAAO3B,GAAG2B,EACnB,IAAI5B,IACDqH,QAASA,EACTE,QACGxC,KAAMrF,EAAQsF,KACdwC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT7G,GAAS,OAAQgF,EAAW,eAAgB7E,EAAM,SAAU4B,EAAKC,GAC9D,MAAID,GAAY3B,EAAG2B,IACnB6C,EAAYC,IAAM7C,EAAI6C,QACtBzE,GAAG,KAAM4B,EAAI6C,WAQtBrF,KAAKqI,WAAa,SAAUhC,EAAMyB,EAAQlH,GACvCJ,EAAS,QAASgF,EAAW,mBAAqBa,GAC/ChB,IAAKyC,GACLlH,IAMNZ,KAAKuE,KAAO,SAAU3D,GACnBJ,EAAS,MAAOgF,EAAU,KAAM5E,IAMnCZ,KAAKsI,aAAe,SAAU1H,EAAI2H,GAC/BA,EAAQA,GAAS,GACjB,IAAIjD,GAAOtF,IAEXQ,GAAS,MAAOgF,EAAW,sBAAuB,KAAM,SAAUjD,EAAK5B,EAAM8B,GAC1E,MAAIF,GAAY3B,EAAG2B,QAEA,MAAfE,EAAIP,OACLsG,WACG,WACGlD,EAAKgD,aAAa1H,EAAI2H,IAEzBA,GAGH3H,EAAG2B,EAAK5B,EAAM8B,OAQvBzC,KAAKyI,SAAW,SAAU5C,EAAKnF,EAAME,GAClCF,EAAOgI,UAAUhI,GACjBF,EAAS,MAAOgF,EAAW,aAAe9E,EAAO,IAAMA,EAAO,KAC3DmF,IAAKA,GACLjF,IAMNZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQgF,EAAW,SAAU,KAAM5E,IAM/CZ,KAAK4I,UAAY,SAAUhI,GACxBJ,EAAS,MAAOgF,EAAW,SAAU,KAAM5E,IAM9CZ,KAAKmF,OAAS,SAAU0D,EAAWC,EAAWlI,GAClB,IAArB0C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C1C,EAAKkI,EACLA,EAAYD,EACZA,EAAY,UAGf7I,KAAKuF,OAAO,SAAWsD,EAAW,SAAUtG,EAAKsD,GAC9C,MAAItD,IAAO3B,EAAWA,EAAG2B,OACzB+C,GAAKS,WACFF,IAAK,cAAgBiD,EACrBzD,IAAKQ,GACLjF,MAOTZ,KAAK+I,kBAAoB,SAAU1I,EAASO,GACzCJ,EAAS,OAAQgF,EAAW,SAAUnF,EAASO,IAMlDZ,KAAKgJ,UAAY,SAAUpI,GACxBJ,EAAS,MAAOgF,EAAW,SAAU,KAAM5E,IAM9CZ,KAAKiJ,QAAU,SAAUC,EAAItI,GAC1BJ,EAAS,MAAOgF,EAAW,UAAY0D,EAAI,KAAMtI,IAMpDZ,KAAKmJ,WAAa,SAAU9I,EAASO,GAClCJ,EAAS,OAAQgF,EAAW,SAAUnF,EAASO,IAMlDZ,KAAKoJ,SAAW,SAAUF,EAAI7I,EAASO,GACpCJ,EAAS,QAASgF,EAAW,UAAY0D,EAAI7I,EAASO,IAMzDZ,KAAKqJ,WAAa,SAAUH,EAAItI,GAC7BJ,EAAS,SAAUgF,EAAW,UAAY0D,EAAI,KAAMtI,IAMvDZ,KAAKsJ,KAAO,SAAUnE,EAAQzE,EAAME,GACjCJ,EAAS,MAAOgF,EAAW,aAAekD,UAAUhI,IAASyE,EAAS,QAAUA,EAAS,IACtF,KAAM,SAAU5C,EAAKgH,EAAK9G,GACvB,MAAIF,IAAqB,MAAdA,EAAIJ,MAAsBvB,EAAG,YAAa,KAAM,MAEvD2B,EAAY3B,EAAG2B,OACnB3B,GAAG,KAAM2I,EAAK9G,KACd,IAMTzC,KAAKwJ,OAAS,SAAUrE,EAAQzE,EAAME,GACnC0E,EAAK2B,OAAO9B,EAAQzE,EAAM,SAAU6B,EAAK8C,GACtC,MAAI9C,GAAY3B,EAAG2B,OACnB/B,GAAS,SAAUgF,EAAW,aAAe9E,GAC1CsH,QAAStH,EAAO,cAChB2E,IAAKA,EACLF,OAAQA,GACRvE,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUtE,EAAQzE,EAAMgJ,EAAS9I,GAC1CsE,EAAWC,EAAQ,SAAU5C,EAAKoH,GAC/BrE,EAAK8B,QAAQuC,EAAe,kBAAmB,SAAUpH,EAAK8E,GAE3DA,EAAKpE,QAAQ,SAAU4C,GAChBA,EAAInF,OAASA,IAAMmF,EAAInF,KAAOgJ,GAEjB,SAAb7D,EAAIpC,YAAwBoC,GAAIR,MAGvCC,EAAKuC,SAASR,EAAM,SAAU9E,EAAKqH,GAChCtE,EAAKwC,OAAO6B,EAAcC,EAAU,WAAalJ,EAAM,SAAU6B,EAAKuF,GACnExC,EAAK+C,WAAWlD,EAAQ2C,EAAQlH,YAU/CZ,KAAK6J,MAAQ,SAAU1E,EAAQzE,EAAM6G,EAASS,EAAS3H,EAASO,GAC3C,mBAAPA,KACRA,EAAKP,EACLA,MAGHiF,EAAK2B,OAAO9B,EAAQuD,UAAUhI,GAAO,SAAU6B,EAAK8C,GACjD,GAAIyE,IACD9B,QAASA,EACTT,QAAmC,mBAAnBlH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUsH,GAAWA,EACxFpC,OAAQA,EACR4E,UAAW1J,GAAWA,EAAQ0J,UAAY1J,EAAQ0J,UAAYC,OAC9D9B,OAAQ7H,GAAWA,EAAQ6H,OAAS7H,EAAQ6H,OAAS8B,OAIlDzH,IAAqB,MAAdA,EAAIJ,QAAgB2H,EAAazE,IAAMA,GACpD7E,EAAS,MAAOgF,EAAW,aAAekD,UAAUhI,GAAOoJ,EAAclJ,MAY/EZ,KAAKiK,WAAa,SAAU5J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAMyE,EAAW,WACjBhC,IAcJ,IAZInD,EAAQgF,KACT7B,EAAOb,KAAK,OAASvB,mBAAmBf,EAAQgF,MAG/ChF,EAAQK,MACT8C,EAAOb,KAAK,QAAUvB,mBAAmBf,EAAQK,OAGhDL,EAAQ6H,QACT1E,EAAOb,KAAK,UAAYvB,mBAAmBf,EAAQ6H,SAGlD7H,EAAQ8D,MAAO,CAChB,GAAIA,GAAQ9D,EAAQ8D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOb,KAAK,SAAWvB,mBAAmB+C,IAG7C,GAAI9D,EAAQ6J,MAAO,CAChB,GAAIA,GAAQ7J,EAAQ6J,KAEhBA,GAAM9F,cAAgB9C,OACvB4I,EAAQA,EAAM7F,eAGjBb,EAAOb,KAAK,SAAWvB,mBAAmB8I,IAGzC7J,EAAQuD,MACTJ,EAAOb,KAAK,QAAUtC,EAAQuD,MAG7BvD,EAAQ8J,SACT3G,EAAOb,KAAK,YAActC,EAAQ8J,SAGjC3G,EAAOD,OAAS,IACjBxC,GAAO,IAAMyC,EAAOK,KAAK,MAG5BrD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKoK,UAAY,SAASC,EAAOC,EAAY1J,GAC1CJ,EAAS,MAAO,iBAAmB6J,EAAQ,IAAMC,EAAY,KAAM1J,IAMtEZ,KAAKuK,KAAO,SAASF,EAAOC,EAAY1J,GACrCJ,EAAS,MAAO,iBAAmB6J,EAAQ,IAAMC,EAAY,KAAM1J,IAMtEZ,KAAKwK,OAAS,SAASH,EAAOC,EAAY1J,GACvCJ,EAAS,SAAU,iBAAmB6J,EAAQ,IAAMC,EAAY,KAAM1J,KAO5ElB,EAAO+K,KAAO,SAAUpK,GACrB,GAAI6I,GAAK7I,EAAQ6I,GACbwB,EAAW,UAAYxB,CAK3BlJ,MAAKsJ,KAAO,SAAU1I,GACnBJ,EAAS,MAAOkK,EAAU,KAAM9J,IAenCZ,KAAK2K,OAAS,SAAUtK,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUkK,EAAU,KAAM9J,IAMtCZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQkK,EAAW,QAAS,KAAM9J,IAM9CZ,KAAK4K,OAAS,SAAUvK,EAASO,GAC9BJ,EAAS,QAASkK,EAAUrK,EAASO,IAMxCZ,KAAKuK,KAAO,SAAU3J,GACnBJ,EAAS,MAAOkK,EAAW,QAAS,KAAM9J,IAM7CZ,KAAKwK,OAAS,SAAU5J,GACrBJ,EAAS,SAAUkK,EAAW,QAAS,KAAM9J,IAMhDZ,KAAKoK,UAAY,SAAUxJ,GACxBJ,EAAS,MAAOkK,EAAW,QAAS,KAAM9J,KAOhDlB,EAAOmL,MAAQ,SAAUxK,GACtB,GAAIK,GAAO,UAAYL,EAAQsF,KAAO,IAAMtF,EAAQoF,KAAO,SAE3DzF,MAAK8K,KAAO,SAAUzK,EAASO,GAC5B,GAAImK,KAEJ,KAAK,GAAIC,KAAO3K,GACTA,EAAQc,eAAe6J,IACxBD,EAAMpI,KAAKvB,mBAAmB4J,GAAO,IAAM5J,mBAAmBf,EAAQ2K,IAI5E5I,GAAiB1B,EAAO,IAAMqK,EAAMlH,KAAK,KAAMjD,IAGlDZ,KAAKiL,QAAU,SAAUC,EAAOD,EAASrK,GACtCJ,EAAS,OAAQ0K,EAAMC,cACpBC,KAAMH,GACNrK,KAOTlB,EAAO2L,OAAS,SAAUhL,GACvB,GAAIK,GAAO,WACPqK,EAAQ,MAAQ1K,EAAQ0K,KAE5B/K,MAAKsL,aAAe,SAAUjL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiBqK,EAAO1K,EAASO,IAG3DZ,KAAKuL,KAAO,SAAUlL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAASqK,EAAO1K,EAASO,IAGnDZ,KAAKwL,OAAS,SAAUnL,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAWqK,EAAO1K,EAASO,IAGrDZ,KAAKyL,MAAQ,SAAUpL,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAUqK,EAAO1K,EAASO,KAOvDlB,EAAOgM,UAAY,WAChB1L,KAAK2L,aAAe,SAAS/K,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOkM,UAAY,SAAUjG,EAAMF,GAChC,MAAO,IAAI/F,GAAOmL,OACflF,KAAMA,EACNF,KAAMA,KAIZ/F,EAAOmM,QAAU,SAAUlG,EAAMF,GAC9B,MAAKA,GAKK,GAAI/F,GAAOuF,YACfU,KAAMA,EACND,KAAMD,IANF,GAAI/F,GAAOuF,YACfW,SAAUD,KAUnBjG,EAAOoM,QAAU,WACd,MAAO,IAAIpM,GAAO0D,MAGrB1D,EAAOqM,QAAU,SAAU7C,GACxB,MAAO,IAAIxJ,GAAO+K,MACfvB,GAAIA,KAIVxJ,EAAOsM,UAAY,SAAUjB,GAC1B,MAAO,IAAIrL,GAAO2L,QACfN,MAAOA,KAIbrL,EAAOiM,aAAe,WACnB,MAAO,IAAIjM,GAAOgM,WAGdhM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAAQ,cAAe,UAAW,OAAQ,SAAU,SAAUE,EAASC,EAAQC,EAAMC,GAClF,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAE9B,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpB,GAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAK,GAAIS,KAASP,GACXA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAIhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAuB,cAAIrB,EAAQ0B,MAC1C,SAAW1B,EAAQ0B,MACnB,SAAW9B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTO,KAAK,SAAUC,GACbrB,EACG,KACAqB,EAAStB,OAAQ,EACjBsB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVvB,EACG,KACAqB,EAAStB,OAAQ,EACjBsB,EAASC,SAGZtB,GACGF,KAAMA,EACNwB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB3C,EAAO2C,iBAAmB,SAA0B3B,EAAME,GAC9E,GAAI0B,OAEJ,QAAUC,KACP/B,EAAS,MAAOE,EAAM,KAAM,SAAU8B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO5B,GAAG4B,EAAK,KAAME,EAGlBD,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAASJ,EAAIK,kBAAkB,SAAW,IAAIC,MAAM,YACpDC,EAAO,IAEXH,GAAMI,QAAQ,SAAUC,GACrBF,EAAO,aAAahC,KAAKkC,GAAQA,EAAOF,IAGvCA,IACDA,GAAQ,SAASG,KAAKH,QAAa,IAGjCA,GAGFvC,EAAOuC,EACPV,KAHA3B,EAAG4B,EAAKF,EAASI,QA02B7B,OA91BAhD,GAAO2D,KAAO,WACXrD,KAAKsD,MAAQ,SAAUjD,EAASO,GACJ,IAArB2C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C3C,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN0C,IAEJA,GAAOb,KAAK,QAAUxB,mBAAmBf,EAAQqD,MAAQ,QACzDD,EAAOb,KAAK,QAAUxB,mBAAmBf,EAAQsD,MAAQ,YACzDF,EAAOb,KAAK,YAAcxB,mBAAmBf,EAAQuD,UAAY,QAE7DvD,EAAQwD,MACTJ,EAAOb,KAAK,QAAUxB,mBAAmBf,EAAQwD,OAGpD9C,GAAO,IAAM0C,EAAOK,KAAK,KAEzBtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK+D,KAAO,SAAUnD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKgE,MAAQ,SAAUpD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKiE,cAAgB,SAAU5D,EAASO,GACZ,IAArB2C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C3C,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN0C,IAUJ,IARIpD,EAAQ6D,KACTT,EAAOb,KAAK,YAGXvC,EAAQ8D,eACTV,EAAOb,KAAK,sBAGXvC,EAAQ+D,MAAO,CAChB,GAAIA,GAAQ/D,EAAQ+D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOb,KAAK,SAAWxB,mBAAmBgD,IAG7C,GAAI/D,EAAQkE,OAAQ,CACjB,GAAIA,GAASlE,EAAQkE,MAEjBA,GAAOF,cAAgB9C,OACxBgD,EAASA,EAAOD,eAGnBb,EAAOb,KAAK,UAAYxB,mBAAmBmD,IAG1ClE,EAAQwD,MACTJ,EAAOb,KAAK,QAAUxB,mBAAmBf,EAAQwD,OAGhDJ,EAAOD,OAAS,IACjBzC,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKwE,KAAO,SAAU3C,EAAUjB,GAC7B,GAAI6D,GAAU5C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOiE,EAAS,KAAM7D,IAMlCZ,KAAK0E,UAAY,SAAU7C,EAAUjB,GAElCyB,EAAiB,UAAYR,EAAW,4CAA6CjB,IAMxFZ,KAAK2E,YAAc,SAAU9C,EAAUjB,GAEpCyB,EAAiB,UAAYR,EAAW,iCAAkCjB,IAM7EZ,KAAK4E,UAAY,SAAU/C,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK6E,SAAW,SAAUC,EAASlE,GAEhCyB,EAAiB,SAAWyC,EAAU,6DAA8DlE,IAMvGZ,KAAK+E,OAAS,SAAUlD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKgF,SAAW,SAAUnD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKiF,WAAa,SAAU5E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAOwF,WAAa,SAAU7E,GAsB3B,QAAS8E,GAAWC,EAAQxE,GACzB,MAAIwE,KAAWC,EAAYD,QAAUC,EAAYC,IACvC1E,EAAG,KAAMyE,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU5C,EAAK8C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB1E,EAAG4B,EAAK8C,KA7Bd,GAKIG,GALAC,EAAOrF,EAAQsF,KACfC,EAAOvF,EAAQuF,KACfC,EAAWxF,EAAQwF,SAEnBN,EAAOvF,IAIRyF,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRtF,MAAKwF,OAAS,SAAUM,EAAKlF,GAC1BJ,EAAS,MAAOiF,EAAW,aAAeK,EAAK,KAAM,SAAUtD,EAAKC,EAAKC,GACtE,MAAIF,GACM5B,EAAG4B,OAGb5B,GAAG,KAAM6B,EAAIsD,OAAOT,IAAK5C,MAY/B1C,KAAKgG,UAAY,SAAU3F,EAASO,GACjCJ,EAAS,OAAQiF,EAAW,YAAapF,EAASO,IASrDZ,KAAKiG,UAAY,SAAUH,EAAKlF,GAC7BJ,EAAS,SAAUiF,EAAW,aAAeK,EAAKzF,EAASO,IAM9DZ,KAAKiF,WAAa,SAAU5E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,IAM5CZ,KAAKkG,WAAa,SAAUtF,GACzBJ,EAAS,SAAUiF,EAAUpF,EAASO,IAMzCZ,KAAKmG,SAAW,SAAUvF,GACvBJ,EAAS,MAAOiF,EAAW,QAAS,KAAM7E,IAM7CZ,KAAKoG,UAAY,SAAU/F,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM0E,EAAW,SACjBhC,IAEmB,iBAAZpD,GAERoD,EAAOb,KAAK,SAAWvC,IAEnBA,EAAQgG,OACT5C,EAAOb,KAAK,SAAWxB,mBAAmBf,EAAQgG,QAGjDhG,EAAQiG,MACT7C,EAAOb,KAAK,QAAUxB,mBAAmBf,EAAQiG,OAGhDjG,EAAQkG,MACT9C,EAAOb,KAAK,QAAUxB,mBAAmBf,EAAQkG,OAGhDlG,EAAQsD,MACTF,EAAOb,KAAK,QAAUxB,mBAAmBf,EAAQsD,OAGhDtD,EAAQmG,WACT/C,EAAOb,KAAK,aAAexB,mBAAmBf,EAAQmG,YAGrDnG,EAAQwD,MACTJ,EAAOb,KAAK,QAAUvC,EAAQwD,MAG7BxD,EAAQuD,UACTH,EAAOb,KAAK,YAAcvC,EAAQuD,WAIpCH,EAAOD,OAAS,IACjBzC,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKyG,QAAU,SAAUC,EAAQ9F,GAC9BJ,EAAS,MAAOiF,EAAW,UAAYiB,EAAQ,KAAM9F,IAMxDZ,KAAK2G,QAAU,SAAUJ,EAAMD,EAAM1F,GAClCJ,EAAS,MAAOiF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM1F,IAMvEZ,KAAK4G,aAAe,SAAUhG,GAC3BJ,EAAS,MAAOiF,EAAW,kBAAmB,KAAM,SAAUjD,EAAKqE,EAAOnE,GACvE,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAMiG,EAAMC,IAAI,SAAUR,GAC1B,MAAOA,GAAKR,IAAIzE,QAAQ,iBAAkB,MACzCqB,MAOV1C,KAAK+G,QAAU,SAAUzB,EAAK1E,GAC3BJ,EAAS,MAAOiF,EAAW,cAAgBH,EAAK,KAAM1E,EAAI,QAM7DZ,KAAKgH,UAAY,SAAU5B,EAAQE,EAAK1E,GACrCJ,EAAS,MAAOiF,EAAW,gBAAkBH,EAAK,KAAM1E,IAM3DZ,KAAKiH,OAAS,SAAU7B,EAAQ1E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MACbF,GAAS,MAAOiF,EAAW,aAAe/E,GAAQ0E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU5C,EAAK0E,EAAaxE,GAC/B,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAMsG,EAAY5B,IAAK5C,KAJC6C,EAAKC,OAAO,SAAWJ,EAAQxE,IAWnEZ,KAAKmH,YAAc,SAAU7B,EAAK1E,GAC/BJ,EAAS,MAAOiF,EAAW,aAAeH,EAAK,KAAM1E,IAMxDZ,KAAKoH,QAAU,SAAUC,EAAMzG,GAC5BJ,EAAS,MAAOiF,EAAW,cAAgB4B,EAAM,KAAM,SAAU7E,EAAKC,EAAKC,GACxE,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI4E,KAAM3E,MAOzB1C,KAAKsH,SAAW,SAAUC,EAAS3G,GAE7B2G,EADsB,gBAAd,IAELA,QAASA,EACTC,SAAU,UAIVD,QAAStH,EAAUsH,GACnBC,SAAU,UAIhBhH,EAAS,OAAQiF,EAAW,aAAc8B,EAAS,SAAU/E,EAAKC,GAC/D,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI6C,QAOnBtF,KAAKmF,WAAa,SAAUsC,EAAU/G,EAAMgH,EAAM9G,GAC/C,GAAID,IACDgH,UAAWF,EACXJ,OAEM3G,KAAMA,EACNkH,KAAM,SACNlE,KAAM,OACN4B,IAAKoC,IAKdlH,GAAS,OAAQiF,EAAW,aAAc9E,EAAM,SAAU6B,EAAKC,GAC5D,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI6C,QAQnBtF,KAAK6H,SAAW,SAAUR,EAAMzG,GAC7BJ,EAAS,OAAQiF,EAAW,cACzB4B,KAAMA,GACN,SAAU7E,EAAKC,GACf,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI6C,QAQnBtF,KAAK8H,OAAS,SAAUC,EAAQV,EAAMW,EAASpH,GAC5C,GAAIgF,GAAO,GAAIlG,GAAO2D,IAEtBuC,GAAKpB,KAAK,KAAM,SAAUhC,EAAKyF,GAC5B,GAAIzF,EAAK,MAAO5B,GAAG4B,EACnB,IAAI7B,IACDqH,QAASA,EACTE,QACGvC,KAAMtF,EAAQuF,KACduC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT7G,GAAS,OAAQiF,EAAW,eAAgB9E,EAAM,SAAU6B,EAAKC,GAC9D,MAAID,GAAY5B,EAAG4B,IACnB6C,EAAYC,IAAM7C,EAAI6C,QACtB1E,GAAG,KAAM6B,EAAI6C,WAQtBtF,KAAKqI,WAAa,SAAU/B,EAAMwB,EAAQlH,GACvCJ,EAAS,QAASiF,EAAW,mBAAqBa,GAC/ChB,IAAKwC,GACLlH,IAMNZ,KAAKwE,KAAO,SAAU5D,GACnBJ,EAAS,MAAOiF,EAAU,KAAM7E,IAMnCZ,KAAKsI,aAAe,SAAU1H,EAAI2H,GAC/BA,EAAQA,GAAS,GACjB,IAAIhD,GAAOvF,IAEXQ,GAAS,MAAOiF,EAAW,sBAAuB,KAAM,SAAUjD,EAAK7B,EAAM+B,GAC1E,MAAIF,GAAY5B,EAAG4B,QAEA,MAAfE,EAAIP,OACLqG,WACG,WACGjD,EAAK+C,aAAa1H,EAAI2H,IAEzBA,GAGH3H,EAAG4B,EAAK7B,EAAM+B,OAQvB1C,KAAKyI,SAAW,SAAU3C,EAAKpF,EAAME,GAClCF,EAAOgI,UAAUhI,GACjBF,EAAS,MAAOiF,EAAW,aAAe/E,EAAO,IAAMA,EAAO,KAC3DoF,IAAKA,GACLlF,IAMNZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQiF,EAAW,SAAU,KAAM7E,IAM/CZ,KAAK4I,UAAY,SAAUhI,GACxBJ,EAAS,MAAOiF,EAAW,SAAU,KAAM7E,IAM9CZ,KAAKoF,OAAS,SAAUyD,EAAWC,EAAWlI,GAClB,IAArB2C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C3C,EAAKkI,EACLA,EAAYD,EACZA,EAAY,UAGf7I,KAAKwF,OAAO,SAAWqD,EAAW,SAAUrG,EAAKsD,GAC9C,MAAItD,IAAO5B,EAAWA,EAAG4B,OACzB+C,GAAKS,WACFF,IAAK,cAAgBgD,EACrBxD,IAAKQ,GACLlF,MAOTZ,KAAK+I,kBAAoB,SAAU1I,EAASO,GACzCJ,EAAS,OAAQiF,EAAW,SAAUpF,EAASO,IAMlDZ,KAAKgJ,UAAY,SAAUpI,GACxBJ,EAAS,MAAOiF,EAAW,SAAU,KAAM7E,IAM9CZ,KAAKiJ,QAAU,SAAUC,EAAItI,GAC1BJ,EAAS,MAAOiF,EAAW,UAAYyD,EAAI,KAAMtI,IAMpDZ,KAAKmJ,WAAa,SAAU9I,EAASO,GAClCJ,EAAS,OAAQiF,EAAW,SAAUpF,EAASO,IAMlDZ,KAAKoJ,SAAW,SAAUF,EAAI7I,EAASO,GACpCJ,EAAS,QAASiF,EAAW,UAAYyD,EAAI7I,EAASO,IAMzDZ,KAAKqJ,WAAa,SAAUH,EAAItI,GAC7BJ,EAAS,SAAUiF,EAAW,UAAYyD,EAAI,KAAMtI,IAMvDZ,KAAKsJ,KAAO,SAAUlE,EAAQ1E,EAAME,GACjCJ,EAAS,MAAOiF,EAAW,aAAeiD,UAAUhI,IAAS0E,EAAS,QAAUA,EAAS,IACtF,KAAM,SAAU5C,EAAK+G,EAAK7G,GACvB,MAAIF,IAAqB,MAAdA,EAAIJ,MAAsBxB,EAAG,YAAa,KAAM,MAEvD4B,EAAY5B,EAAG4B,OACnB5B,GAAG,KAAM2I,EAAK7G,KACd,IAMT1C,KAAKwJ,OAAS,SAAUpE,EAAQ1E,EAAME,GACnC2E,EAAK0B,OAAO7B,EAAQ1E,EAAM,SAAU8B,EAAK8C,GACtC,MAAI9C,GAAY5B,EAAG4B,OACnBhC,GAAS,SAAUiF,EAAW,aAAe/E,GAC1CsH,QAAStH,EAAO,cAChB4E,IAAKA,EACLF,OAAQA,GACRxE,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUrE,EAAQ1E,EAAMgJ,EAAS9I,GAC1CuE,EAAWC,EAAQ,SAAU5C,EAAKmH,GAC/BpE,EAAK6B,QAAQuC,EAAe,kBAAmB,SAAUnH,EAAK6E,GAE3DA,EAAKnE,QAAQ,SAAU4C,GAChBA,EAAIpF,OAASA,IAAMoF,EAAIpF,KAAOgJ,GAEjB,SAAb5D,EAAIpC,YAAwBoC,GAAIR,MAGvCC,EAAKsC,SAASR,EAAM,SAAU7E,EAAKoH,GAChCrE,EAAKuC,OAAO6B,EAAcC,EAAU,WAAalJ,EAAM,SAAU8B,EAAKsF,GACnEvC,EAAK8C,WAAWjD,EAAQ0C,EAAQlH,YAU/CZ,KAAK6J,MAAQ,SAAUzE,EAAQ1E,EAAM6G,EAASS,EAAS3H,EAASO,GAC3C,mBAAPA,KACRA,EAAKP,EACLA,MAGHkF,EAAK0B,OAAO7B,EAAQsD,UAAUhI,GAAO,SAAU8B,EAAK8C,GACjD,GAAIwE,IACD9B,QAASA,EACTT,QAAmC,mBAAnBlH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUsH,GAAWA,EACxFnC,OAAQA,EACR2E,UAAW1J,GAAWA,EAAQ0J,UAAY1J,EAAQ0J,UAAYC,OAC9D9B,OAAQ7H,GAAWA,EAAQ6H,OAAS7H,EAAQ6H,OAAS8B,OAIlDxH,IAAqB,MAAdA,EAAIJ,QAAgB0H,EAAaxE,IAAMA,GACpD9E,EAAS,MAAOiF,EAAW,aAAeiD,UAAUhI,GAAOoJ,EAAclJ,MAY/EZ,KAAKiK,WAAa,SAAU5J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM0E,EAAW,WACjBhC,IAcJ,IAZIpD,EAAQiF,KACT7B,EAAOb,KAAK,OAASxB,mBAAmBf,EAAQiF,MAG/CjF,EAAQK,MACT+C,EAAOb,KAAK,QAAUxB,mBAAmBf,EAAQK,OAGhDL,EAAQ6H,QACTzE,EAAOb,KAAK,UAAYxB,mBAAmBf,EAAQ6H,SAGlD7H,EAAQ+D,MAAO,CAChB,GAAIA,GAAQ/D,EAAQ+D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOb,KAAK,SAAWxB,mBAAmBgD,IAG7C,GAAI/D,EAAQ6J,MAAO,CAChB,GAAIA,GAAQ7J,EAAQ6J,KAEhBA,GAAM7F,cAAgB9C,OACvB2I,EAAQA,EAAM5F,eAGjBb,EAAOb,KAAK,SAAWxB,mBAAmB8I,IAGzC7J,EAAQwD,MACTJ,EAAOb,KAAK,QAAUvC,EAAQwD,MAG7BxD,EAAQ8J,SACT1G,EAAOb,KAAK,YAAcvC,EAAQ8J,SAGjC1G,EAAOD,OAAS,IACjBzC,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKoK,UAAY,SAASC,EAAOC,EAAY1J,GAC1CJ,EAAS,MAAO,iBAAmB6J,EAAQ,IAAMC,EAAY,KAAM1J,IAMtEZ,KAAKuK,KAAO,SAASF,EAAOC,EAAY1J,GACrCJ,EAAS,MAAO,iBAAmB6J,EAAQ,IAAMC,EAAY,KAAM1J,IAMtEZ,KAAKwK,OAAS,SAASH,EAAOC,EAAY1J,GACvCJ,EAAS,SAAU,iBAAmB6J,EAAQ,IAAMC,EAAY,KAAM1J,KAO5ElB,EAAO+K,KAAO,SAAUpK,GACrB,GAAI6I,GAAK7I,EAAQ6I,GACbwB,EAAW,UAAYxB,CAK3BlJ,MAAKsJ,KAAO,SAAU1I,GACnBJ,EAAS,MAAOkK,EAAU,KAAM9J,IAenCZ,KAAK2K,OAAS,SAAUtK,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUkK,EAAU,KAAM9J,IAMtCZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQkK,EAAW,QAAS,KAAM9J,IAM9CZ,KAAK4K,OAAS,SAAUvK,EAASO,GAC9BJ,EAAS,QAASkK,EAAUrK,EAASO,IAMxCZ,KAAKuK,KAAO,SAAU3J,GACnBJ,EAAS,MAAOkK,EAAW,QAAS,KAAM9J,IAM7CZ,KAAKwK,OAAS,SAAU5J,GACrBJ,EAAS,SAAUkK,EAAW,QAAS,KAAM9J,IAMhDZ,KAAKoK,UAAY,SAAUxJ,GACxBJ,EAAS,MAAOkK,EAAW,QAAS,KAAM9J,KAOhDlB,EAAOmL,MAAQ,SAAUxK,GACtB,GAAIK,GAAO,UAAYL,EAAQuF,KAAO,IAAMvF,EAAQqF,KAAO,SAE3D1F,MAAK8K,KAAO,SAAUzK,EAASO,GAC5B,GAAImK,KAEJ,KAAK,GAAIC,KAAO3K,GACTA,EAAQc,eAAe6J,IACxBD,EAAMnI,KAAKxB,mBAAmB4J,GAAO,IAAM5J,mBAAmBf,EAAQ2K,IAI5E3I,GAAiB3B,EAAO,IAAMqK,EAAMjH,KAAK,KAAMlD,IAGlDZ,KAAKiL,QAAU,SAAUC,EAAOD,EAASrK,GACtCJ,EAAS,OAAQ0K,EAAMC,cACpBC,KAAMH,GACNrK,KAOTlB,EAAO2L,OAAS,SAAUhL,GACvB,GAAIK,GAAO,WACPqK,EAAQ,MAAQ1K,EAAQ0K,KAE5B/K,MAAKsL,aAAe,SAAUjL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiBqK,EAAO1K,EAASO,IAG3DZ,KAAKuL,KAAO,SAAUlL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAASqK,EAAO1K,EAASO,IAGnDZ,KAAKwL,OAAS,SAAUnL,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAWqK,EAAO1K,EAASO,IAGrDZ,KAAKyL,MAAQ,SAAUpL,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAUqK,EAAO1K,EAASO,KAOvDlB,EAAOgM,UAAY,WAChB1L,KAAK2L,aAAe,SAAS/K,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOkM,UAAY,SAAUhG,EAAMF,GAChC,MAAO,IAAIhG,GAAOmL,OACfjF,KAAMA,EACNF,KAAMA,KAIZhG,EAAOmM,QAAU,SAAUjG,EAAMF,GAC9B,MAAKA,GAKK,GAAIhG,GAAOwF,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIhG,GAAOwF,YACfW,SAAUD,KAUnBlG,EAAOoM,QAAU,WACd,MAAO,IAAIpM,GAAO2D,MAGrB3D,EAAOqM,QAAU,SAAU7C,GACxB,MAAO,IAAIxJ,GAAO+K,MACfvB,GAAIA,KAIVxJ,EAAOsM,UAAY,SAAUjB,GAC1B,MAAO,IAAIrL,GAAO2L,QACfN,MAAOA,KAIbrL,EAAOiM,aAAe,WACnB,MAAO,IAAIjM,GAAOgM,WAGdhM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index a1343bc1..8b63c481 100644 --- a/src/github.js +++ b/src/github.js @@ -55,7 +55,8 @@ } } - return url + (typeof window !== 'undefined' ? '&' + new Date().getTime() : ''); + return url.replace(/(×tamp=\d+)/, '') + + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); } var config = { From 1c0ed9c16c0ce27174bfa747b146fa793514b0dc Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 17:25:11 +0000 Subject: [PATCH 062/217] Better extraction of next URL --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 19 +++++++++---------- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 56b6dbf2..2aab27a1 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;u.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 314665b9..57aeee4a 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","links","getResponseHeader","next","link","exec","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 4e8a64ae..8e6ed835 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(/\s*,\s*/g),a=null;r.forEach(function(t){a=/rel="next"/.test(t)?t:a}),a&&(a=(/<(.*)>/.exec(a)||[])[1]),a?(t=a,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 9ed1c223..ebd09884 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","links","getResponseHeader","split","next","forEach","link","exec","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","map","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var links = (xhr.getResponseHeader('link') || '').split(/\\s*,\\s*/g);\r\n var next = null;\r\n\r\n links.forEach(function (link) {\r\n next = /rel=\"next\"/.test(link) ? link : next;\r\n });\r\n\r\n if (next) {\r\n next = (/<(.*)>/.exec(next) || [])[1];\r\n }\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAAQ,cAAe,UAAW,OAAQ,SAAU,SAAUE,EAASC,EAAQC,EAAMC,GAClF,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAE9B,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpB,GAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAK,GAAIS,KAASP,GACXA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAIhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAuB,cAAIrB,EAAQ0B,MAC1C,SAAW1B,EAAQ0B,MACnB,SAAW9B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTO,KAAK,SAAUC,GACbrB,EACG,KACAqB,EAAStB,OAAQ,EACjBsB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVvB,EACG,KACAqB,EAAStB,OAAQ,EACjBsB,EAASC,SAGZtB,GACGF,KAAMA,EACNwB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB3C,EAAO2C,iBAAmB,SAA0B3B,EAAME,GAC9E,GAAI0B,OAEJ,QAAUC,KACP/B,EAAS,MAAOE,EAAM,KAAM,SAAU8B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO5B,GAAG4B,EAAK,KAAME,EAGlBD,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAAQJ,EAAIK,kBAAkB,SAAW,IACzCC,MAAM,KACNC,OAAO,SAASC,GACd,MAAO,aAAajC,KAAKiC,KAE3BC,IAAI,SAASD,GACX,OAAQ,SAASE,KAAKF,QAAa,KAErCG,KAECP,IAGFpC,EAAOoC,EACPP,KAHA3B,EAAG4B,EAAKF,EAASI,QA02B7B,OA91BAhD,GAAO4D,KAAO,WACXtD,KAAKuD,MAAQ,SAAUlD,EAASO,GACJ,IAArB4C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C5C,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN2C,IAEJA,GAAOd,KAAK,QAAUxB,mBAAmBf,EAAQsD,MAAQ,QACzDD,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQuD,MAAQ,YACzDF,EAAOd,KAAK,YAAcxB,mBAAmBf,EAAQwD,UAAY,QAE7DxD,EAAQyD,MACTJ,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQyD,OAGpD/C,GAAO,IAAM2C,EAAOK,KAAK,KAEzBvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKgE,KAAO,SAAUpD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKiE,MAAQ,SAAUrD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKkE,cAAgB,SAAU7D,EAASO,GACZ,IAArB4C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C5C,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN2C,IAUJ,IARIrD,EAAQ8D,KACTT,EAAOd,KAAK,YAGXvC,EAAQ+D,eACTV,EAAOd,KAAK,sBAGXvC,EAAQgE,MAAO,CAChB,GAAIA,GAAQhE,EAAQgE,KAEhBA,GAAMC,cAAgB/C,OACvB8C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWxB,mBAAmBiD,IAG7C,GAAIhE,EAAQmE,OAAQ,CACjB,GAAIA,GAASnE,EAAQmE,MAEjBA,GAAOF,cAAgB/C,OACxBiD,EAASA,EAAOD,eAGnBb,EAAOd,KAAK,UAAYxB,mBAAmBoD,IAG1CnE,EAAQyD,MACTJ,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQyD,OAGhDJ,EAAOD,OAAS,IACjB1C,GAAO,IAAM2C,EAAOK,KAAK,MAG5BvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKyE,KAAO,SAAU5C,EAAUjB,GAC7B,GAAI8D,GAAU7C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOkE,EAAS,KAAM9D,IAMlCZ,KAAK2E,UAAY,SAAU9C,EAAUjB,GAElCyB,EAAiB,UAAYR,EAAW,4CAA6CjB,IAMxFZ,KAAK4E,YAAc,SAAU/C,EAAUjB,GAEpCyB,EAAiB,UAAYR,EAAW,iCAAkCjB,IAM7EZ,KAAK6E,UAAY,SAAUhD,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK8E,SAAW,SAAUC,EAASnE,GAEhCyB,EAAiB,SAAW0C,EAAU,6DAA8DnE,IAMvGZ,KAAKgF,OAAS,SAAUnD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKiF,SAAW,SAAUpD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKkF,WAAa,SAAU7E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAOyF,WAAa,SAAU9E,GAsB3B,QAAS+E,GAAWC,EAAQzE,GACzB,MAAIyE,KAAWC,EAAYD,QAAUC,EAAYC,IACvC3E,EAAG,KAAM0E,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU7C,EAAK+C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB3E,EAAG4B,EAAK+C,KA7Bd,GAKIG,GALAC,EAAOtF,EAAQuF,KACfC,EAAOxF,EAAQwF,KACfC,EAAWzF,EAAQyF,SAEnBN,EAAOxF,IAIR0F,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRvF,MAAKyF,OAAS,SAAUM,EAAKnF,GAC1BJ,EAAS,MAAOkF,EAAW,aAAeK,EAAK,KAAM,SAAUvD,EAAKC,EAAKC,GACtE,MAAIF,GACM5B,EAAG4B,OAGb5B,GAAG,KAAM6B,EAAIuD,OAAOT,IAAK7C,MAY/B1C,KAAKiG,UAAY,SAAU5F,EAASO,GACjCJ,EAAS,OAAQkF,EAAW,YAAarF,EAASO,IASrDZ,KAAKkG,UAAY,SAAUH,EAAKnF,GAC7BJ,EAAS,SAAUkF,EAAW,aAAeK,EAAK1F,EAASO,IAM9DZ,KAAKkF,WAAa,SAAU7E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,IAM5CZ,KAAKmG,WAAa,SAAUvF,GACzBJ,EAAS,SAAUkF,EAAUrF,EAASO,IAMzCZ,KAAKoG,SAAW,SAAUxF,GACvBJ,EAAS,MAAOkF,EAAW,QAAS,KAAM9E,IAM7CZ,KAAKqG,UAAY,SAAUhG,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM2E,EAAW,SACjBhC,IAEmB,iBAAZrD,GAERqD,EAAOd,KAAK,SAAWvC,IAEnBA,EAAQiG,OACT5C,EAAOd,KAAK,SAAWxB,mBAAmBf,EAAQiG,QAGjDjG,EAAQkG,MACT7C,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQkG,OAGhDlG,EAAQmG,MACT9C,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQmG,OAGhDnG,EAAQuD,MACTF,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQuD,OAGhDvD,EAAQoG,WACT/C,EAAOd,KAAK,aAAexB,mBAAmBf,EAAQoG,YAGrDpG,EAAQyD,MACTJ,EAAOd,KAAK,QAAUvC,EAAQyD,MAG7BzD,EAAQwD,UACTH,EAAOd,KAAK,YAAcvC,EAAQwD,WAIpCH,EAAOD,OAAS,IACjB1C,GAAO,IAAM2C,EAAOK,KAAK,MAG5BvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK0G,QAAU,SAAUC,EAAQ/F,GAC9BJ,EAAS,MAAOkF,EAAW,UAAYiB,EAAQ,KAAM/F,IAMxDZ,KAAK4G,QAAU,SAAUJ,EAAMD,EAAM3F,GAClCJ,EAAS,MAAOkF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM3F,IAMvEZ,KAAK6G,aAAe,SAAUjG,GAC3BJ,EAAS,MAAOkF,EAAW,kBAAmB,KAAM,SAAUlD,EAAKsE,EAAOpE,GACvE,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAMkG,EAAM3D,IAAI,SAAUoD,GAC1B,MAAOA,GAAKR,IAAI1E,QAAQ,iBAAkB,MACzCqB,MAOV1C,KAAK+G,QAAU,SAAUxB,EAAK3E,GAC3BJ,EAAS,MAAOkF,EAAW,cAAgBH,EAAK,KAAM3E,EAAI,QAM7DZ,KAAKgH,UAAY,SAAU3B,EAAQE,EAAK3E,GACrCJ,EAAS,MAAOkF,EAAW,gBAAkBH,EAAK,KAAM3E,IAM3DZ,KAAKiH,OAAS,SAAU5B,EAAQ3E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MACbF,GAAS,MAAOkF,EAAW,aAAehF,GAAQ2E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU7C,EAAK0E,EAAaxE,GAC/B,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAMsG,EAAY3B,IAAK7C,KAJC8C,EAAKC,OAAO,SAAWJ,EAAQzE,IAWnEZ,KAAKmH,YAAc,SAAU5B,EAAK3E,GAC/BJ,EAAS,MAAOkF,EAAW,aAAeH,EAAK,KAAM3E,IAMxDZ,KAAKoH,QAAU,SAAUC,EAAMzG,GAC5BJ,EAAS,MAAOkF,EAAW,cAAgB2B,EAAM,KAAM,SAAU7E,EAAKC,EAAKC,GACxE,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI4E,KAAM3E,MAOzB1C,KAAKsH,SAAW,SAAUC,EAAS3G,GAE7B2G,EADsB,gBAAd,IAELA,QAASA,EACTC,SAAU,UAIVD,QAAStH,EAAUsH,GACnBC,SAAU,UAIhBhH,EAAS,OAAQkF,EAAW,aAAc6B,EAAS,SAAU/E,EAAKC,GAC/D,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI8C,QAOnBvF,KAAKoF,WAAa,SAAUqC,EAAU/G,EAAMgH,EAAM9G,GAC/C,GAAID,IACDgH,UAAWF,EACXJ,OAEM3G,KAAMA,EACNkH,KAAM,SACNjE,KAAM,OACN4B,IAAKmC,IAKdlH,GAAS,OAAQkF,EAAW,aAAc/E,EAAM,SAAU6B,EAAKC,GAC5D,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI8C,QAQnBvF,KAAK6H,SAAW,SAAUR,EAAMzG,GAC7BJ,EAAS,OAAQkF,EAAW,cACzB2B,KAAMA,GACN,SAAU7E,EAAKC,GACf,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI8C,QAQnBvF,KAAK8H,OAAS,SAAUC,EAAQV,EAAMW,EAASpH,GAC5C,GAAIiF,GAAO,GAAInG,GAAO4D,IAEtBuC,GAAKpB,KAAK,KAAM,SAAUjC,EAAKyF,GAC5B,GAAIzF,EAAK,MAAO5B,GAAG4B,EACnB,IAAI7B,IACDqH,QAASA,EACTE,QACGtC,KAAMvF,EAAQwF,KACdsC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT7G,GAAS,OAAQkF,EAAW,eAAgB/E,EAAM,SAAU6B,EAAKC,GAC9D,MAAID,GAAY5B,EAAG4B,IACnB8C,EAAYC,IAAM9C,EAAI8C,QACtB3E,GAAG,KAAM6B,EAAI8C,WAQtBvF,KAAKqI,WAAa,SAAU9B,EAAMuB,EAAQlH,GACvCJ,EAAS,QAASkF,EAAW,mBAAqBa,GAC/ChB,IAAKuC,GACLlH,IAMNZ,KAAKyE,KAAO,SAAU7D,GACnBJ,EAAS,MAAOkF,EAAU,KAAM9E,IAMnCZ,KAAKsI,aAAe,SAAU1H,EAAI2H,GAC/BA,EAAQA,GAAS,GACjB,IAAI/C,GAAOxF,IAEXQ,GAAS,MAAOkF,EAAW,sBAAuB,KAAM,SAAUlD,EAAK7B,EAAM+B,GAC1E,MAAIF,GAAY5B,EAAG4B,QAEA,MAAfE,EAAIP,OACLqG,WACG,WACGhD,EAAK8C,aAAa1H,EAAI2H,IAEzBA,GAGH3H,EAAG4B,EAAK7B,EAAM+B,OAQvB1C,KAAKyI,SAAW,SAAU1C,EAAKrF,EAAME,GAClCF,EAAOgI,UAAUhI,GACjBF,EAAS,MAAOkF,EAAW,aAAehF,EAAO,IAAMA,EAAO,KAC3DqF,IAAKA,GACLnF,IAMNZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQkF,EAAW,SAAU,KAAM9E,IAM/CZ,KAAK4I,UAAY,SAAUhI,GACxBJ,EAAS,MAAOkF,EAAW,SAAU,KAAM9E,IAM9CZ,KAAKqF,OAAS,SAAUwD,EAAWC,EAAWlI,GAClB,IAArB4C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C5C,EAAKkI,EACLA,EAAYD,EACZA,EAAY,UAGf7I,KAAKyF,OAAO,SAAWoD,EAAW,SAAUrG,EAAKuD,GAC9C,MAAIvD,IAAO5B,EAAWA,EAAG4B,OACzBgD,GAAKS,WACFF,IAAK,cAAgB+C,EACrBvD,IAAKQ,GACLnF,MAOTZ,KAAK+I,kBAAoB,SAAU1I,EAASO,GACzCJ,EAAS,OAAQkF,EAAW,SAAUrF,EAASO,IAMlDZ,KAAKgJ,UAAY,SAAUpI,GACxBJ,EAAS,MAAOkF,EAAW,SAAU,KAAM9E,IAM9CZ,KAAKiJ,QAAU,SAAUC,EAAItI,GAC1BJ,EAAS,MAAOkF,EAAW,UAAYwD,EAAI,KAAMtI,IAMpDZ,KAAKmJ,WAAa,SAAU9I,EAASO,GAClCJ,EAAS,OAAQkF,EAAW,SAAUrF,EAASO,IAMlDZ,KAAKoJ,SAAW,SAAUF,EAAI7I,EAASO,GACpCJ,EAAS,QAASkF,EAAW,UAAYwD,EAAI7I,EAASO,IAMzDZ,KAAKqJ,WAAa,SAAUH,EAAItI,GAC7BJ,EAAS,SAAUkF,EAAW,UAAYwD,EAAI,KAAMtI,IAMvDZ,KAAKsJ,KAAO,SAAUjE,EAAQ3E,EAAME,GACjCJ,EAAS,MAAOkF,EAAW,aAAegD,UAAUhI,IAAS2E,EAAS,QAAUA,EAAS,IACtF,KAAM,SAAU7C,EAAK+G,EAAK7G,GACvB,MAAIF,IAAqB,MAAdA,EAAIJ,MAAsBxB,EAAG,YAAa,KAAM,MAEvD4B,EAAY5B,EAAG4B,OACnB5B,GAAG,KAAM2I,EAAK7G,KACd,IAMT1C,KAAKwJ,OAAS,SAAUnE,EAAQ3E,EAAME,GACnC4E,EAAKyB,OAAO5B,EAAQ3E,EAAM,SAAU8B,EAAK+C,GACtC,MAAI/C,GAAY5B,EAAG4B,OACnBhC,GAAS,SAAUkF,EAAW,aAAehF,GAC1CsH,QAAStH,EAAO,cAChB6E,IAAKA,EACLF,OAAQA,GACRzE,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUpE,EAAQ3E,EAAMgJ,EAAS9I,GAC1CwE,EAAWC,EAAQ,SAAU7C,EAAKmH,GAC/BnE,EAAK4B,QAAQuC,EAAe,kBAAmB,SAAUnH,EAAK6E,GAE3DA,EAAKuC,QAAQ,SAAU7D,GAChBA,EAAIrF,OAASA,IAAMqF,EAAIrF,KAAOgJ,GAEjB,SAAb3D,EAAIpC,YAAwBoC,GAAIR,MAGvCC,EAAKqC,SAASR,EAAM,SAAU7E,EAAKqH,GAChCrE,EAAKsC,OAAO6B,EAAcE,EAAU,WAAanJ,EAAM,SAAU8B,EAAKsF,GACnEtC,EAAK6C,WAAWhD,EAAQyC,EAAQlH,YAU/CZ,KAAK8J,MAAQ,SAAUzE,EAAQ3E,EAAM6G,EAASS,EAAS3H,EAASO,GAC3C,mBAAPA,KACRA,EAAKP,EACLA,MAGHmF,EAAKyB,OAAO5B,EAAQqD,UAAUhI,GAAO,SAAU8B,EAAK+C,GACjD,GAAIwE,IACD/B,QAASA,EACTT,QAAmC,mBAAnBlH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUsH,GAAWA,EACxFlC,OAAQA,EACR2E,UAAW3J,GAAWA,EAAQ2J,UAAY3J,EAAQ2J,UAAYC,OAC9D/B,OAAQ7H,GAAWA,EAAQ6H,OAAS7H,EAAQ6H,OAAS+B,OAIlDzH,IAAqB,MAAdA,EAAIJ,QAAgB2H,EAAaxE,IAAMA,GACpD/E,EAAS,MAAOkF,EAAW,aAAegD,UAAUhI,GAAOqJ,EAAcnJ,MAY/EZ,KAAKkK,WAAa,SAAU7J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM2E,EAAW,WACjBhC,IAcJ,IAZIrD,EAAQkF,KACT7B,EAAOd,KAAK,OAASxB,mBAAmBf,EAAQkF,MAG/ClF,EAAQK,MACTgD,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQK,OAGhDL,EAAQ6H,QACTxE,EAAOd,KAAK,UAAYxB,mBAAmBf,EAAQ6H,SAGlD7H,EAAQgE,MAAO,CAChB,GAAIA,GAAQhE,EAAQgE,KAEhBA,GAAMC,cAAgB/C,OACvB8C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWxB,mBAAmBiD,IAG7C,GAAIhE,EAAQ8J,MAAO,CAChB,GAAIA,GAAQ9J,EAAQ8J,KAEhBA,GAAM7F,cAAgB/C,OACvB4I,EAAQA,EAAM5F,eAGjBb,EAAOd,KAAK,SAAWxB,mBAAmB+I,IAGzC9J,EAAQyD,MACTJ,EAAOd,KAAK,QAAUvC,EAAQyD,MAG7BzD,EAAQ+J,SACT1G,EAAOd,KAAK,YAAcvC,EAAQ+J,SAGjC1G,EAAOD,OAAS,IACjB1C,GAAO,IAAM2C,EAAOK,KAAK,MAG5BvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKqK,UAAY,SAASC,EAAOC,EAAY3J,GAC1CJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKwK,KAAO,SAASF,EAAOC,EAAY3J,GACrCJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKyK,OAAS,SAASH,EAAOC,EAAY3J,GACvCJ,EAAS,SAAU,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,KAO5ElB,EAAOgL,KAAO,SAAUrK,GACrB,GAAI6I,GAAK7I,EAAQ6I,GACbyB,EAAW,UAAYzB,CAK3BlJ,MAAKsJ,KAAO,SAAU1I,GACnBJ,EAAS,MAAOmK,EAAU,KAAM/J,IAenCZ,KAAK4K,OAAS,SAAUvK,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUmK,EAAU,KAAM/J,IAMtCZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQmK,EAAW,QAAS,KAAM/J,IAM9CZ,KAAK6K,OAAS,SAAUxK,EAASO,GAC9BJ,EAAS,QAASmK,EAAUtK,EAASO,IAMxCZ,KAAKwK,KAAO,SAAU5J,GACnBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,IAM7CZ,KAAKyK,OAAS,SAAU7J,GACrBJ,EAAS,SAAUmK,EAAW,QAAS,KAAM/J,IAMhDZ,KAAKqK,UAAY,SAAUzJ,GACxBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,KAOhDlB,EAAOoL,MAAQ,SAAUzK,GACtB,GAAIK,GAAO,UAAYL,EAAQwF,KAAO,IAAMxF,EAAQsF,KAAO,SAE3D3F,MAAK+K,KAAO,SAAU1K,EAASO,GAC5B,GAAIoK,KAEJ,KAAK,GAAIC,KAAO5K,GACTA,EAAQc,eAAe8J,IACxBD,EAAMpI,KAAKxB,mBAAmB6J,GAAO,IAAM7J,mBAAmBf,EAAQ4K,IAI5E5I,GAAiB3B,EAAO,IAAMsK,EAAMjH,KAAK,KAAMnD,IAGlDZ,KAAKkL,QAAU,SAAUC,EAAOD,EAAStK,GACtCJ,EAAS,OAAQ2K,EAAMC,cACpBC,KAAMH,GACNtK,KAOTlB,EAAO4L,OAAS,SAAUjL,GACvB,GAAIK,GAAO,WACPsK,EAAQ,MAAQ3K,EAAQ2K,KAE5BhL,MAAKuL,aAAe,SAAUlL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiBsK,EAAO3K,EAASO,IAG3DZ,KAAKwL,KAAO,SAAUnL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAASsK,EAAO3K,EAASO,IAGnDZ,KAAKyL,OAAS,SAAUpL,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAWsK,EAAO3K,EAASO,IAGrDZ,KAAK0L,MAAQ,SAAUrL,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAUsK,EAAO3K,EAASO,KAOvDlB,EAAOiM,UAAY,WAChB3L,KAAK4L,aAAe,SAAShL,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOmM,UAAY,SAAUhG,EAAMF,GAChC,MAAO,IAAIjG,GAAOoL,OACfjF,KAAMA,EACNF,KAAMA,KAIZjG,EAAOoM,QAAU,SAAUjG,EAAMF,GAC9B,MAAKA,GAKK,GAAIjG,GAAOyF,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIjG,GAAOyF,YACfW,SAAUD,KAUnBnG,EAAOqM,QAAU,WACd,MAAO,IAAIrM,GAAO4D,MAGrB5D,EAAOsM,QAAU,SAAU9C,GACxB,MAAO,IAAIxJ,GAAOgL,MACfxB,GAAIA,KAIVxJ,EAAOuM,UAAY,SAAUjB,GAC1B,MAAO,IAAItL,GAAO4L,QACfN,MAAOA,KAIbtL,EAAOkM,aAAe,WACnB,MAAO,IAAIlM,GAAOiM,WAGdjM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index 8b63c481..96d62e6e 100644 --- a/src/github.js +++ b/src/github.js @@ -114,16 +114,15 @@ results.push.apply(results, res); - var links = (xhr.getResponseHeader('link') || '').split(/\s*,\s*/g); - var next = null; - - links.forEach(function (link) { - next = /rel="next"/.test(link) ? link : next; - }); - - if (next) { - next = (/<(.*)>/.exec(next) || [])[1]; - } + var next = (xhr.getResponseHeader('link') || '') + .split(',') + .filter(function(link) { + return /rel="next"/.test(link); + }) + .map(function(link) { + return (/<(.*)>/.exec(link) || [])[1]; + }) + .pop(); if (!next) { cb(err, results, xhr); From 29b968a4621a51fa59b89ac936ad51c79ba9bba9 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 17:34:02 +0000 Subject: [PATCH 063/217] Make braces mandatory for if statements --- .jscsrc | 1 + dist/github.bundle.min.js.map | 2 +- dist/github.min.js.map | 2 +- src/github.js | 3 ++- test/test.repo.js | 2 -- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.jscsrc b/.jscsrc index a97a424e..c9ed804b 100644 --- a/.jscsrc +++ b/.jscsrc @@ -53,6 +53,7 @@ "do", "else", "for", + "if", "try", "while" ], diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 57aeee4a..e0dc51b1 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js.map b/dist/github.min.js.map index ebd09884..ac4c9366 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param))\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAAQ,cAAe,UAAW,OAAQ,SAAU,SAAUE,EAASC,EAAQC,EAAMC,GAClF,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAE9B,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpB,GAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAK,GAAIS,KAASP,GACXA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAKhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAuB,cAAIrB,EAAQ0B,MAC1C,SAAW1B,EAAQ0B,MACnB,SAAW9B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTO,KAAK,SAAUC,GACbrB,EACG,KACAqB,EAAStB,OAAQ,EACjBsB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVvB,EACG,KACAqB,EAAStB,OAAQ,EACjBsB,EAASC,SAGZtB,GACGF,KAAMA,EACNwB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB3C,EAAO2C,iBAAmB,SAA0B3B,EAAME,GAC9E,GAAI0B,OAEJ,QAAUC,KACP/B,EAAS,MAAOE,EAAM,KAAM,SAAU8B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO5B,GAAG4B,EAAK,KAAME,EAGlBD,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAAQJ,EAAIK,kBAAkB,SAAW,IACzCC,MAAM,KACNC,OAAO,SAASC,GACd,MAAO,aAAajC,KAAKiC,KAE3BC,IAAI,SAASD,GACX,OAAQ,SAASE,KAAKF,QAAa,KAErCG,KAECP,IAGFpC,EAAOoC,EACPP,KAHA3B,EAAG4B,EAAKF,EAASI,QA02B7B,OA91BAhD,GAAO4D,KAAO,WACXtD,KAAKuD,MAAQ,SAAUlD,EAASO,GACJ,IAArB4C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C5C,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN2C,IAEJA,GAAOd,KAAK,QAAUxB,mBAAmBf,EAAQsD,MAAQ,QACzDD,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQuD,MAAQ,YACzDF,EAAOd,KAAK,YAAcxB,mBAAmBf,EAAQwD,UAAY,QAE7DxD,EAAQyD,MACTJ,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQyD,OAGpD/C,GAAO,IAAM2C,EAAOK,KAAK,KAEzBvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKgE,KAAO,SAAUpD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKiE,MAAQ,SAAUrD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKkE,cAAgB,SAAU7D,EAASO,GACZ,IAArB4C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C5C,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN2C,IAUJ,IARIrD,EAAQ8D,KACTT,EAAOd,KAAK,YAGXvC,EAAQ+D,eACTV,EAAOd,KAAK,sBAGXvC,EAAQgE,MAAO,CAChB,GAAIA,GAAQhE,EAAQgE,KAEhBA,GAAMC,cAAgB/C,OACvB8C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWxB,mBAAmBiD,IAG7C,GAAIhE,EAAQmE,OAAQ,CACjB,GAAIA,GAASnE,EAAQmE,MAEjBA,GAAOF,cAAgB/C,OACxBiD,EAASA,EAAOD,eAGnBb,EAAOd,KAAK,UAAYxB,mBAAmBoD,IAG1CnE,EAAQyD,MACTJ,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQyD,OAGhDJ,EAAOD,OAAS,IACjB1C,GAAO,IAAM2C,EAAOK,KAAK,MAG5BvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKyE,KAAO,SAAU5C,EAAUjB,GAC7B,GAAI8D,GAAU7C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOkE,EAAS,KAAM9D,IAMlCZ,KAAK2E,UAAY,SAAU9C,EAAUjB,GAElCyB,EAAiB,UAAYR,EAAW,4CAA6CjB,IAMxFZ,KAAK4E,YAAc,SAAU/C,EAAUjB,GAEpCyB,EAAiB,UAAYR,EAAW,iCAAkCjB,IAM7EZ,KAAK6E,UAAY,SAAUhD,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK8E,SAAW,SAAUC,EAASnE,GAEhCyB,EAAiB,SAAW0C,EAAU,6DAA8DnE,IAMvGZ,KAAKgF,OAAS,SAAUnD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKiF,SAAW,SAAUpD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKkF,WAAa,SAAU7E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAOyF,WAAa,SAAU9E,GAsB3B,QAAS+E,GAAWC,EAAQzE,GACzB,MAAIyE,KAAWC,EAAYD,QAAUC,EAAYC,IACvC3E,EAAG,KAAM0E,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU7C,EAAK+C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB3E,EAAG4B,EAAK+C,KA7Bd,GAKIG,GALAC,EAAOtF,EAAQuF,KACfC,EAAOxF,EAAQwF,KACfC,EAAWzF,EAAQyF,SAEnBN,EAAOxF,IAIR0F,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRvF,MAAKyF,OAAS,SAAUM,EAAKnF,GAC1BJ,EAAS,MAAOkF,EAAW,aAAeK,EAAK,KAAM,SAAUvD,EAAKC,EAAKC,GACtE,MAAIF,GACM5B,EAAG4B,OAGb5B,GAAG,KAAM6B,EAAIuD,OAAOT,IAAK7C,MAY/B1C,KAAKiG,UAAY,SAAU5F,EAASO,GACjCJ,EAAS,OAAQkF,EAAW,YAAarF,EAASO,IASrDZ,KAAKkG,UAAY,SAAUH,EAAKnF,GAC7BJ,EAAS,SAAUkF,EAAW,aAAeK,EAAK1F,EAASO,IAM9DZ,KAAKkF,WAAa,SAAU7E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,IAM5CZ,KAAKmG,WAAa,SAAUvF,GACzBJ,EAAS,SAAUkF,EAAUrF,EAASO,IAMzCZ,KAAKoG,SAAW,SAAUxF,GACvBJ,EAAS,MAAOkF,EAAW,QAAS,KAAM9E,IAM7CZ,KAAKqG,UAAY,SAAUhG,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM2E,EAAW,SACjBhC,IAEmB,iBAAZrD,GAERqD,EAAOd,KAAK,SAAWvC,IAEnBA,EAAQiG,OACT5C,EAAOd,KAAK,SAAWxB,mBAAmBf,EAAQiG,QAGjDjG,EAAQkG,MACT7C,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQkG,OAGhDlG,EAAQmG,MACT9C,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQmG,OAGhDnG,EAAQuD,MACTF,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQuD,OAGhDvD,EAAQoG,WACT/C,EAAOd,KAAK,aAAexB,mBAAmBf,EAAQoG,YAGrDpG,EAAQyD,MACTJ,EAAOd,KAAK,QAAUvC,EAAQyD,MAG7BzD,EAAQwD,UACTH,EAAOd,KAAK,YAAcvC,EAAQwD,WAIpCH,EAAOD,OAAS,IACjB1C,GAAO,IAAM2C,EAAOK,KAAK,MAG5BvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK0G,QAAU,SAAUC,EAAQ/F,GAC9BJ,EAAS,MAAOkF,EAAW,UAAYiB,EAAQ,KAAM/F,IAMxDZ,KAAK4G,QAAU,SAAUJ,EAAMD,EAAM3F,GAClCJ,EAAS,MAAOkF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM3F,IAMvEZ,KAAK6G,aAAe,SAAUjG,GAC3BJ,EAAS,MAAOkF,EAAW,kBAAmB,KAAM,SAAUlD,EAAKsE,EAAOpE,GACvE,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAMkG,EAAM3D,IAAI,SAAUoD,GAC1B,MAAOA,GAAKR,IAAI1E,QAAQ,iBAAkB,MACzCqB,MAOV1C,KAAK+G,QAAU,SAAUxB,EAAK3E,GAC3BJ,EAAS,MAAOkF,EAAW,cAAgBH,EAAK,KAAM3E,EAAI,QAM7DZ,KAAKgH,UAAY,SAAU3B,EAAQE,EAAK3E,GACrCJ,EAAS,MAAOkF,EAAW,gBAAkBH,EAAK,KAAM3E,IAM3DZ,KAAKiH,OAAS,SAAU5B,EAAQ3E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MACbF,GAAS,MAAOkF,EAAW,aAAehF,GAAQ2E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU7C,EAAK0E,EAAaxE,GAC/B,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAMsG,EAAY3B,IAAK7C,KAJC8C,EAAKC,OAAO,SAAWJ,EAAQzE,IAWnEZ,KAAKmH,YAAc,SAAU5B,EAAK3E,GAC/BJ,EAAS,MAAOkF,EAAW,aAAeH,EAAK,KAAM3E,IAMxDZ,KAAKoH,QAAU,SAAUC,EAAMzG,GAC5BJ,EAAS,MAAOkF,EAAW,cAAgB2B,EAAM,KAAM,SAAU7E,EAAKC,EAAKC,GACxE,MAAIF,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI4E,KAAM3E,MAOzB1C,KAAKsH,SAAW,SAAUC,EAAS3G,GAE7B2G,EADsB,gBAAd,IAELA,QAASA,EACTC,SAAU,UAIVD,QAAStH,EAAUsH,GACnBC,SAAU,UAIhBhH,EAAS,OAAQkF,EAAW,aAAc6B,EAAS,SAAU/E,EAAKC,GAC/D,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI8C,QAOnBvF,KAAKoF,WAAa,SAAUqC,EAAU/G,EAAMgH,EAAM9G,GAC/C,GAAID,IACDgH,UAAWF,EACXJ,OAEM3G,KAAMA,EACNkH,KAAM,SACNjE,KAAM,OACN4B,IAAKmC,IAKdlH,GAAS,OAAQkF,EAAW,aAAc/E,EAAM,SAAU6B,EAAKC,GAC5D,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI8C,QAQnBvF,KAAK6H,SAAW,SAAUR,EAAMzG,GAC7BJ,EAAS,OAAQkF,EAAW,cACzB2B,KAAMA,GACN,SAAU7E,EAAKC,GACf,MAAID,GAAY5B,EAAG4B,OACnB5B,GAAG,KAAM6B,EAAI8C,QAQnBvF,KAAK8H,OAAS,SAAUC,EAAQV,EAAMW,EAASpH,GAC5C,GAAIiF,GAAO,GAAInG,GAAO4D,IAEtBuC,GAAKpB,KAAK,KAAM,SAAUjC,EAAKyF,GAC5B,GAAIzF,EAAK,MAAO5B,GAAG4B,EACnB,IAAI7B,IACDqH,QAASA,EACTE,QACGtC,KAAMvF,EAAQwF,KACdsC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT7G,GAAS,OAAQkF,EAAW,eAAgB/E,EAAM,SAAU6B,EAAKC,GAC9D,MAAID,GAAY5B,EAAG4B,IACnB8C,EAAYC,IAAM9C,EAAI8C,QACtB3E,GAAG,KAAM6B,EAAI8C,WAQtBvF,KAAKqI,WAAa,SAAU9B,EAAMuB,EAAQlH,GACvCJ,EAAS,QAASkF,EAAW,mBAAqBa,GAC/ChB,IAAKuC,GACLlH,IAMNZ,KAAKyE,KAAO,SAAU7D,GACnBJ,EAAS,MAAOkF,EAAU,KAAM9E,IAMnCZ,KAAKsI,aAAe,SAAU1H,EAAI2H,GAC/BA,EAAQA,GAAS,GACjB,IAAI/C,GAAOxF,IAEXQ,GAAS,MAAOkF,EAAW,sBAAuB,KAAM,SAAUlD,EAAK7B,EAAM+B,GAC1E,MAAIF,GAAY5B,EAAG4B,QAEA,MAAfE,EAAIP,OACLqG,WACG,WACGhD,EAAK8C,aAAa1H,EAAI2H,IAEzBA,GAGH3H,EAAG4B,EAAK7B,EAAM+B,OAQvB1C,KAAKyI,SAAW,SAAU1C,EAAKrF,EAAME,GAClCF,EAAOgI,UAAUhI,GACjBF,EAAS,MAAOkF,EAAW,aAAehF,EAAO,IAAMA,EAAO,KAC3DqF,IAAKA,GACLnF,IAMNZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQkF,EAAW,SAAU,KAAM9E,IAM/CZ,KAAK4I,UAAY,SAAUhI,GACxBJ,EAAS,MAAOkF,EAAW,SAAU,KAAM9E,IAM9CZ,KAAKqF,OAAS,SAAUwD,EAAWC,EAAWlI,GAClB,IAArB4C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C5C,EAAKkI,EACLA,EAAYD,EACZA,EAAY,UAGf7I,KAAKyF,OAAO,SAAWoD,EAAW,SAAUrG,EAAKuD,GAC9C,MAAIvD,IAAO5B,EAAWA,EAAG4B,OACzBgD,GAAKS,WACFF,IAAK,cAAgB+C,EACrBvD,IAAKQ,GACLnF,MAOTZ,KAAK+I,kBAAoB,SAAU1I,EAASO,GACzCJ,EAAS,OAAQkF,EAAW,SAAUrF,EAASO,IAMlDZ,KAAKgJ,UAAY,SAAUpI,GACxBJ,EAAS,MAAOkF,EAAW,SAAU,KAAM9E,IAM9CZ,KAAKiJ,QAAU,SAAUC,EAAItI,GAC1BJ,EAAS,MAAOkF,EAAW,UAAYwD,EAAI,KAAMtI,IAMpDZ,KAAKmJ,WAAa,SAAU9I,EAASO,GAClCJ,EAAS,OAAQkF,EAAW,SAAUrF,EAASO,IAMlDZ,KAAKoJ,SAAW,SAAUF,EAAI7I,EAASO,GACpCJ,EAAS,QAASkF,EAAW,UAAYwD,EAAI7I,EAASO,IAMzDZ,KAAKqJ,WAAa,SAAUH,EAAItI,GAC7BJ,EAAS,SAAUkF,EAAW,UAAYwD,EAAI,KAAMtI,IAMvDZ,KAAKsJ,KAAO,SAAUjE,EAAQ3E,EAAME,GACjCJ,EAAS,MAAOkF,EAAW,aAAegD,UAAUhI,IAAS2E,EAAS,QAAUA,EAAS,IACtF,KAAM,SAAU7C,EAAK+G,EAAK7G,GACvB,MAAIF,IAAqB,MAAdA,EAAIJ,MAAsBxB,EAAG,YAAa,KAAM,MAEvD4B,EAAY5B,EAAG4B,OACnB5B,GAAG,KAAM2I,EAAK7G,KACd,IAMT1C,KAAKwJ,OAAS,SAAUnE,EAAQ3E,EAAME,GACnC4E,EAAKyB,OAAO5B,EAAQ3E,EAAM,SAAU8B,EAAK+C,GACtC,MAAI/C,GAAY5B,EAAG4B,OACnBhC,GAAS,SAAUkF,EAAW,aAAehF,GAC1CsH,QAAStH,EAAO,cAChB6E,IAAKA,EACLF,OAAQA,GACRzE,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUpE,EAAQ3E,EAAMgJ,EAAS9I,GAC1CwE,EAAWC,EAAQ,SAAU7C,EAAKmH,GAC/BnE,EAAK4B,QAAQuC,EAAe,kBAAmB,SAAUnH,EAAK6E,GAE3DA,EAAKuC,QAAQ,SAAU7D,GAChBA,EAAIrF,OAASA,IAAMqF,EAAIrF,KAAOgJ,GAEjB,SAAb3D,EAAIpC,YAAwBoC,GAAIR,MAGvCC,EAAKqC,SAASR,EAAM,SAAU7E,EAAKqH,GAChCrE,EAAKsC,OAAO6B,EAAcE,EAAU,WAAanJ,EAAM,SAAU8B,EAAKsF,GACnEtC,EAAK6C,WAAWhD,EAAQyC,EAAQlH,YAU/CZ,KAAK8J,MAAQ,SAAUzE,EAAQ3E,EAAM6G,EAASS,EAAS3H,EAASO,GAC3C,mBAAPA,KACRA,EAAKP,EACLA,MAGHmF,EAAKyB,OAAO5B,EAAQqD,UAAUhI,GAAO,SAAU8B,EAAK+C,GACjD,GAAIwE,IACD/B,QAASA,EACTT,QAAmC,mBAAnBlH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUsH,GAAWA,EACxFlC,OAAQA,EACR2E,UAAW3J,GAAWA,EAAQ2J,UAAY3J,EAAQ2J,UAAYC,OAC9D/B,OAAQ7H,GAAWA,EAAQ6H,OAAS7H,EAAQ6H,OAAS+B,OAIlDzH,IAAqB,MAAdA,EAAIJ,QAAgB2H,EAAaxE,IAAMA,GACpD/E,EAAS,MAAOkF,EAAW,aAAegD,UAAUhI,GAAOqJ,EAAcnJ,MAY/EZ,KAAKkK,WAAa,SAAU7J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM2E,EAAW,WACjBhC,IAcJ,IAZIrD,EAAQkF,KACT7B,EAAOd,KAAK,OAASxB,mBAAmBf,EAAQkF,MAG/ClF,EAAQK,MACTgD,EAAOd,KAAK,QAAUxB,mBAAmBf,EAAQK,OAGhDL,EAAQ6H,QACTxE,EAAOd,KAAK,UAAYxB,mBAAmBf,EAAQ6H,SAGlD7H,EAAQgE,MAAO,CAChB,GAAIA,GAAQhE,EAAQgE,KAEhBA,GAAMC,cAAgB/C,OACvB8C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWxB,mBAAmBiD,IAG7C,GAAIhE,EAAQ8J,MAAO,CAChB,GAAIA,GAAQ9J,EAAQ8J,KAEhBA,GAAM7F,cAAgB/C,OACvB4I,EAAQA,EAAM5F,eAGjBb,EAAOd,KAAK,SAAWxB,mBAAmB+I,IAGzC9J,EAAQyD,MACTJ,EAAOd,KAAK,QAAUvC,EAAQyD,MAG7BzD,EAAQ+J,SACT1G,EAAOd,KAAK,YAAcvC,EAAQ+J,SAGjC1G,EAAOD,OAAS,IACjB1C,GAAO,IAAM2C,EAAOK,KAAK,MAG5BvD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKqK,UAAY,SAASC,EAAOC,EAAY3J,GAC1CJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKwK,KAAO,SAASF,EAAOC,EAAY3J,GACrCJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKyK,OAAS,SAASH,EAAOC,EAAY3J,GACvCJ,EAAS,SAAU,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,KAO5ElB,EAAOgL,KAAO,SAAUrK,GACrB,GAAI6I,GAAK7I,EAAQ6I,GACbyB,EAAW,UAAYzB,CAK3BlJ,MAAKsJ,KAAO,SAAU1I,GACnBJ,EAAS,MAAOmK,EAAU,KAAM/J,IAenCZ,KAAK4K,OAAS,SAAUvK,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUmK,EAAU,KAAM/J,IAMtCZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQmK,EAAW,QAAS,KAAM/J,IAM9CZ,KAAK6K,OAAS,SAAUxK,EAASO,GAC9BJ,EAAS,QAASmK,EAAUtK,EAASO,IAMxCZ,KAAKwK,KAAO,SAAU5J,GACnBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,IAM7CZ,KAAKyK,OAAS,SAAU7J,GACrBJ,EAAS,SAAUmK,EAAW,QAAS,KAAM/J,IAMhDZ,KAAKqK,UAAY,SAAUzJ,GACxBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,KAOhDlB,EAAOoL,MAAQ,SAAUzK,GACtB,GAAIK,GAAO,UAAYL,EAAQwF,KAAO,IAAMxF,EAAQsF,KAAO,SAE3D3F,MAAK+K,KAAO,SAAU1K,EAASO,GAC5B,GAAIoK,KAEJ,KAAK,GAAIC,KAAO5K,GACTA,EAAQc,eAAe8J,IACxBD,EAAMpI,KAAKxB,mBAAmB6J,GAAO,IAAM7J,mBAAmBf,EAAQ4K,IAI5E5I,GAAiB3B,EAAO,IAAMsK,EAAMjH,KAAK,KAAMnD,IAGlDZ,KAAKkL,QAAU,SAAUC,EAAOD,EAAStK,GACtCJ,EAAS,OAAQ2K,EAAMC,cACpBC,KAAMH,GACNtK,KAOTlB,EAAO4L,OAAS,SAAUjL,GACvB,GAAIK,GAAO,WACPsK,EAAQ,MAAQ3K,EAAQ2K,KAE5BhL,MAAKuL,aAAe,SAAUlL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiBsK,EAAO3K,EAASO,IAG3DZ,KAAKwL,KAAO,SAAUnL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAASsK,EAAO3K,EAASO,IAGnDZ,KAAKyL,OAAS,SAAUpL,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAWsK,EAAO3K,EAASO,IAGrDZ,KAAK0L,MAAQ,SAAUrL,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAUsK,EAAO3K,EAASO,KAOvDlB,EAAOiM,UAAY,WAChB3L,KAAK4L,aAAe,SAAShL,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOmM,UAAY,SAAUhG,EAAMF,GAChC,MAAO,IAAIjG,GAAOoL,OACfjF,KAAMA,EACNF,KAAMA,KAIZjG,EAAOoM,QAAU,SAAUjG,EAAMF,GAC9B,MAAKA,GAKK,GAAIjG,GAAOyF,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIjG,GAAOyF,YACfW,SAAUD,KAUnBnG,EAAOqM,QAAU,WACd,MAAO,IAAIrM,GAAO4D,MAGrB5D,EAAOsM,QAAU,SAAU9C,GACxB,MAAO,IAAIxJ,GAAOgL,MACfxB,GAAIA,KAIVxJ,EAAOuM,UAAY,SAAUjB,GAC1B,MAAO,IAAItL,GAAO4L,QACfN,MAAOA,KAIbtL,EAAOkM,aAAe,WACnB,MAAO,IAAIlM,GAAOiM,WAGdjM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index 96d62e6e..7cdfd226 100644 --- a/src/github.js +++ b/src/github.js @@ -50,8 +50,9 @@ if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { for (var param in data) { - if (data.hasOwnProperty(param)) + if (data.hasOwnProperty(param)) { url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); + } } } diff --git a/test/test.repo.js b/test/test.repo.js index 5c7ddf67..d349f733 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -449,7 +449,6 @@ describe('Creating new Github.Repository', function() { repo.write('master', 'TEST_unicode.md', '\u2014', 'Long dash unicode', function(err) { should.not.exist(err); - if (err) console.log(err); repo.read('master', 'TEST_unicode.md', function(err, obj) { should.not.exist(err); obj.should.equal('\u2014'); @@ -489,7 +488,6 @@ describe('Creating new Github.Repository', function() { repo.write('master', 'TEST_image.png', imageB64, 'Image test', { encode: false }, function(err) { - if (err) console.log(err); should.not.exist(err); done(); }); From f30dc066a9a79734ae806be2c63b1a825bf4a160 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 17:44:33 +0000 Subject: [PATCH 064/217] package.json: Added phantomjs as a dependency --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 44cbb36b..15501508 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "karma-phantomjs-launcher": "^0.2.3", "karma-sauce-launcher": "^0.3.0", "mocha": "^2.3.4", + "phantomjs": "^2.1.3", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" }, From 87bcd33f992f7fc8b7e7b54c87ba70d8909a365a Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 18:07:15 +0000 Subject: [PATCH 065/217] Removed redundant mocha.opts file --- test/mocha.opts | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test/mocha.opts diff --git a/test/mocha.opts b/test/mocha.opts deleted file mode 100644 index 90701180..00000000 --- a/test/mocha.opts +++ /dev/null @@ -1 +0,0 @@ ---timeout 10000 From adcfbdda4a640b7234b6e196d46023404528f106 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 18:13:08 +0000 Subject: [PATCH 066/217] repos: Return all repositories available Fixes gh-25 --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 2 +- test/test.user.js | 10 +++++----- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 2aab27a1..1afe1638 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),n("GET",r,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index e0dc51b1..788c72a6 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb); \r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb); \r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 8e6ed835..04ddb023 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/user/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),n("GET",o,null,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),n+="?"+o.join("&"),u(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index ac4c9366..46484271 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb); \r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index 7cdfd226..fdb8485d 100644 --- a/src/github.js +++ b/src/github.js @@ -160,7 +160,7 @@ url += '?' + params.join('&'); - _request('GET', url, null, cb); + _requestAllPages(url, cb); }; // List user organizations diff --git a/test/test.user.js b/test/test.user.js index 1205d9e6..dfa39e5c 100644 --- a/test/test.user.js +++ b/test/test.user.js @@ -15,8 +15,9 @@ describe('Github.User', function() { }); it('should get user.repos', function(done) { - user.repos(function(err) { + user.repos(function(err, repos) { should.not.exist(err); + repos.should.be.instanceof(Array); done(); }); }); @@ -25,14 +26,13 @@ describe('Github.User', function() { var options = { type: 'owner', sort: 'updated', - per_page: 10, // jscs:ignore - page: 1 + per_page: 90, // jscs:ignore + page: 10 }; user.repos(options, function(err, repos) { - repos.should.have.length(10); should.not.exist(err); - + repos.should.be.instanceof(Array); done(); }); }); From c374e085844841021a8c1612a9bb842c833c2f56 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 18:18:02 +0000 Subject: [PATCH 067/217] Increased timeout time for mocha --- karma.conf.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/karma.conf.js b/karma.conf.js index 6354e678..38997e2e 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -2,6 +2,8 @@ module.exports = function (config) { 'use strict'; var configuration = { + browserNoActivityTimeout: 30000, + client: { captureConsole: true, mocha: { From af1365f1219f525c50b23f8629bf977faec9b679 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 18:32:24 +0000 Subject: [PATCH 068/217] Added source file to lint task --- gulpfile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/gulpfile.js b/gulpfile.js index 20f1f133..cd693819 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -75,6 +75,7 @@ function runTests(singleRun, isCI, done) { gulp.task('lint', function() { return gulp.src([ path.join(__dirname, '/*.js'), + path.join(__dirname, '/src/*.js'), path.join(__dirname, '/test/*.js') ], { From c3adb2e8517abfa90759fbf3c52592b95df7e3a4 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 20 Feb 2016 18:32:37 +0000 Subject: [PATCH 069/217] Fixed code style issues --- dist/github.bundle.min.js.map | 2 +- dist/github.min.js.map | 2 +- src/github.js | 115 +++++++++++++++++++++++++--------- 3 files changed, 87 insertions(+), 32 deletions(-) diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 788c72a6..18d10c73 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb); \r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb); \r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) {\r\n return cb('not found', null, null);\r\n }\r\n\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) {\r\n return cb('not found', null, null);\r\n }\r\n\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 46484271..f6fdc94d 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n });\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) {\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for (var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers['Authorization'] = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb); \r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) return cb(err);\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') return that.getRef('heads/' + branch, cb);\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) return cb(err);\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) return cb(err);\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) return cb(err);\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) return cb(err);\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) return cb(err);\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) return cb(err);\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) return cb(err);\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) return cb('not found', null, null);\r\n\r\n if (err) return cb(err);\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) return cb(err);\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) ref.path = newPath;\r\n\r\n if (ref.type === 'tree') delete ref.sha;\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) writeOptions.sha = sha;\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb)\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n }\r\n\r\n return Github;\r\n };\r\n\r\n// Top Level API\r\n// -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) {\r\n return cb('not found', null, null);\r\n }\r\n\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index fdb8485d..afa0c978 100644 --- a/src/github.js +++ b/src/github.js @@ -14,15 +14,23 @@ (function (root, factory) { /* istanbul ignore next */ if (typeof define === 'function' && define.amd) { - define(['es6-promise', 'base-64', 'utf8', 'axios'], function (Promise, Base64, Utf8, axios) { - return (root.Github = factory(Promise, Base64, Utf8, axios)); - }); + define( + [ + 'es6-promise', + 'base-64', + 'utf8', + 'axios' + ], + function (Promise, Base64, Utf8, axios) { + return (root.Github = factory(Promise, Base64, Utf8, axios)); + } + ); } else if (typeof module === 'object' && module.exports) { module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios')); } else { root.Github = factory(root.Promise, root.base64, root.utf8, root.axios); } -}(this, function(Promise, Base64, Utf8, axios) { +}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line function b64encode(string) { return Base64.encode(Utf8.encode(string)); } @@ -49,7 +57,7 @@ url += ((/\?/).test(url) ? '&' : '?'); if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { - for (var param in data) { + for(var param in data) { if (data.hasOwnProperty(param)) { url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); } @@ -71,7 +79,7 @@ }; if ((options.token) || (options.username && options.password)) { - config.headers['Authorization'] = options.token ? + config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password); } @@ -160,7 +168,7 @@ url += '?' + params.join('&'); - _requestAllPages(url, cb); + _requestAllPages(url, cb); }; // List user organizations @@ -450,7 +458,10 @@ this.listBranches = function (cb) { _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) { - if (err) return cb(err); + if (err) { + return cb(err); + } + cb(null, heads.map(function (head) { return head.ref.replace(/^refs\/heads\//, ''); }), xhr); @@ -475,10 +486,16 @@ // ------- this.getSha = function (branch, path, cb) { - if (!path || path === '') return that.getRef('heads/' + branch, cb); + if (!path || path === '') { + return that.getRef('heads/' + branch, cb); + } + _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) { - if (err) return cb(err); + if (err) { + return cb(err); + } + cb(null, pathContent.sha, xhr); }); }; @@ -495,7 +512,10 @@ this.getTree = function (tree, cb) { _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) { - if (err) return cb(err); + if (err) { + return cb(err); + } + cb(null, res.tree, xhr); }); }; @@ -517,7 +537,10 @@ } _request('POST', repoPath + '/git/blobs', content, function (err, res) { - if (err) return cb(err); + if (err) { + return cb(err); + } + cb(null, res.sha); }); }; @@ -539,7 +562,10 @@ }; _request('POST', repoPath + '/git/trees', data, function (err, res) { - if (err) return cb(err); + if (err) { + return cb(err); + } + cb(null, res.sha); }); }; @@ -552,7 +578,10 @@ _request('POST', repoPath + '/git/trees', { tree: tree }, function (err, res) { - if (err) return cb(err); + if (err) { + return cb(err); + } + cb(null, res.sha); }); }; @@ -565,7 +594,10 @@ var user = new Github.User(); user.show(null, function (err, userData) { - if (err) return cb(err); + if (err) { + return cb(err); + } + var data = { message: message, author: { @@ -579,7 +611,10 @@ }; _request('POST', repoPath + '/git/commits', data, function (err, res) { - if (err) return cb(err); + if (err) { + return cb(err); + } + currentTree.sha = res.sha; // Update latest commit cb(null, res.sha); }); @@ -610,7 +645,9 @@ var that = this; _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) { - if (err) return cb(err); + if (err) { + return cb(err); + } if (xhr.status === 202) { setTimeout( @@ -660,7 +697,10 @@ } this.getRef('heads/' + oldBranch, function (err, ref) { - if (err && cb) return cb(err); + if (err && cb) { + return cb(err); + } + that.createRef({ ref: 'refs/heads/' + newBranch, sha: ref @@ -716,9 +756,14 @@ this.read = function (branch, path, cb) { _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, function (err, obj, xhr) { - if (err && err.error === 404) return cb('not found', null, null); + if (err && err.error === 404) { + return cb('not found', null, null); + } + + if (err) { + return cb(err); + } - if (err) return cb(err); cb(null, obj, xhr); }, true); }; @@ -728,7 +773,10 @@ this.remove = function (branch, path, cb) { that.getSha(branch, path, function (err, sha) { - if (err) return cb(err); + if (err) { + return cb(err); + } + _request('DELETE', repoPath + '/contents/' + path, { message: path + ' is removed', sha: sha, @@ -749,9 +797,13 @@ that.getTree(latestCommit + '?recursive=true', function (err, tree) { // Update Tree tree.forEach(function (ref) { - if (ref.path === path) ref.path = newPath; + if (ref.path === path) { + ref.path = newPath; + } - if (ref.type === 'tree') delete ref.sha; + if (ref.type === 'tree') { + delete ref.sha; + } }); that.postTree(tree, function (err, rootTree) { @@ -782,7 +834,10 @@ }; // If no error, we set the sha to overwrite an existing file - if (!(err && err.error !== 404)) writeOptions.sha = sha; + if (!(err && err.error !== 404)) { + writeOptions.sha = sha; + } + _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb); }); }; @@ -858,14 +913,14 @@ // -------- this.star = function(owner, repository, cb) { - _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb) + _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); }; // Unstar a repository. // -------- this.unstar = function(owner, repository, cb) { - _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb) + _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); }; }; @@ -951,7 +1006,7 @@ this.list = function (options, cb) { var query = []; - for (var key in options) { + for(var key in options) { if (options.hasOwnProperty(key)) { query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key])); } @@ -998,13 +1053,13 @@ this.getRateLimit = function(cb) { _request('GET', '/rate_limit', null, cb); }; - } + }; return Github; }; -// Top Level API -// ------- + // Top Level API + // ------- Github.getIssues = function (user, repo) { return new Github.Issue({ From 508e4fe2ae8eb323dcff410e41db2e7cc883bc51 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 00:26:10 +0000 Subject: [PATCH 070/217] karma.conf.js: Increased timeout for Mocha --- karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karma.conf.js b/karma.conf.js index 38997e2e..17cec5a6 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -7,7 +7,7 @@ module.exports = function (config) { client: { captureConsole: true, mocha: { - timeout: 10000, + timeout: 30000, ui: 'bdd' } }, From 60a34472d08b8fddbdf1f5e8398063a4f75e4d92 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 00:28:33 +0000 Subject: [PATCH 071/217] Pass the XHR object to the callback where missing --- dist/github.bundle.min.js | 2 +- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 37 ++++++++++++++--------------------- 5 files changed, 19 insertions(+), 26 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 1afe1638..3d337769 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,2 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n,null,s);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),r)})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e){return t?u(t):(f.sha=e.sha,void u(null,e.sha))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?o("not found",null,null):t?o(t):void o(null,e,n)},!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 18d10c73..7345ca2c 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) {\r\n return cb('not found', null, null);\r\n }\r\n\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) {\r\n return cb('not found', null, null);\r\n }\r\n\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 04ddb023..97751c48 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n,null,u);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),n+="?"+o.join("&"),u(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):void t(null,n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),o)})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n){return t?e(t):void e(null,n.sha)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e){return t?i(t):void i(null,e.sha)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n){return t?e(t):void e(null,n.sha)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e){return t?r(t):(l.sha=e.sha,void r(null,e.sha))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,function(t,e,n){return t&&404===t.error?s("not found",null,null):t?s(t):void s(null,e,n)},!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),n+="?"+o.join("&"),u(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,o))})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e,n){return t?r(t):(l.sha=e.sha,void r(null,e.sha,n))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,s,!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index f6fdc94d..0eb8b081 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","obj","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err, null, xhr);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n }), xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n cb(null, res.sha);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, function (err, obj, xhr) {\r\n if (err && err.error === 404) {\r\n return cb('not found', null, null);\r\n }\r\n\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, obj, xhr);\r\n }, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAEM,cACA,UACA,OACA,SAEH,SAAUE,EAASC,EAAQC,EAAMC,GAC9B,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAGjC,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpB,GAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAI,GAAIS,KAASP,GACVA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAKhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAQK,cAAgB1B,EAAQ2B,MACvC,SAAW3B,EAAQ2B,MACnB,SAAW/B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTQ,KAAK,SAAUC,GACbtB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVxB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,SAGZvB,GACGF,KAAMA,EACNyB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB5C,EAAO4C,iBAAmB,SAA0B5B,EAAME,GAC9E,GAAI2B,OAEJ,QAAUC,KACPhC,EAAS,MAAOE,EAAM,KAAM,SAAU+B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO7B,GAAG6B,EAGPC,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAAQJ,EAAIK,kBAAkB,SAAW,IACzCC,MAAM,KACNC,OAAO,SAASC,GACd,MAAO,aAAalC,KAAKkC,KAE3BC,IAAI,SAASD,GACX,OAAQ,SAASE,KAAKF,QAAa,KAErCG,KAECP,IAGFrC,EAAOqC,EACPP,KAHA5B,EAAG6B,EAAKF,EAASI,QAk5B7B,OAt4BAjD,GAAO6D,KAAO,WACXvD,KAAKwD,MAAQ,SAAUnD,EAASO,GACJ,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN4C,IAEJA,GAAOd,KAAK,QAAUzB,mBAAmBf,EAAQuD,MAAQ,QACzDD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,MAAQ,YACzDF,EAAOd,KAAK,YAAczB,mBAAmBf,EAAQyD,UAAY,QAE7DzD,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGpDhD,GAAO,IAAM4C,EAAOK,KAAK,KAEzB1B,EAAiBvB,EAAKH,IAMzBZ,KAAKiE,KAAO,SAAUrD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKkE,MAAQ,SAAUtD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKmE,cAAgB,SAAU9D,EAASO,GACZ,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN4C,IAUJ,IARItD,EAAQ+D,KACTT,EAAOd,KAAK,YAGXxC,EAAQgE,eACTV,EAAOd,KAAK,sBAGXxC,EAAQiE,MAAO,CAChB,GAAIA,GAAQjE,EAAQiE,KAEhBA,GAAMC,cAAgBhD,OACvB+C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmBkD,IAG7C,GAAIjE,EAAQoE,OAAQ,CACjB,GAAIA,GAASpE,EAAQoE,MAEjBA,GAAOF,cAAgBhD,OACxBkD,EAASA,EAAOD,eAGnBb,EAAOd,KAAK,UAAYzB,mBAAmBqD,IAG1CpE,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGhDJ,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK0E,KAAO,SAAU7C,EAAUjB,GAC7B,GAAI+D,GAAU9C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOmE,EAAS,KAAM/D,IAMlCZ,KAAK4E,UAAY,SAAU/C,EAAUjB,GAElC0B,EAAiB,UAAYT,EAAW,4CAA6CjB,IAMxFZ,KAAK6E,YAAc,SAAUhD,EAAUjB,GAEpC0B,EAAiB,UAAYT,EAAW,iCAAkCjB,IAM7EZ,KAAK8E,UAAY,SAAUjD,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK+E,SAAW,SAAUC,EAASpE,GAEhC0B,EAAiB,SAAW0C,EAAU,6DAA8DpE,IAMvGZ,KAAKiF,OAAS,SAAUpD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKkF,SAAW,SAAUrD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKmF,WAAa,SAAU9E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAO0F,WAAa,SAAU/E,GAsB3B,QAASgF,GAAWC,EAAQ1E,GACzB,MAAI0E,KAAWC,EAAYD,QAAUC,EAAYC,IACvC5E,EAAG,KAAM2E,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU7C,EAAK+C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB5E,EAAG6B,EAAK+C,KA7Bd,GAKIG,GALAC,EAAOvF,EAAQwF,KACfC,EAAOzF,EAAQyF,KACfC,EAAW1F,EAAQ0F,SAEnBN,EAAOzF,IAIR2F,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRxF,MAAK0F,OAAS,SAAUM,EAAKpF,GAC1BJ,EAAS,MAAOmF,EAAW,aAAeK,EAAK,KAAM,SAAUvD,EAAKC,EAAKC,GACtE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAIuD,OAAOT,IAAK7C,MAY/B3C,KAAKkG,UAAY,SAAU7F,EAASO,GACjCJ,EAAS,OAAQmF,EAAW,YAAatF,EAASO,IASrDZ,KAAKmG,UAAY,SAAUH,EAAKpF,GAC7BJ,EAAS,SAAUmF,EAAW,aAAeK,EAAK3F,EAASO,IAM9DZ,KAAKmF,WAAa,SAAU9E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,IAM5CZ,KAAKoG,WAAa,SAAUxF,GACzBJ,EAAS,SAAUmF,EAAUtF,EAASO,IAMzCZ,KAAKqG,SAAW,SAAUzF,GACvBJ,EAAS,MAAOmF,EAAW,QAAS,KAAM/E,IAM7CZ,KAAKsG,UAAY,SAAUjG,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,SACjBhC,IAEmB,iBAAZtD,GAERsD,EAAOd,KAAK,SAAWxC,IAEnBA,EAAQkG,OACT5C,EAAOd,KAAK,SAAWzB,mBAAmBf,EAAQkG,QAGjDlG,EAAQmG,MACT7C,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQmG,OAGhDnG,EAAQoG,MACT9C,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQoG,OAGhDpG,EAAQwD,MACTF,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGhDxD,EAAQqG,WACT/C,EAAOd,KAAK,aAAezB,mBAAmBf,EAAQqG,YAGrDrG,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUxC,EAAQ0D,MAG7B1D,EAAQyD,UACTH,EAAOd,KAAK,YAAcxC,EAAQyD,WAIpCH,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK2G,QAAU,SAAUC,EAAQhG,GAC9BJ,EAAS,MAAOmF,EAAW,UAAYiB,EAAQ,KAAMhG,IAMxDZ,KAAK6G,QAAU,SAAUJ,EAAMD,EAAM5F,GAClCJ,EAAS,MAAOmF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM5F,IAMvEZ,KAAK8G,aAAe,SAAUlG,GAC3BJ,EAAS,MAAOmF,EAAW,kBAAmB,KAAM,SAAUlD,EAAKsE,EAAOpE,GACvE,MAAIF,GACM7B,EAAG6B,IAGbsE,EAAQA,EAAM3D,IAAI,SAAUoD,GACzB,MAAOA,GAAKR,IAAI3E,QAAQ,iBAAkB,UAG7CT,GAAG,KAAMmG,EAAOpE,OAOtB3C,KAAKgH,QAAU,SAAUxB,EAAK5E,GAC3BJ,EAAS,MAAOmF,EAAW,cAAgBH,EAAK,KAAM5E,EAAI,QAM7DZ,KAAKiH,UAAY,SAAU3B,EAAQE,EAAK5E,GACrCJ,EAAS,MAAOmF,EAAW,gBAAkBH,EAAK,KAAM5E,IAM3DZ,KAAKkH,OAAS,SAAU5B,EAAQ5E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MAIbF,GAAS,MAAOmF,EAAW,aAAejF,GAAQ4E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU7C,EAAK0E,EAAaxE,GAC/B,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAMuG,EAAY3B,IAAK7C,KATtB8C,EAAKC,OAAO,SAAWJ,EAAQ1E,IAgB5CZ,KAAKoH,YAAc,SAAU5B,EAAK5E,GAC/BJ,EAAS,MAAOmF,EAAW,aAAeH,EAAK,KAAM5E,IAMxDZ,KAAKqH,QAAU,SAAUC,EAAM1G,GAC5BJ,EAAS,MAAOmF,EAAW,cAAgB2B,EAAM,KAAM,SAAU7E,EAAKC,EAAKC,GACxE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI4E,KAAM3E,MAOzB3C,KAAKuH,SAAW,SAAUC,EAAS5G,GAE7B4G,EADsB,gBAAd,IAELA,QAASA,EACTC,SAAU,UAIVD,QAASvH,EAAUuH,GACnBC,SAAU,UAIhBjH,EAAS,OAAQmF,EAAW,aAAc6B,EAAS,SAAU/E,EAAKC,EAAKC,GACpE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAOxB3C,KAAKqF,WAAa,SAAUqC,EAAUhH,EAAMiH,EAAM/G,GAC/C,GAAID,IACDiH,UAAWF,EACXJ,OAEM5G,KAAMA,EACNmH,KAAM,SACNjE,KAAM,OACN4B,IAAKmC,IAKdnH,GAAS,OAAQmF,EAAW,aAAchF,EAAM,SAAU8B,EAAKC,EAAKC,GACjE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK8H,SAAW,SAAUR,EAAM1G,GAC7BJ,EAAS,OAAQmF,EAAW,cACzB2B,KAAMA,GACN,SAAU7E,EAAKC,EAAKC,GACpB,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK+H,OAAS,SAAUC,EAAQV,EAAMW,EAASrH,GAC5C,GAAIkF,GAAO,GAAIpG,GAAO6D,IAEtBuC,GAAKpB,KAAK,KAAM,SAAUjC,EAAKyF,GAC5B,GAAIzF,EACD,MAAO7B,GAAG6B,EAGb,IAAI9B,IACDsH,QAASA,EACTE,QACGtC,KAAMxF,EAAQyF,KACdsC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT9G,GAAS,OAAQmF,EAAW,eAAgBhF,EAAM,SAAU8B,EAAKC,EAAKC,GACnE,MAAIF,GACM7B,EAAG6B,IAGb8C,EAAYC,IAAM9C,EAAI8C,QAEtB5E,GAAG,KAAM8B,EAAI8C,IAAK7C,SAQ3B3C,KAAKsI,WAAa,SAAU9B,EAAMuB,EAAQnH,GACvCJ,EAAS,QAASmF,EAAW,mBAAqBa,GAC/ChB,IAAKuC,GACLnH,IAMNZ,KAAK0E,KAAO,SAAU9D,GACnBJ,EAAS,MAAOmF,EAAU,KAAM/E,IAMnCZ,KAAKuI,aAAe,SAAU3H,EAAI4H,GAC/BA,EAAQA,GAAS,GACjB,IAAI/C,GAAOzF,IAEXQ,GAAS,MAAOmF,EAAW,sBAAuB,KAAM,SAAUlD,EAAK9B,EAAMgC,GAC1E,MAAIF,GACM7B,EAAG6B,QAGM,MAAfE,EAAIP,OACLqG,WACG,WACGhD,EAAK8C,aAAa3H,EAAI4H,IAEzBA,GAGH5H,EAAG6B,EAAK9B,EAAMgC,OAQvB3C,KAAK0I,SAAW,SAAU1C,EAAKtF,EAAME,GAClCF,EAAOiI,UAAUjI,GACjBF,EAAS,MAAOmF,EAAW,aAAejF,EAAO,IAAMA,EAAO,KAC3DsF,IAAKA,GACLpF,IAMNZ,KAAK4I,KAAO,SAAUhI,GACnBJ,EAAS,OAAQmF,EAAW,SAAU,KAAM/E,IAM/CZ,KAAK6I,UAAY,SAAUjI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKsF,OAAS,SAAUwD,EAAWC,EAAWnI,GAClB,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKmI,EACLA,EAAYD,EACZA,EAAY,UAGf9I,KAAK0F,OAAO,SAAWoD,EAAW,SAAUrG,EAAKuD,GAC9C,MAAIvD,IAAO7B,EACDA,EAAG6B,OAGbgD,GAAKS,WACFF,IAAK,cAAgB+C,EACrBvD,IAAKQ,GACLpF,MAOTZ,KAAKgJ,kBAAoB,SAAU3I,EAASO,GACzCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKiJ,UAAY,SAAUrI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKkJ,QAAU,SAAUC,EAAIvI,GAC1BJ,EAAS,MAAOmF,EAAW,UAAYwD,EAAI,KAAMvI,IAMpDZ,KAAKoJ,WAAa,SAAU/I,EAASO,GAClCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKqJ,SAAW,SAAUF,EAAI9I,EAASO,GACpCJ,EAAS,QAASmF,EAAW,UAAYwD,EAAI9I,EAASO,IAMzDZ,KAAKsJ,WAAa,SAAUH,EAAIvI,GAC7BJ,EAAS,SAAUmF,EAAW,UAAYwD,EAAI,KAAMvI,IAMvDZ,KAAKuJ,KAAO,SAAUjE,EAAQ5E,EAAME,GACjCJ,EAAS,MAAOmF,EAAW,aAAegD,UAAUjI,IAAS4E,EAAS,QAAUA,EAAS,IACtF,KAAM1E,GAAI,IAMhBZ,KAAKwJ,OAAS,SAAUlE,EAAQ5E,EAAME,GACnC6E,EAAKyB,OAAO5B,EAAQ5E,EAAM,SAAU+B,EAAK+C,GACtC,MAAI/C,GACM7B,EAAG6B,OAGbjC,GAAS,SAAUmF,EAAW,aAAejF,GAC1CuH,QAASvH,EAAO,cAChB8E,IAAKA,EACLF,OAAQA,GACR1E,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUnE,EAAQ5E,EAAMgJ,EAAS9I,GAC1CyE,EAAWC,EAAQ,SAAU7C,EAAKkH,GAC/BlE,EAAK4B,QAAQsC,EAAe,kBAAmB,SAAUlH,EAAK6E,GAE3DA,EAAKsC,QAAQ,SAAU5D,GAChBA,EAAItF,OAASA,IACdsF,EAAItF,KAAOgJ,GAGG,SAAb1D,EAAIpC,YACEoC,GAAIR,MAIjBC,EAAKqC,SAASR,EAAM,SAAU7E,EAAKoH,GAChCpE,EAAKsC,OAAO4B,EAAcE,EAAU,WAAanJ,EAAM,SAAU+B,EAAKsF,GACnEtC,EAAK6C,WAAWhD,EAAQyC,EAAQnH,YAU/CZ,KAAK8J,MAAQ,SAAUxE,EAAQ5E,EAAM8G,EAASS,EAAS5H,EAASO,GAC3C,mBAAPA,KACRA,EAAKP,EACLA,MAGHoF,EAAKyB,OAAO5B,EAAQqD,UAAUjI,GAAO,SAAU+B,EAAK+C,GACjD,GAAIuE,IACD9B,QAASA,EACTT,QAAmC,mBAAnBnH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUuH,GAAWA,EACxFlC,OAAQA,EACR0E,UAAW3J,GAAWA,EAAQ2J,UAAY3J,EAAQ2J,UAAYC,OAC9D9B,OAAQ9H,GAAWA,EAAQ8H,OAAS9H,EAAQ8H,OAAS8B,OAIlDxH,IAAqB,MAAdA,EAAIJ,QACd0H,EAAavE,IAAMA,GAGtBhF,EAAS,MAAOmF,EAAW,aAAegD,UAAUjI,GAAOqJ,EAAcnJ,MAY/EZ,KAAKkK,WAAa,SAAU7J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,WACjBhC,IAcJ,IAZItD,EAAQmF,KACT7B,EAAOd,KAAK,OAASzB,mBAAmBf,EAAQmF,MAG/CnF,EAAQK,MACTiD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQK,OAGhDL,EAAQ8H,QACTxE,EAAOd,KAAK,UAAYzB,mBAAmBf,EAAQ8H,SAGlD9H,EAAQiE,MAAO,CAChB,GAAIA,GAAQjE,EAAQiE,KAEhBA,GAAMC,cAAgBhD,OACvB+C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmBkD,IAG7C,GAAIjE,EAAQ8J,MAAO,CAChB,GAAIA,GAAQ9J,EAAQ8J,KAEhBA,GAAM5F,cAAgBhD,OACvB4I,EAAQA,EAAM3F,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmB+I,IAGzC9J,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUxC,EAAQ0D,MAG7B1D,EAAQ+J,SACTzG,EAAOd,KAAK,YAAcxC,EAAQ+J,SAGjCzG,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKqK,UAAY,SAASC,EAAOC,EAAY3J,GAC1CJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKwK,KAAO,SAASF,EAAOC,EAAY3J,GACrCJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKyK,OAAS,SAASH,EAAOC,EAAY3J,GACvCJ,EAAS,SAAU,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,KAO5ElB,EAAOgL,KAAO,SAAUrK,GACrB,GAAI8I,GAAK9I,EAAQ8I,GACbwB,EAAW,UAAYxB,CAK3BnJ,MAAKuJ,KAAO,SAAU3I,GACnBJ,EAAS,MAAOmK,EAAU,KAAM/J,IAenCZ,KAAK4K,OAAS,SAAUvK,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUmK,EAAU,KAAM/J,IAMtCZ,KAAK4I,KAAO,SAAUhI,GACnBJ,EAAS,OAAQmK,EAAW,QAAS,KAAM/J,IAM9CZ,KAAK6K,OAAS,SAAUxK,EAASO,GAC9BJ,EAAS,QAASmK,EAAUtK,EAASO,IAMxCZ,KAAKwK,KAAO,SAAU5J,GACnBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,IAM7CZ,KAAKyK,OAAS,SAAU7J,GACrBJ,EAAS,SAAUmK,EAAW,QAAS,KAAM/J,IAMhDZ,KAAKqK,UAAY,SAAUzJ,GACxBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,KAOhDlB,EAAOoL,MAAQ,SAAUzK,GACtB,GAAIK,GAAO,UAAYL,EAAQyF,KAAO,IAAMzF,EAAQuF,KAAO,SAE3D5F,MAAK+K,KAAO,SAAU1K,EAASO,GAC5B,GAAIoK,KAEJ,KAAI,GAAIC,KAAO5K,GACRA,EAAQc,eAAe8J,IACxBD,EAAMnI,KAAKzB,mBAAmB6J,GAAO,IAAM7J,mBAAmBf,EAAQ4K,IAI5E3I,GAAiB5B,EAAO,IAAMsK,EAAMhH,KAAK,KAAMpD,IAGlDZ,KAAKkL,QAAU,SAAUC,EAAOD,EAAStK,GACtCJ,EAAS,OAAQ2K,EAAMC,cACpBC,KAAMH,GACNtK,KAOTlB,EAAO4L,OAAS,SAAUjL,GACvB,GAAIK,GAAO,WACPsK,EAAQ,MAAQ3K,EAAQ2K,KAE5BhL,MAAKuL,aAAe,SAAUlL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiBsK,EAAO3K,EAASO,IAG3DZ,KAAKwL,KAAO,SAAUnL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAASsK,EAAO3K,EAASO,IAGnDZ,KAAKyL,OAAS,SAAUpL,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAWsK,EAAO3K,EAASO,IAGrDZ,KAAK0L,MAAQ,SAAUrL,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAUsK,EAAO3K,EAASO,KAOvDlB,EAAOiM,UAAY,WAChB3L,KAAK4L,aAAe,SAAShL,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOmM,UAAY,SAAU/F,EAAMF,GAChC,MAAO,IAAIlG,GAAOoL,OACfhF,KAAMA,EACNF,KAAMA,KAIZlG,EAAOoM,QAAU,SAAUhG,EAAMF,GAC9B,MAAKA,GAKK,GAAIlG,GAAO0F,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIlG,GAAO0F,YACfW,SAAUD,KAUnBpG,EAAOqM,QAAU,WACd,MAAO,IAAIrM,GAAO6D,MAGrB7D,EAAOsM,QAAU,SAAU7C,GACxB,MAAO,IAAIzJ,GAAOgL,MACfvB,GAAIA,KAIVzJ,EAAOuM,UAAY,SAAUjB,GAC1B,MAAO,IAAItL,GAAO4L,QACfN,MAAOA,KAIbtL,EAAOkM,aAAe,WACnB,MAAO,IAAIlM,GAAOiM,WAGdjM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index afa0c978..0573f026 100644 --- a/src/github.js +++ b/src/github.js @@ -114,7 +114,7 @@ (function iterate() { _request('GET', path, null, function (err, res, xhr) { if (err) { - return cb(err, null, xhr); + return cb(err); } if (!(res instanceof Array)) { @@ -462,9 +462,11 @@ return cb(err); } - cb(null, heads.map(function (head) { + heads = heads.map(function (head) { return head.ref.replace(/^refs\/heads\//, ''); - }), xhr); + }); + + cb(null, heads, xhr); }); }; @@ -536,12 +538,12 @@ }; } - _request('POST', repoPath + '/git/blobs', content, function (err, res) { + _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) { if (err) { return cb(err); } - cb(null, res.sha); + cb(null, res.sha, xhr); }); }; @@ -561,12 +563,12 @@ ] }; - _request('POST', repoPath + '/git/trees', data, function (err, res) { + _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) { if (err) { return cb(err); } - cb(null, res.sha); + cb(null, res.sha, xhr); }); }; @@ -577,12 +579,12 @@ this.postTree = function (tree, cb) { _request('POST', repoPath + '/git/trees', { tree: tree - }, function (err, res) { + }, function (err, res, xhr) { if (err) { return cb(err); } - cb(null, res.sha); + cb(null, res.sha, xhr); }); }; @@ -610,13 +612,14 @@ tree: tree }; - _request('POST', repoPath + '/git/commits', data, function (err, res) { + _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) { if (err) { return cb(err); } currentTree.sha = res.sha; // Update latest commit - cb(null, res.sha); + + cb(null, res.sha, xhr); }); }); }; @@ -755,17 +758,7 @@ this.read = function (branch, path, cb) { _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), - null, function (err, obj, xhr) { - if (err && err.error === 404) { - return cb('not found', null, null); - } - - if (err) { - return cb(err); - } - - cb(null, obj, xhr); - }, true); + null, cb, true); }; // Remove a file From 83450c8f22294a24f872331f66a6c09ac40eccfd Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 00:29:01 +0000 Subject: [PATCH 072/217] Updated tests to verify the presence of the XHR object --- test/test.gist.js | 13 ++-- test/test.issue.js | 8 ++- test/test.rate-limit.js | 4 +- test/test.repo.js | 147 ++++++++++++++++++++++++++++------------ test/test.search.js | 16 +++-- test/test.user.js | 56 +++++++++++---- 6 files changed, 174 insertions(+), 70 deletions(-) diff --git a/test/test.gist.js b/test/test.gist.js index 54843392..a20f6724 100644 --- a/test/test.gist.js +++ b/test/test.gist.js @@ -18,8 +18,9 @@ describe('Github.Gist', function() { }); it('should read gist', function(done) { - gist.read(function(err, res) { + gist.read(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.should.have.property('description', 'This is a test gist'); res.files['README.md'].should.have.property('content', 'Hello World'); @@ -28,8 +29,9 @@ describe('Github.Gist', function() { }); it('should star', function(done) { - gist.star(function(err) { + gist.star(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); gist.isStarred(function(err) { should.not.exist(err); @@ -58,11 +60,13 @@ describe('Creating new Github.Gist', function() { } }; - gist.create(gistData, function(err, res) { + gist.create(gistData, function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.should.have.property('description', gistData.description); res.should.have.property('public', gistData.public); res.should.have.property('id').to.be.a('string'); + done(); }); }); @@ -90,8 +94,9 @@ describe('deleting a Github.Gist', function() { }); it('should delete gist', function(done) { - gist.delete(function(err) { + gist.delete(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); done(); }); diff --git a/test/test.issue.js b/test/test.issue.js index f3d6ceae..1c2cf070 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -16,18 +16,22 @@ describe('Github.Issue', function() { }); it('should list issues', function(done) { - issues.list({}, function(err, issues) { + issues.list({}, function(err, issues, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); issues.should.have.length.above(0); + done(); }); }); it('should post issue comment', function(done) { issues.list({}, function(err, issuesList) { - issues.comment(issuesList[0], 'Comment test', function(err, res) { + issues.comment(issuesList[0], 'Comment test', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.body.should.equal('Comment test'); + done(); }); }); diff --git a/test/test.rate-limit.js b/test/test.rate-limit.js index 0f751a41..ec4d0083 100644 --- a/test/test.rate-limit.js +++ b/test/test.rate-limit.js @@ -16,14 +16,16 @@ describe('Github.RateLimit', function() { }); it('should get rate limit', function(done) { - rateLimit.getRateLimit(function(err, rateInfo) { + rateLimit.getRateLimit(function(err, rateInfo, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); rateInfo.should.be.an('object'); rateInfo.should.have.deep.property('rate.limit'); rateInfo.rate.limit.should.be.a('number'); rateInfo.should.have.deep.property('rate.remaining'); rateInfo.rate.remaining.should.be.a('number'); rateInfo.rate.remaining.should.be.at.most(rateInfo.rate.limit); + done(); }); }); diff --git a/test/test.repo.js b/test/test.repo.js index d349f733..bb405cdc 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -49,18 +49,20 @@ describe('Github.Repository', function() { }); it('should show repo', function(done) { - repo.show(function(err, res) { + repo.show(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.full_name.should.equal('michael/github'); // jscs:ignore + done(); }); }); it('should get blob', function(done) { repo.getSha('master', 'README.md', function(err, sha) { - repo.getBlob(sha, function(err, content) { + repo.getBlob(sha, function(err, content, xhr) { should.not.exist(err); - + xhr.should.be.instanceof(XMLHttpRequest); content.indexOf('# Github.js').should.be.above(-1); done(); @@ -69,8 +71,9 @@ describe('Github.Repository', function() { }); it('should show repo contents', function(done) { - repo.contents('master', '', function(err, contents) { + repo.contents('master', '', function(err, contents, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); contents.should.be.instanceof(Array); var readme = contents.filter(function(content) { @@ -85,9 +88,9 @@ describe('Github.Repository', function() { }); it('should get tree', function(done) { - repo.getTree('master', function(err, tree) { + repo.getTree('master', function(err, tree, xhr) { should.not.exist(err); - + xhr.should.be.instanceof(XMLHttpRequest); tree.should.be.instanceof(Array); tree.should.have.length.above(0); @@ -96,8 +99,9 @@ describe('Github.Repository', function() { }); it('should fork repo', function(done) { - repo.fork(function(err) { + repo.fork(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion. done(); @@ -105,8 +109,9 @@ describe('Github.Repository', function() { }); it('should list forks of repo', function(done) { - repo.listForks(function(err) { + repo.listForks(function(err, forks, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion. done(); @@ -114,8 +119,9 @@ describe('Github.Repository', function() { }); it('should list commits with no options', function(done) { - repo.getCommits(null, function(err, commits) { + repo.getCommits(null, function(err, commits, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); commits.should.be.instanceof(Array); commits.should.have.length.above(0); commits[0].should.have.property('commit'); @@ -136,8 +142,9 @@ describe('Github.Repository', function() { until: untilDate }; - repo.getCommits(options, function(err, commits) { + repo.getCommits(options, function(err, commits, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); commits.should.be.instanceof(Array); commits.should.have.length.above(0); commits[0].should.have.property('commit'); @@ -149,13 +156,15 @@ describe('Github.Repository', function() { }); it('should show repo contributors', function(done) { - repo.contributors(function(err, res) { + repo.contributors(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.should.be.instanceof(Array); res.should.have.length.above(1); should.exist(res[0].author); should.exist(res[0].total); should.exist(res[0].weeks); + done(); }); }); @@ -163,41 +172,53 @@ describe('Github.Repository', function() { // @TODO repo.branch, repo.pull it('should list repo branches', function(done) { - repo.listBranches(function(err) { + repo.listBranches(function(err, branches, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should read repo', function(done) { - repo.read('master', 'README.md', function(err, res) { + repo.read('master', 'README.md', function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.indexOf('# Github.js').should.be.above(-1); + done(); }); }); it('should get commit from repo', function(done) { - repo.getCommit('master', '20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, commit) { + repo.getCommit('master', '20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, commit, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); commit.message.should.equal('v0.10.4'); commit.author.date.should.equal('2015-03-20T17:01:42Z'); + done(); }); }); it('should get statuses for a SHA from a repo', function(done) { - repo.getStatuses('20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, statuses) { + repo.getStatuses('20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, statuses, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); statuses.length.should.equal(6); statuses.every(function(status) { return status.url === 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; }).should.equal(true); + done(); }); }); it('should get a SHA from a repo', function(done) { - repo.getSha('master', '.gitignore', function(err) { + repo.getSha('master', '.gitignore', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -205,9 +226,11 @@ describe('Github.Repository', function() { it('should get a repo by fullname', function(done) { var repo2 = github.getRepo('michael/github'); - repo2.show(function(err, res) { + repo2.show(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.full_name.should.equal('michael/github'); // jscs:ignore + done(); }); }); @@ -215,6 +238,8 @@ describe('Github.Repository', function() { it('should check if the repo is starred', function(done) { repo.isStarred('michael', 'github', function(err) { err.error.should.equal(404); + err.request.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -237,9 +262,11 @@ describe('Creating new Github.Repository', function() { it('should create repo', function(done) { user.createRepo({ name: repoTest - }, function(err, res) { + }, function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.name.should.equal(repoTest.toString()); + done(); }); }); @@ -262,8 +289,9 @@ describe('Creating new Github.Repository', function() { should.not.exist(err); repo.write('dev', 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function(err) { should.not.exist(err); - repo.read('dev', 'TEST.md', function(err, res) { + repo.read('dev', 'TEST.md', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.should.equal('THIS IS AN UPDATED TEST'); done(); @@ -275,9 +303,9 @@ describe('Creating new Github.Repository', function() { it('should compare two branches', function(done) { repo.branch('master', 'compare', function() { repo.write('compare', 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function() { - repo.compare('master', 'compare', function(err, diff) { + repo.compare('master', 'compare', function(err, diff, xhr) { should.not.exist(err); - + xhr.should.be.instanceof(XMLHttpRequest); diff.should.have.property('total_commits', 1); diff.should.have.deep.property('files[0].filename', 'TEST.md'); @@ -302,9 +330,9 @@ describe('Creating new Github.Repository', function() { base: baseBranch, head: headBranch }, - function(err, pullRequest) { + function(err, pullRequest, xhr) { should.not.exist(err); - + xhr.should.be.instanceof(XMLHttpRequest); pullRequest.should.have.property('number').above(0); pullRequest.should.have.property('title', pullRequestTitle); pullRequest.should.have.property('body', pullRequestBody); @@ -317,8 +345,9 @@ describe('Creating new Github.Repository', function() { }); it('should get ref from repo', function(done) { - repo.getRef('heads/master', function(err) { + repo.getRef('heads/master', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion done(); @@ -331,8 +360,9 @@ describe('Creating new Github.Repository', function() { ref: 'refs/heads/new-test-branch', sha: sha }; - repo.createRef(refSpec, function(err) { + repo.createRef(refSpec, function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion done(); @@ -341,8 +371,9 @@ describe('Creating new Github.Repository', function() { }); it('should delete ref on repo', function(done) { - repo.deleteRef('heads/new-test-branch', function(err) { + repo.deleteRef('heads/new-test-branch', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion done(); @@ -350,8 +381,9 @@ describe('Creating new Github.Repository', function() { }); it('should list tags on repo', function(done) { - repo.listTags(function(err) { + repo.listTags(function(err, tags, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion done(); @@ -368,13 +400,15 @@ describe('Creating new Github.Repository', function() { per_page: 10 }; - repo.listPulls(options, function(err, pull_list) { + repo.listPulls(options, function(err, pullRequests, xhr) { should.not.exist(err); - pull_list.should.be.instanceof(Array); - pull_list.should.have.length(10); - should.exist(pull_list[0].title); - should.exist(pull_list[0].body); - should.exist(pull_list[0].url); + xhr.should.be.instanceof(XMLHttpRequest); + pullRequests.should.be.instanceof(Array); + pullRequests.should.have.length(10); + should.exist(pullRequests[0].title); + should.exist(pullRequests[0].body); + should.exist(pullRequests[0].url); + done(); }); }); @@ -382,8 +416,9 @@ describe('Creating new Github.Repository', function() { it('should get pull requests on repo', function(done) { var repo = github.getRepo('michael', 'github'); - repo.getPull(153, function(err) { + repo.getPull(153, function(err, pullRequest, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion done(); @@ -394,8 +429,10 @@ describe('Creating new Github.Repository', function() { repo.write('master', 'REMOVE-TEST.md', 'THIS IS A TEST', 'Remove test', function(err) { should.not.exist(err); - repo.remove('master', 'REMOVE-TEST.md', function(err) { + repo.remove('master', 'REMOVE-TEST.md', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -405,8 +442,10 @@ describe('Creating new Github.Repository', function() { repo.write('master', 'REMOVE-TEST.md', 'THIS IS A TEST', 'Remove test', function(err) { should.not.exist(err); - repo.delete('master', 'REMOVE-TEST.md', function(err) { + repo.delete('master', 'REMOVE-TEST.md', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -424,8 +463,9 @@ describe('Creating new Github.Repository', function() { repo.write('dev', 'TEST.md', 'THIS IS A TEST BY AUTHOR AND COMMITTER', 'Updating', options, function(err, res) { should.not.exist(err); - repo.getCommit('dev', res.commit.sha, function(err, commit) { + repo.getCommit('dev', res.commit.sha, function(err, commit, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); commit.author.name.should.equal('Author Name'); commit.author.email.should.equal('author@example.com'); commit.committer.name.should.equal('Committer Name'); @@ -437,8 +477,9 @@ describe('Creating new Github.Repository', function() { }); it('should be able to write CJK unicode to repo', function(done) { - repo.write('master', '中文测试.md', 'THIS IS A TEST', 'Creating test', function(err) { + repo.write('master', '中文测试.md', 'THIS IS A TEST', 'Creating test', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); // @TODO write better assertion done(); @@ -449,8 +490,9 @@ describe('Creating new Github.Repository', function() { repo.write('master', 'TEST_unicode.md', '\u2014', 'Long dash unicode', function(err) { should.not.exist(err); - repo.read('master', 'TEST_unicode.md', function(err, obj) { + repo.read('master', 'TEST_unicode.md', function(err, obj, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); obj.should.equal('\u2014'); done(); @@ -476,7 +518,9 @@ describe('Creating new Github.Repository', function() { // https://api.github.com/repos/michael/cmake_cdt7_stalled/git/refs/heads/prose-integration repo.deleteRef('heads/testing-14', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); xhr.status.should.equal(204); + done(); }); }); @@ -487,40 +531,49 @@ describe('Creating new Github.Repository', function() { it('should be able to write an image to the repo', function(done) { repo.write('master', 'TEST_image.png', imageB64, 'Image test', { encode: false - }, function(err) { + }, function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should be able to write a blob to the repo', function(done) { - repo.postBlob('String test', function(err) { // Test strings + repo.postBlob('String test', function(err, res, xhr) { // Test strings should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); - repo.postBlob(imageBlob, function(err) { // Test non-strings + repo.postBlob(imageBlob, function(err, res, xhr) { // Test non-strings should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); }); it('should star the repo', function(done) { - repo.star(testUser.USERNAME, repoTest, function(err) { + repo.star(testUser.USERNAME, repoTest, function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); repo.isStarred(testUser.USERNAME, repoTest, function(err) { should.not.exist(err); + done(); }); }); }); it('should unstar the repo', function(done) { - repo.unstar(testUser.USERNAME, repoTest, function(err) { + repo.unstar(testUser.USERNAME, repoTest, function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); repo.isStarred(testUser.USERNAME, repoTest, function(err) { err.error.should.equal(404); + done(); }); }); @@ -538,9 +591,11 @@ describe('deleting a Github.Repository', function() { }); it('should delete the repo', function(done) { - repo.deleteRepo(function(err, res) { + repo.deleteRepo(function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.should.be.true; // jshint ignore:line + done(); }); }); @@ -560,7 +615,9 @@ describe('Repo returns commit errors correctly', function() { repo.commit('broken-parent-hash', 'broken-tree-hash', 'commit message', function(err) { should.exist(err); should.exist(err.request); + err.request.should.be.instanceof(XMLHttpRequest); err.error.should.equal(422); + done(); }); }); diff --git a/test/test.search.js b/test/test.search.js index fe6868eb..f6bb51fa 100644 --- a/test/test.search.js +++ b/test/test.search.js @@ -17,8 +17,10 @@ describe('Github.Search', function() { var search = github.getSearch('tetris+language:assembly&sort=stars&order=desc'); var options = null; - search.repositories(options, function (err) { + search.repositories(options, function (err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -27,8 +29,10 @@ describe('Github.Search', function() { var search = github.getSearch('addClass+in:file+language:js+repo:jquery/jquery'); var options = null; - search.code(options, function (err) { + search.code(options, function (err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -37,8 +41,10 @@ describe('Github.Search', function() { var search = github.getSearch('windows+label:bug+language:python+state:open&sort=created&order=asc'); var options = null; - search.issues(options, function (err) { + search.issues(options, function (err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -47,8 +53,10 @@ describe('Github.Search', function() { var search = github.getSearch('tom+repos:%3E42+followers:%3E1000'); var options = null; - search.users(options, function (err) { + search.users(options, function (err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); diff --git a/test/test.user.js b/test/test.user.js index dfa39e5c..2752f34d 100644 --- a/test/test.user.js +++ b/test/test.user.js @@ -15,9 +15,11 @@ describe('Github.User', function() { }); it('should get user.repos', function(done) { - user.repos(function(err, repos) { + user.repos(function(err, repos, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); repos.should.be.instanceof(Array); + done(); }); }); @@ -30,30 +32,38 @@ describe('Github.User', function() { page: 10 }; - user.repos(options, function(err, repos) { + user.repos(options, function(err, repos, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); repos.should.be.instanceof(Array); + done(); }); }); it('should get user.orgs', function(done) { - user.orgs(function(err) { + user.orgs(function(err, orgs, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should get user.gists', function(done) { - user.gists(function(err) { + user.gists(function(err, gists, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should get user.notifications', function(done) { - user.notifications(function(err) { + user.notifications(function(err, notifications, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -66,58 +76,74 @@ describe('Github.User', function() { before: '2015-02-01T00:00:00Z' }; - user.notifications(options, function(err) { + user.notifications(options, function(err, notifications, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should show user', function(done) { - user.show('ingalls', function(err) { + user.show('ingalls', function(err, info, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should show user\'s repos', function(done) { // This is odd; userRepos times out on the test user, but user.repos does not. - user.userRepos('aendrew', function(err) { + user.userRepos('aendrew', function(err, repos, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should show user\'s starred repos', function(done) { - user.userStarred(testUser.USERNAME, function(err) { + user.userStarred(testUser.USERNAME, function(err, repos, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should show user\'s gists', function(done) { - user.userGists(testUser.USERNAME, function(err) { + user.userGists(testUser.USERNAME, function(err, gists, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should show user\'s organisation repos', function(done) { - user.orgRepos('openaddresses', function(err) { + user.orgRepos('openaddresses', function(err, repos, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should follow user', function(done) { - user.follow('ingalls', function(err) { + user.follow('ingalls', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); it('should unfollow user', function(done) { - user.unfollow('ingalls', function(err) { + user.unfollow('ingalls', function(err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); }); }); @@ -133,9 +159,11 @@ describe('Github.User', function() { user.createRepo({ name: repoTest - }, function (err, res) { + }, function (err, res, xhr) { should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); res.name.should.equal(repoTest.toString()); + done(); }); }); From 2373a36cc26e6cfe7fd9e8e2cdc00894cb8d3ac2 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 01:03:05 +0000 Subject: [PATCH 073/217] userRepos: Added possibility to specify options --- README.md | 8 +++++--- dist/github.bundle.min.js | 3 ++- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 23 ++++++++++++++++++++--- test/test.user.js | 19 ++++++++++++++++++- 7 files changed, 48 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 5af7fce7..b6f0e11d 100644 --- a/README.md +++ b/README.md @@ -263,7 +263,8 @@ repo.unstar(owner, repository, function(err) {}); var user = github.getUser(); ``` -List repositories of the authenticated user, including private repositories and repositories in which the user is a collaborator and not an owner. +List repositories of the authenticated user, including private repositories and repositories in which the user is a +collaborator and not an owner. ```js user.repos(options, function(err, repos) {}); @@ -287,7 +288,8 @@ List unread notifications for the authenticated user. user.notifications(options, function(err, notifications) {}); ``` -Show user information for a particular username. Also works for organizations. Pass in a falsy value (null, '', etc) for 'username' to retrieve user information for the currently authorized user. +Show user information for a particular username. Also works for organizations. Pass in a falsy value (null, '', etc) +for 'username' to retrieve user information for the currently authorized user. ```js user.show(username, function(err, user) {}); @@ -296,7 +298,7 @@ user.show(username, function(err, user) {}); List public repositories for a particular user. ```js -user.userRepos(username, function(err, repos) {}); +user.userRepos(username, options, function(err, repos) {}); ``` List starred repositories for a particular user. diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 3d337769..ea3777aa 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,2 +1,3 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),O(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(O,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(O,t)}function O(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&B(),this instanceof F?D(this,t):H())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new I,ct=new I,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e){s("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function _(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function R(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?R(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?_(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),I(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(I,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(I,e)}function I(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&B(),this instanceof F?D(this,e):H())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new O,ce=new O,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var R in E)_.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{ +axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 7345ca2c..86fbfcfd 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,OAAAV,MAAA,WAAA,GAAAG,EAAA,OAAA,SAAAQ,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,EAAAD,GCAAC,EAAAD,QAAAkB,EAAA,iBCEGQ,cAAc,IAAIC,GAAG,SAAST,EAAQjB,EAAOD,GCFhD,YAEA,IAAA4B,GAAAV,EAAA,cACAW,EAAAX,EAAA,yBACAY,EAAAZ,EAAA,6BACAa,EAAAb,EAAA,8BACAc,EAAAd,EAAA,gCACAe,EAAA5B,OAAA4B,MAAAf,EAAA,oBAEAjB,GAAAD,QAAA,SAAAkC,EAAAC,EAAAC,GACA,GAAAC,GAAAD,EAAAE,KACAC,EAAAH,EAAAI,OAEAZ,GAAAa,WAAAJ,UACAE,GAAA,eAGA,IAAAG,GAAA,GAAAC,eASA,KALAtC,OAAAuC,gBAAA,mBAAAF,IAAAV,EAAAI,EAAAS,OACAH,EAAA,GAAArC,QAAAuC,gBAIAR,EAAAU,KAAA,CACA,GAAAC,GAAAX,EAAAU,KAAAC,UAAA,GACAC,EAAAZ,EAAAU,KAAAE,UAAA,EACAT,GAAAU,cAAA,SAAAhB,EAAAc,EAAA,IAAAC,GAqDA,GAlDAN,EAAAQ,KAAAd,EAAAe,OAAAC,cAAAvB,EAAAO,EAAAS,IAAAT,EAAAiB,OAAAjB,EAAAkB,mBAAA,GAGAZ,EAAAa,QAAAnB,EAAAmB,QAGAb,EAAAc,OAAA,WACA,GAAAd,EAAA,CAIA,GAAAe,GAAA,yBAAAf,GAAAZ,EAAAY,EAAAgB,yBAAA,KACAC,EAAA,MAAA,OAAA,IAAAC,QAAAxB,EAAAyB,cAAA,IAAAnB,EAAAoB,aAAApB,EAAAqB,SACAA,GACAzB,KAAAP,EACA4B,EACAF,EACArB,EAAA4B,mBAGAC,OAAA,OAAAvB,EAAAuB,OAAA,IAAAvB,EAAAuB,OACAC,WAAA,OAAAxB,EAAAuB,OAAA,aAAAvB,EAAAwB,WACA1B,QAAAiB,EACArB,OAAAA,EACAM,QAAAA,IAIAqB,EAAAE,QAAA,KAAAF,EAAAE,OAAA,OACA,UAAAvB,KAAAqB,EAAAD,aACA5B,EACAC,GAAA4B,GAGArB,EAAA,OAIAA,EAAAyB,QAAA,WAGAhC,EAAA,GAAAf,OAAA,kBAGAsB,EAAA,MAMAd,EAAAwC,uBAAA,CACA,GAAAC,GAAAnD,EAAA,wBAGAoD,EAAAlC,EAAAmC,iBAAAvC,EAAAI,EAAAS,KACAwB,EAAAG,KAAApC,EAAAqC,gBACAC,MAEAJ,KACA/B,EAAAH,EAAAuC,gBAAAL,GAuBA,GAlBA,oBAAA5B,IACAd,EAAAgD,QAAArC,EAAA,SAAAsC,EAAAC,GACA,mBAAAzC,IAAA,iBAAAyC,EAAAC,oBAEAxC,GAAAuC,GAGApC,EAAAsC,iBAAAF,EAAAD,KAMAzC,EAAAmC,kBACA7B,EAAA6B,iBAAA,GAIAnC,EAAAyB,aACA,IACAnB,EAAAmB,aAAAzB,EAAAyB,aACA,MAAAnD,GACA,GAAA,SAAAgC,EAAAmB,aACA,KAAAnD,GAKAkB,EAAAqD,cAAA5C,KACAA,EAAA,GAAA6C,UAAA7C,IAIAK,EAAAyC,KAAA9C,MDMG+C,oBAAoB,EAAEC,wBAAwB,EAAEC,uBAAuB,GAAGC,+BAA+B,GAAGC,4BAA4B,GAAGC,6BAA6B,GAAGC,aAAa,KAAKC,GAAG,SAASzE,EAAQjB,EAAOD,GEvI3N,YAWA,SAAA4F,GAAAC,GACArF,KAAAsF,SAAAlE,EAAAmE,SAAAF,GACArF,KAAAwF,cACAtD,QAAA,GAAAuD,GACAlC,SAAA,GAAAkC,IAbA,GAAAH,GAAA5E,EAAA,cACAU,EAAAV,EAAA,WACAgF,EAAAhF,EAAA,0BACA+E,EAAA/E,EAAA,6BACAiF,EAAAjF,EAAA,2BACAkF,EAAAlF,EAAA,yBACAmF,EAAAnF,EAAA,kBACAa,EAAAb,EAAA,0BAUA0E,GAAAU,UAAA5D,QAAA,SAAAN,GAGA,gBAAAA,KACAA,EAAAR,EAAAmE,OACAlD,IAAA0D,UAAA,IACAA,UAAA,KAGAnE,EAAAR,EAAAmE,MAAAD,EAAAtF,KAAAsF,UAAA3C,OAAA,OAAAf,GAGAA,EAAAoE,UAAAL,EAAA/D,EAAAS,OACAT,EAAAS,IAAAuD,EAAAhE,EAAAoE,QAAApE,EAAAS,MAIAT,EAAAmC,gBAAAnC,EAAAmC,iBAAA/D,KAAAsF,SAAAvB,gBAGAnC,EAAAE,KAAAP,EACAK,EAAAE,KACAF,EAAAI,QACAJ,EAAAqE,kBAIArE,EAAAI,QAAAZ,EAAAmE,MACA3D,EAAAI,QAAAkE,WACAtE,EAAAI,QAAAJ,EAAAe,YACAf,EAAAI,aAGAZ,EAAAgD,SACA,SAAA,MAAA,OAAA,OAAA,MAAA,QAAA,UACA,SAAAzB,SACAf,GAAAI,QAAAW,IAKA,IAAAwD,IAAAT,EAAAxB,QACAkC,EAAAC,QAAA3E,QAAAE,EAUA,KARA5B,KAAAwF,aAAAtD,QAAAkC,QAAA,SAAAkC,GACAH,EAAAI,QAAAD,EAAAE,UAAAF,EAAAG,YAGAzG,KAAAwF,aAAAjC,SAAAa,QAAA,SAAAkC,GACAH,EAAAO,KAAAJ,EAAAE,UAAAF,EAAAG,YAGAN,EAAAnF,QACAoF,EAAAA,EAAAO,KAAAR,EAAAS,QAAAT,EAAAS,QAGA,OAAAR,GAGA,IAAAS,GAAA,GAAAzB,GAAAE,GACAwB,EAAArH,EAAAD,QAAAqG,EAAAT,EAAAU,UAAA5D,QAAA2E,EAEAC,GAAAC,OAAA,SAAA1B,GACA,MAAA,IAAAD,GAAAC,IAIAyB,EAAAxB,SAAAuB,EAAAvB,SAGAwB,EAAAE,IAAA,SAAAC,GACA,MAAAZ,SAAAW,IAAAC,IAEAH,EAAAI,OAAAxG,EAAA,oBAGAoG,EAAAtB,aAAAqB,EAAArB,aAGApE,EAAAgD,SAAA,SAAA,MAAA,QAAA,SAAAzB,GAEAyC,EAAAU,UAAAnD,GAAA,SAAAN,EAAAT,GACA,MAAA5B,MAAAkC,QAAAd,EAAAmE,MAAA3D,OACAe,OAAAA,EACAN,IAAAA,MAGAyE,EAAAnE,GAAAkD,EAAAT,EAAAU,UAAAnD,GAAAkE,KAGAzF,EAAAgD,SAAA,OAAA,MAAA,SAAA,SAAAzB,GAEAyC,EAAAU,UAAAnD,GAAA,SAAAN,EAAAP,EAAAF,GACA,MAAA5B,MAAAkC,QAAAd,EAAAmE,MAAA3D,OACAe,OAAAA,EACAN,IAAAA,EACAP,KAAAA,MAGAgF,EAAAnE,GAAAkD,EAAAT,EAAAU,UAAAnD,GAAAkE,OF2IGM,4BAA4B,EAAEC,yBAAyB,EAAEC,aAAa,EAAEC,iBAAiB,EAAEC,wBAAwB,GAAGC,0BAA0B,GAAGC,mBAAmB,GAAGC,0BAA0B,GAAGC,UAAU,KAAKC,GAAG,SAASlH,EAAQjB,EAAOD,GGjQnP,YAIA,SAAAiG,KACAzF,KAAA6H,YAHA,GAAAzG,GAAAV,EAAA,aAcA+E,GAAAK,UAAAgC,IAAA,SAAAtB,EAAAC,GAKA,MAJAzG,MAAA6H,SAAAnB,MACAF,UAAAA,EACAC,SAAAA,IAEAzG,KAAA6H,SAAA7G,OAAA,GAQAyE,EAAAK,UAAAiC,MAAA,SAAAC,GACAhI,KAAA6H,SAAAG,KACAhI,KAAA6H,SAAAG,GAAA,OAYAvC,EAAAK,UAAA1B,QAAA,SAAA6D,GACA7G,EAAAgD,QAAApE,KAAA6H,SAAA,SAAAK,GACA,OAAAA,GACAD,EAAAC,MAKAzI,EAAAD,QAAAiG,IHoQGP,aAAa,KAAKiD,GAAG,SAASzH,EAAQjB,EAAOD,IAChD,SAAW4I,GIxTX,YASA3I,GAAAD,QAAA,SAAAoC,GACA,MAAA,IAAAyE,SAAA,SAAA3E,EAAAC,GACA,IACA,GAAA0G,EAEA,mBAAAzG,GAAAyG,QAEAA,EAAAzG,EAAAyG,QACA,mBAAAlG,gBAEAkG,EAAA3H,EAAA,mBACA,mBAAA0H,KAEAC,EAAA3H,EAAA,qBAGA,kBAAA2H,IACAA,EAAA3G,EAAAC,EAAAC,GAEA,MAAA1B,GACAyB,EAAAzB,SJ+TGa,KAAKf,KAAKU,EAAQ,eAElB4H,mBAAmB,EAAEC,kBAAkB,EAAEC,SAAW,KAAKC,GAAG,SAAS/H,EAAQjB,EAAOD,GK9VvF,YAEA,IAAA4B,GAAAV,EAAA,WAEAgI,EAAA,eACAC,GACAC,eAAA,oCAGAnJ,GAAAD,SACAyG,kBAAA,SAAAnE,EAAAE,GACA,MAAAZ,GAAAa,WAAAH,GACAA,EAEAV,EAAAqD,cAAA3C,GACAA,EAEAV,EAAAyH,kBAAA/G,GACAA,EAAAgH,QAEA1H,EAAA2H,SAAAjH,IAAAV,EAAA4H,OAAAlH,IAAAV,EAAA6H,OAAAnH,GAeAA,GAbAV,EAAA8H,YAAAlH,KACAZ,EAAAgD,QAAApC,EAAA,SAAAqC,EAAAC,GACA,iBAAAA,EAAAC,gBACAvC,EAAA,gBAAAqC,KAIAjD,EAAA8H,YAAAlH,EAAA,mBACAA,EAAA,gBAAA,mCAGAmH,KAAAC,UAAAtH,MAKA0B,mBAAA,SAAA1B,GAEA,GAAA,gBAAAA,GAAA,CACAA,EAAAA,EAAAuH,QAAAX,EAAA,GACA,KACA5G,EAAAqH,KAAAG,MAAAxH,GACA,MAAA5B,KAEA,MAAA4B,KAGAE,SACAkE,QACAqD,OAAA,qCAEAC,MAAApI,EAAAmE,MAAAoD,GACAc,KAAArI,EAAAmE,MAAAoD,GACAe,IAAAtI,EAAAmE,MAAAoD,IAGA5F,QAAA,EAEAkB,eAAA,aACAE,eAAA,kBLkWGwD,UAAU,KAAKgC,GAAG,SAASjJ,EAAQjB,EAAOD,GM/Z7C,YAEAC,GAAAD,QAAA,SAAAyI,EAAA2B,GACA,MAAA,YAEA,IAAA,GADAC,GAAA,GAAAC,OAAA/D,UAAA/E,QACAL,EAAA,EAAAA,EAAAkJ,EAAA7I,OAAAL,IACAkJ,EAAAlJ,GAAAoF,UAAApF,EAEA,OAAAsH,GAAA8B,MAAAH,EAAAC,UNoaMG,GAAG,SAAStJ,EAAQjB,EAAOD,GO5ajC,YAMA,SAAAyK,GAAAC,GACAlK,KAAAkK,QAAAA,EAMA,QAAAzI,GAAA0I,GAGA,IAEA,GAAAC,GAAAC,EAJAC,EAAAC,OAAAJ,GACAK,EAAA,GAGAC,EAAA,EAAAC,EAAAC,EAIAL,EAAAM,OAAA,EAAAH,KAAAC,EAAA,IAAAD,EAAA,GAEAD,GAAAE,EAAAE,OAAA,GAAAR,GAAA,EAAAK,EAAA,EAAA,GACA,CAEA,GADAJ,EAAAC,EAAAO,WAAAJ,GAAA,KACAJ,EAAA,IACA,KAAA,IAAAJ,GAAA,yCAEAG,GAAAA,GAAA,EAAAC,EAEA,MAAAG,GA5BA,GAAAG,GAAA,mEAKAV,GAAAnE,UAAA,GAAAlF,OACAqJ,EAAAnE,UAAAjF,KAAA,EACAoJ,EAAAnE,UAAAgF,KAAA,wBAwBArL,EAAAD,QAAAiC,OP+aMsJ,GAAG,SAASrK,EAAQjB,EAAOD,GQldjC,YAIA,SAAAwL,GAAA3G,GACA,MAAA4G,oBAAA5G,GACAgF,QAAA,QAAA,KACAA,QAAA,QAAA,KACAA,QAAA,OAAA,KACAA,QAAA,QAAA,KACAA,QAAA,OAAA,KACAA,QAAA,QAAA,KACAA,QAAA,QAAA,KAVA,GAAAjI,GAAAV,EAAA,aAoBAjB,GAAAD,QAAA,SAAA6C,EAAAQ,EAAAC,GAEA,IAAAD,EACA,MAAAR,EAGA,IAAA6I,EACA,IAAApI,EACAoI,EAAApI,EAAAD,OACA,CACA,GAAAsI,KAEA/J,GAAAgD,QAAAvB,EAAA,SAAAwB,EAAAC,GACA,OAAAD,GAAA,mBAAAA,KAIAjD,EAAAgK,QAAA/G,KACAC,GAAA,MAGAlD,EAAAgK,QAAA/G,KACAA,GAAAA,IAGAjD,EAAAgD,QAAAC,EAAA,SAAAgH,GACAjK,EAAAkK,OAAAD,GACAA,EAAAA,EAAAE,cACAnK,EAAA2H,SAAAsC,KACAA,EAAAlC,KAAAC,UAAAiC,IAEAF,EAAAzE,KAAAsE,EAAA1G,GAAA,IAAA0G,EAAAK,SAIAH,EAAAC,EAAAK,KAAA,KAOA,MAJAN,KACA7I,IAAA,KAAAA,EAAAe,QAAA,KAAA,IAAA,KAAA8H,GAGA7I,KRudG6C,aAAa,KAAKuG,IAAI,SAAS/K,EAAQjB,EAAOD,GSvhBjD,YASAC,GAAAD,QAAA,SAAAwG,EAAA0F,GACA,MAAA1F,GAAAqD,QAAA,OAAA,IAAA,IAAAqC,EAAArC,QAAA,OAAA,UT2hBMsC,IAAI,SAASjL,EAAQjB,EAAOD,GUriBlC,YAEA,IAAA4B,GAAAV,EAAA,aAEAjB,GAAAD,QACA4B,EAAAwC,uBAGA,WACA,OACAgI,MAAA,SAAAd,EAAAe,EAAAC,EAAAC,EAAAC,EAAAC,GACA,GAAAC,KACAA,GAAAxF,KAAAoE,EAAA,IAAAG,mBAAAY,IAEAzK,EAAA+K,SAAAL,IACAI,EAAAxF,KAAA,WAAA,GAAA0F,MAAAN,GAAAO,eAGAjL,EAAAkL,SAAAP,IACAG,EAAAxF,KAAA,QAAAqF,GAGA3K,EAAAkL,SAAAN,IACAE,EAAAxF,KAAA,UAAAsF,GAGAC,KAAA,GACAC,EAAAxF,KAAA,UAGA6F,SAAAL,OAAAA,EAAAV,KAAA,OAGAxH,KAAA,SAAA8G,GACA,GAAA0B,GAAAD,SAAAL,OAAAM,MAAA,GAAAC,QAAA,aAAA3B,EAAA,aACA,OAAA0B,GAAAE,mBAAAF,EAAA,IAAA,MAGAG,OAAA,SAAA7B,GACA9K,KAAA4L,MAAAd,EAAA,GAAAsB,KAAAQ,MAAA,YAMA,WACA,OACAhB,MAAA,aACA5H,KAAA,WAAA,MAAA,OACA2I,OAAA,mBV2iBGzH,aAAa,KAAK2H,IAAI,SAASnM,EAAQjB,EAAOD,GW5lBjD,YAQAC,GAAAD,QAAA,SAAA6C,GAIA,MAAA,gCAAAyK,KAAAzK,SXgmBM0K,IAAI,SAASrM,EAAQjB,EAAOD,GY5mBlC,YAEA,IAAA4B,GAAAV,EAAA,aAEAjB,GAAAD,QACA4B,EAAAwC,uBAIA,WAWA,QAAAoJ,GAAA3K,GACA,GAAA4K,GAAA5K,CAWA,OATA6K,KAEAC,EAAAC,aAAA,OAAAH,GACAA,EAAAE,EAAAF,MAGAE,EAAAC,aAAA,OAAAH,IAIAA,KAAAE,EAAAF,KACAI,SAAAF,EAAAE,SAAAF,EAAAE,SAAAhE,QAAA,KAAA,IAAA,GACAiE,KAAAH,EAAAG,KACAC,OAAAJ,EAAAI,OAAAJ,EAAAI,OAAAlE,QAAA,MAAA,IAAA,GACAmE,KAAAL,EAAAK,KAAAL,EAAAK,KAAAnE,QAAA,KAAA,IAAA,GACAoE,SAAAN,EAAAM,SACAC,KAAAP,EAAAO,KACAC,SAAA,MAAAR,EAAAQ,SAAA/C,OAAA,GACAuC,EAAAQ,SACA,IAAAR,EAAAQ,UAhCA,GAEAC,GAFAV,EAAA,kBAAAJ,KAAAe,UAAAC,WACAX,EAAAZ,SAAAwB,cAAA,IA2CA,OARAH,GAAAZ,EAAAnN,OAAAmO,SAAAf,MAQA,SAAAgB,GACA,GAAAC,GAAA9M,EAAAkL,SAAA2B,GAAAjB,EAAAiB,GAAAA,CACA,OAAAC,GAAAb,WAAAO,EAAAP,UACAa,EAAAZ,OAAAM,EAAAN,SAKA,WACA,MAAA,YACA,OAAA,QZknBGpI,aAAa,KAAKiJ,IAAI,SAASzN,EAAQjB,EAAOD,GalrBjD,YAEA,IAAA4B,GAAAV,EAAA,aAeAjB,GAAAD,QAAA,SAAAwC,GACA,GACAsC,GACAD,EACA1D,EAHAuN,IAKA,OAAAlM,IAEAZ,EAAAgD,QAAApC,EAAAoM,MAAA,MAAA,SAAAC,GACA1N,EAAA0N,EAAAjL,QAAA,KACAkB,EAAAlD,EAAAkN,KAAAD,EAAAE,OAAA,EAAA5N,IAAA4D,cACAF,EAAAjD,EAAAkN,KAAAD,EAAAE,OAAA5N,EAAA,IAEA2D,IACA4J,EAAA5J,GAAA4J,EAAA5J,GAAA4J,EAAA5J,GAAA,KAAAD,EAAAA,KAIA6J,GAZAA,KbksBGhJ,aAAa,KAAKsJ,IAAI,SAAS9N,EAAQjB,EAAOD,GcztBjD,YAsBAC,GAAAD,QAAA,SAAAiP,GACA,MAAA,UAAAC,GACA,MAAAD,GAAA1E,MAAA,KAAA2E,Ud8tBMC,IAAI,SAASjO,EAAQjB,EAAOD,GetvBlC,YAEA,IAAA4B,GAAAV,EAAA,aAUAjB,GAAAD,QAAA,SAAAsC,EAAAE,EAAA4M,GAMA,MAJAxN,GAAAgD,QAAAwK,EAAA,SAAA3G,GACAnG,EAAAmG,EAAAnG,EAAAE,KAGAF,Kf0vBGoD,aAAa,KAAK2J,IAAI,SAASnO,EAAQjB,EAAOD,GgB5wBjD,YAcA,SAAA4L,GAAA/G,GACA,MAAA,mBAAAyK,EAAA/N,KAAAsD,GASA,QAAAI,GAAAJ,GACA,MAAA,yBAAAyK,EAAA/N,KAAAsD,GASA,QAAApC,GAAAoC,GACA,MAAA,sBAAAyK,EAAA/N,KAAAsD,GASA,QAAAwE,GAAAxE,GACA,GAAA0K,EAMA,OAJAA,GADA,mBAAAC,cAAAA,YAAA,OACAA,YAAAC,OAAA5K,GAEA,GAAAA,EAAA,QAAAA,EAAAyE,iBAAAkG,aAWA,QAAA1C,GAAAjI,GACA,MAAA,gBAAAA,GASA,QAAA8H,GAAA9H,GACA,MAAA,gBAAAA,GASA,QAAA6E,GAAA7E,GACA,MAAA,mBAAAA,GASA,QAAA0E,GAAA1E,GACA,MAAA,QAAAA,GAAA,gBAAAA,GASA,QAAAiH,GAAAjH,GACA,MAAA,kBAAAyK,EAAA/N,KAAAsD,GASA,QAAA2E,GAAA3E,GACA,MAAA,kBAAAyK,EAAA/N,KAAAsD,GASA,QAAA4E,GAAA5E,GACA,MAAA,kBAAAyK,EAAA/N,KAAAsD,GASA,QAAAiK,GAAAhE,GACA,MAAAA,GAAAjB,QAAA,OAAA,IAAAA,QAAA,OAAA,IAgBA,QAAAzF,KACA,MACA,mBAAA/D,SACA,mBAAA0M,WACA,kBAAAA,UAAAwB,cAgBA,QAAA3J,GAAA8K,EAAAjH,GAEA,GAAA,OAAAiH,GAAA,mBAAAA,GAUA,GALA,gBAAAA,IAAA9D,EAAA8D,KAEAA,GAAAA,IAGA9D,EAAA8D,GAEA,IAAA,GAAAvO,GAAA,EAAAG,EAAAoO,EAAAlO,OAAAF,EAAAH,EAAAA,IACAsH,EAAAlH,KAAA,KAAAmO,EAAAvO,GAAAA,EAAAuO,OAIA,KAAA,GAAA5K,KAAA4K,GACAA,EAAAC,eAAA7K,IACA2D,EAAAlH,KAAA,KAAAmO,EAAA5K,GAAAA,EAAA4K,GAuBA,QAAA3J,KAEA,QAAA6J,GAAA/K,EAAAC,GACA,gBAAAyK,GAAAzK,IAAA,gBAAAD,GACA0K,EAAAzK,GAAAiB,EAAAwJ,EAAAzK,GAAAD,GAEA0K,EAAAzK,GAAAD,EAIA,IAAA,GATA0K,MASApO,EAAA,EAAAG,EAAAiF,UAAA/E,OAAAF,EAAAH,EAAAA,IACAyD,EAAA2B,UAAApF,GAAAyO,EAEA,OAAAL,GA1NA,GAAAD,GAAAO,OAAAvJ,UAAAgJ,QA6NArP,GAAAD,SACA4L,QAAAA,EACA3G,cAAAA,EACAxC,WAAAA,EACA4G,kBAAAA,EACAyD,SAAAA,EACAH,SAAAA,EACApD,SAAAA,EACAG,YAAAA,EACAoC,OAAAA,EACAtC,OAAAA,EACAC,OAAAA,EACArF,qBAAAA,EACAQ,QAAAA,EACAmB,MAAAA,EACA+I,KAAAA,QhBgxBMgB,IAAI,SAAS5O,EAAQjB,EAAOD,IAClC,SAAWM,IiBlgCX,SAAAyP,GAGA,GAAAC,GAAA,gBAAAhQ,IAAAA,EAGAiQ,EAAA,gBAAAhQ,IAAAA,GACAA,EAAAD,SAAAgQ,GAAA/P,EAIAiQ,EAAA,gBAAA5P,IAAAA,GACA4P,EAAA5P,SAAA4P,GAAAA,EAAA7P,SAAA6P,KACAH,EAAAG,EAKA,IAAAzF,GAAA,SAAAC,GACAlK,KAAAkK,QAAAA,EAEAD,GAAAnE,UAAA,GAAAlF,OACAqJ,EAAAnE,UAAAgF,KAAA,uBAEA,IAAA6E,GAAA,SAAAzF,GAGA,KAAA,IAAAD,GAAAC,IAGA0F,EAAA,mEAEAC,EAAA,eAMAC,EAAA,SAAA3F,GACAA,EAAAI,OAAAJ,GACAd,QAAAwG,EAAA,GACA,IAAA7O,GAAAmJ,EAAAnJ,MACAA,GAAA,GAAA,IACAmJ,EAAAA,EAAAd,QAAA,OAAA,IACArI,EAAAmJ,EAAAnJ,SAGAA,EAAA,GAAA,GAEA,kBAAA8L,KAAA3C,KAEAwF,EACA,wEAQA,KALA,GACAI,GACAjH,EAFAkH,EAAA,EAGAxF,EAAA,GACAyF,EAAA,KACAA,EAAAjP,GACA8H,EAAA8G,EAAAxM,QAAA+G,EAAAS,OAAAqF,IACAF,EAAAC,EAAA,EAAA,GAAAD,EAAAjH,EAAAA,EAEAkH,IAAA,IAEAxF,GAAAD,OAAA2F,aACA,IAAAH,IAAA,GAAAC,EAAA,IAIA,OAAAxF,IAKAQ,EAAA,SAAAb,GACAA,EAAAI,OAAAJ,GACA,aAAA2C,KAAA3C,IAGAwF,EACA,4EAeA,KAXA,GAGAlP,GACA0P,EACAC,EAEAtH,EAPAuH,EAAAlG,EAAAnJ,OAAA,EACAwJ,EAAA,GACAyF,EAAA,GAOAjP,EAAAmJ,EAAAnJ,OAAAqP,IAEAJ,EAAAjP,GAEAP,EAAA0J,EAAAU,WAAAoF,IAAA,GACAE,EAAAhG,EAAAU,aAAAoF,IAAA,EACAG,EAAAjG,EAAAU,aAAAoF,GACAnH,EAAArI,EAAA0P,EAAAC,EAGA5F,GACAoF,EAAAhF,OAAA9B,GAAA,GAAA,IACA8G,EAAAhF,OAAA9B,GAAA,GAAA,IACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA8G,EAAAhF,OAAA,GAAA9B,EAuBA,OAnBA,IAAAuH,GACA5P,EAAA0J,EAAAU,WAAAoF,IAAA,EACAE,EAAAhG,EAAAU,aAAAoF,GACAnH,EAAArI,EAAA0P,EACA3F,GACAoF,EAAAhF,OAAA9B,GAAA,IACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA,KAEA,GAAAuH,IACAvH,EAAAqB,EAAAU,WAAAoF,GACAzF,GACAoF,EAAAhF,OAAA9B,GAAA,GACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA,MAIA0B,GAGA8F,GACAtF,OAAAA,EACA8E,OAAAA,EACAS,QAAA,QAKA,IACA,kBAAA7Q,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WACA,MAAA4Q,SAEA,IAAAd,IAAAA,EAAAgB,SACA,GAAAf,EACAA,EAAAjQ,QAAA8Q,MAEA,KAAA,GAAAhM,KAAAgM,GACAA,EAAAnB,eAAA7K,KAAAkL,EAAAlL,GAAAgM,EAAAhM,QAIAiL,GAAAe,OAAAA,GAGAtQ,QjBsgCGe,KAAKf,KAAuB,mBAAXF,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,gBAErH4Q,IAAI,SAAS/P,EAAQjB,EAAOD,IAClC,SAAW4I,EAAQtI,IkBrqCnB,WACA,YACA,SAAA4Q,GAAAC,GACA,MAAA,kBAAAA,IAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,kBAAAA,GAqCA,QAAAE,GAAAC,GACAC,EAAAD,EAGA,QAAAE,GAAAC,GACAC,EAAAD,EAcA,QAAAE,KAGA,MAAA,YACA/I,EAAAgJ,SAAAC,IAKA,QAAAC,KACA,MAAA,YACAC,EAAAF,IAIA,QAAAG,KACA,GAAAC,GAAA,EACAC,EAAA,GAAAC,GAAAN,GACAO,EAAArF,SAAAsF,eAAA,GAGA,OAFAH,GAAAI,QAAAF,GAAAG,eAAA,IAEA,WACAH,EAAA9P,KAAA2P,IAAAA,EAAA,GAKA,QAAAO,KACA,GAAAC,GAAA,GAAAC,eAEA,OADAD,GAAAE,MAAAC,UAAAf,EACA,WACAY,EAAAI,MAAAC,YAAA,IAIA,QAAAC,KACA,MAAA,YACAC,WAAAnB,EAAA,IAKA,QAAAA,KACA,IAAA,GAAA1Q,GAAA,EAAA8R,EAAA9R,EAAAA,GAAA,EAAA,CACA,GAAA8N,GAAAiE,GAAA/R,GACAgS,EAAAD,GAAA/R,EAAA,EAEA8N,GAAAkE,GAEAD,GAAA/R,GAAAuD,OACAwO,GAAA/R,EAAA,GAAAuD,OAGAuO,EAAA,EAGA,QAAAG,KACA,IACA,GAAAvS,GAAAK,EACAmS,EAAAxS,EAAA,QAEA,OADAkR,GAAAsB,EAAAC,WAAAD,EAAAE,aACAzB,IACA,MAAApR,GACA,MAAAqS,MAiBA,QAAAS,GAAAC,EAAAC,GACA,GAAAC,GAAAnT,KACAoT,EAAAD,EAAAE,MAEA,IAAAD,IAAAE,KAAAL,GAAAG,IAAAG,KAAAL,EACA,MAAAlT,KAGA,IAAAwT,GAAA,GAAAxT,MAAAyT,YAAAC,GACA3E,EAAAoE,EAAAQ,OAEA,IAAAP,EAAA,CACA,GAAA3E,GAAA1I,UAAAqN,EAAA,EACAlC,GAAA,WACA0C,EAAAR,EAAAI,EAAA/E,EAAAM,SAGA8E,GAAAV,EAAAK,EAAAP,EAAAC,EAGA,OAAAM,GAGA,QAAAM,GAAAC,GAEA,GAAAC,GAAAhU,IAEA,IAAA+T,GAAA,gBAAAA,IAAAA,EAAAN,cAAAO,EACA,MAAAD,EAGA,IAAA3N,GAAA,GAAA4N,GAAAN,EAEA,OADAO,GAAA7N,EAAA2N,GACA3N,EAIA,QAAAsN,MAQA,QAAAQ,KACA,MAAA,IAAAC,WAAA,4CAGA,QAAAC,KACA,MAAA,IAAAD,WAAA,wDAGA,QAAAE,GAAAjO,GACA,IACA,MAAAA,GAAAO,KACA,MAAAgJ,GAEA,MADA2E,IAAA3E,MAAAA,EACA2E,IAIA,QAAAC,GAAA5N,EAAAkF,EAAA2I,EAAAC,GACA,IACA9N,EAAA5F,KAAA8K,EAAA2I,EAAAC,GACA,MAAAvU,GACA,MAAAA,IAIA,QAAAwU,GAAAtO,EAAAuO,EAAAhO,GACAuK,EAAA,SAAA9K,GACA,GAAAwO,IAAA,EACAjF,EAAA4E,EAAA5N,EAAAgO,EAAA,SAAA9I,GACA+I,IACAA,GAAA,EACAD,IAAA9I,EACAoI,EAAA7N,EAAAyF,GAEAgJ,EAAAzO,EAAAyF,KAEA,SAAAiJ,GACAF,IACAA,GAAA,EAEAG,EAAA3O,EAAA0O,KACA,YAAA1O,EAAA4O,QAAA,sBAEAJ,GAAAjF,IACAiF,GAAA,EACAG,EAAA3O,EAAAuJ,KAEAvJ,GAGA,QAAA6O,GAAA7O,EAAAuO,GACAA,EAAAtB,SAAAC,GACAuB,EAAAzO,EAAAuO,EAAAhB,SACAgB,EAAAtB,SAAAE,GACAwB,EAAA3O,EAAAuO,EAAAhB,SAEAE,EAAAc,EAAAzQ,OAAA,SAAA2H,GACAoI,EAAA7N,EAAAyF,IACA,SAAAiJ,GACAC,EAAA3O,EAAA0O,KAKA,QAAAI,GAAA9O,EAAA+O,EAAAxO,GACAwO,EAAA1B,cAAArN,EAAAqN,aACA9M,IAAAyO,IACA3B,YAAA/R,UAAA2T,GACAJ,EAAA7O,EAAA+O,GAEAxO,IAAA2N,GACAS,EAAA3O,EAAAkO,GAAA3E,OACAzL,SAAAyC,EACAkO,EAAAzO,EAAA+O,GACAvE,EAAAjK,GACA+N,EAAAtO,EAAA+O,EAAAxO,GAEAkO,EAAAzO,EAAA+O,GAKA,QAAAlB,GAAA7N,EAAAyF,GACAzF,IAAAyF,EACAkJ,EAAA3O,EAAA8N,KACAxD,EAAA7E,GACAqJ,EAAA9O,EAAAyF,EAAAwI,EAAAxI,IAEAgJ,EAAAzO,EAAAyF,GAIA,QAAAyJ,GAAAlP,GACAA,EAAAmP,UACAnP,EAAAmP,SAAAnP,EAAAuN,SAGA6B,EAAApP,GAGA,QAAAyO,GAAAzO,EAAAyF,GACAzF,EAAAiN,SAAAoC,KAEArP,EAAAuN,QAAA9H,EACAzF,EAAAiN,OAAAC,GAEA,IAAAlN,EAAAsP,aAAA1U,QACAkQ,EAAAsE,EAAApP,IAIA,QAAA2O,GAAA3O,EAAA0O,GACA1O,EAAAiN,SAAAoC,KACArP,EAAAiN,OAAAE,GACAnN,EAAAuN,QAAAmB,EAEA5D,EAAAoE,EAAAlP,IAGA,QAAAyN,GAAAV,EAAAK,EAAAP,EAAAC,GACA,GAAAyC,GAAAxC,EAAAuC,aACA1U,EAAA2U,EAAA3U,MAEAmS,GAAAoC,SAAA,KAEAI,EAAA3U,GAAAwS,EACAmC,EAAA3U,EAAAsS,IAAAL,EACA0C,EAAA3U,EAAAuS,IAAAL,EAEA,IAAAlS,GAAAmS,EAAAE,QACAnC,EAAAsE,EAAArC,GAIA,QAAAqC,GAAApP,GACA,GAAAuP,GAAAvP,EAAAsP,aACAE,EAAAxP,EAAAiN,MAEA,IAAA,IAAAsC,EAAA3U,OAAA,CAIA,IAAA,GAFAwS,GAAA/E,EAAAoH,EAAAzP,EAAAuN,QAEAhT,EAAA,EAAAA,EAAAgV,EAAA3U,OAAAL,GAAA,EACA6S,EAAAmC,EAAAhV,GACA8N,EAAAkH,EAAAhV,EAAAiV,GAEApC,EACAI,EAAAgC,EAAApC,EAAA/E,EAAAoH,GAEApH,EAAAoH,EAIAzP,GAAAsP,aAAA1U,OAAA,GAGA,QAAA8U,KACA9V,KAAA2P,MAAA,KAKA,QAAAoG,GAAAtH,EAAAoH,GACA,IACA,MAAApH,GAAAoH,GACA,MAAA3V,GAEA,MADA8V,IAAArG,MAAAzP,EACA8V,IAIA,QAAApC,GAAAgC,EAAAxP,EAAAqI,EAAAoH,GACA,GACAhK,GAAA8D,EAAAsG,EAAAC,EADAC,EAAAvF,EAAAnC,EAGA,IAAA0H,GAWA,GAVAtK,EAAAkK,EAAAtH,EAAAoH,GAEAhK,IAAAmK,IACAE,GAAA,EACAvG,EAAA9D,EAAA8D,MACA9D,EAAA,MAEAoK,GAAA,EAGA7P,IAAAyF,EAEA,WADAkJ,GAAA3O,EAAAgO,SAKAvI,GAAAgK,EACAI,GAAA,CAGA7P,GAAAiN,SAAAoC,KAEAU,GAAAF,EACAhC,EAAA7N,EAAAyF,GACAqK,EACAnB,EAAA3O,EAAAuJ,GACAiG,IAAAtC,GACAuB,EAAAzO,EAAAyF,GACA+J,IAAArC,IACAwB,EAAA3O,EAAAyF,IAIA,QAAAuK,GAAAhQ,EAAAiQ,GACA,IACAA,EAAA,SAAAxK,GACAoI,EAAA7N,EAAAyF,IACA,SAAAiJ,GACAC,EAAA3O,EAAA0O,KAEA,MAAA5U,GACA6U,EAAA3O,EAAAlG,IAIA,QAAAoW,GAAAC,GACA,MAAA,IAAAC,IAAAxW,KAAAuW,GAAAnQ,QAGA,QAAAqQ,GAAAF,GAaA,QAAAtD,GAAApH,GACAoI,EAAA7N,EAAAyF,GAGA,QAAAqH,GAAA4B,GACAC,EAAA3O,EAAA0O,GAhBA,GAAAd,GAAAhU,KAEAoG,EAAA,GAAA4N,GAAAN,EAEA,KAAAgD,EAAAH,GAEA,MADAxB,GAAA3O,EAAA,GAAA+N,WAAA,oCACA/N,CAaA,KAAA,GAVApF,GAAAuV,EAAAvV,OAUAL,EAAA,EAAAyF,EAAAiN,SAAAoC,IAAAzU,EAAAL,EAAAA,IACAkT,EAAAG,EAAAtS,QAAA6U,EAAA5V,IAAAuD,OAAA+O,EAAAC,EAGA,OAAA9M,GAGA,QAAAuQ,GAAA7B,GAEA,GAAAd,GAAAhU,KACAoG,EAAA,GAAA4N,GAAAN,EAEA,OADAqB,GAAA3O,EAAA0O,GACA1O,EAMA,QAAAwQ,KACA,KAAA,IAAAzC,WAAA,sFAGA,QAAA0C,KACA,KAAA,IAAA1C,WAAA,yHA2GA,QAAA2C,GAAAT,GACArW,KAAA+W,IAAAC,KACAhX,KAAAqT,OAAAnP,OACAlE,KAAA2T,QAAAzP,OACAlE,KAAA0V,gBAEAhC,IAAA2C,IACA,kBAAAA,IAAAO,IACA5W,eAAA8W,GAAAV,EAAApW,KAAAqW,GAAAQ,KAkPA,QAAAI,GAAAjD,EAAA7J,GACAnK,KAAAkX,qBAAAlD,EACAhU,KAAAoG,QAAA,GAAA4N,GAAAN,GAEA5J,MAAAsB,QAAAjB,IACAnK,KAAAmX,OAAAhN,EACAnK,KAAAgB,OAAAmJ,EAAAnJ,OACAhB,KAAAoX,WAAAjN,EAAAnJ,OAEAhB,KAAA2T,QAAA,GAAA7J,OAAA9J,KAAAgB,QAEA,IAAAhB,KAAAgB,OACA6T,EAAA7U,KAAAoG,QAAApG,KAAA2T,UAEA3T,KAAAgB,OAAAhB,KAAAgB,QAAA,EACAhB,KAAAqX,aACA,IAAArX,KAAAoX,YACAvC,EAAA7U,KAAAoG,QAAApG,KAAA2T,WAIAoB,EAAA/U,KAAAoG,QAAApG,KAAAsX,oBAqEA,QAAAC,KACA,GAAAC,EAEA,IAAA,mBAAA1X,GACA0X,EAAA1X,MACA,IAAA,mBAAAC,MACAyX,EAAAzX,SAEA,KACAyX,EAAAC,SAAA,iBACA,MAAAvX,GACA,KAAA,IAAAU,OAAA,4EAIA,GAAA8W,GAAAF,EAAAnR,UAEAqR,GAAA,qBAAArI,OAAAvJ,UAAAgJ,SAAA/N,KAAA2W,EAAAhW,YAAAgW,EAAAC,QAIAH,EAAAnR,QAAAuR,IA/4BA,GAAAC,EAMAA,GALA/N,MAAAsB,QAKAtB,MAAAsB,QAJA,SAAAuF,GACA,MAAA,mBAAAtB,OAAAvJ,UAAAgJ,SAAA/N,KAAA4P,GAMA,IAEAY,GACAR,EAwGA+G,EA3GApB,EAAAmB,EACApF,EAAA,EAIAvB,EAAA,SAAAzC,EAAAkE,GACAD,GAAAD,GAAAhE,EACAiE,GAAAD,EAAA,GAAAE,EACAF,GAAA,EACA,IAAAA,IAIA1B,EACAA,EAAAM,GAEAyG,MAaAC,EAAA,mBAAAlY,QAAAA,OAAAqE,OACA8T,EAAAD,MACApG,EAAAqG,EAAAC,kBAAAD,EAAAE,uBACAC,GAAA,mBAAA/P,IAAA,wBAAA0G,SAAA/N,KAAAqH,GAGAgQ,GAAA,mBAAAC,oBACA,mBAAAC,gBACA,mBAAApG,gBA4CAQ,GAAA,GAAA5I,OAAA,IA6BAgO,GADAK,GACAhH,IACAQ,EACAH,IACA4G,GACApG,IACA9N,SAAA6T,GAAA,kBAAArX,GACAkS,IAEAL,GAwBA,IAAA6C,IAAApC,EAaAqC,GAAAvB,EAIA2B,GAAA,OACAnC,GAAA,EACAC,GAAA,EAEAe,GAAA,GAAAwB,GAkKAE,GAAA,GAAAF,GAgEAyC,GAAAjC,EA4BAkC,GAAA/B,EAQAgC,GAAA9B,EAEAK,GAAA,EAUAY,GAAAd,CAoHAA,GAAA9P,IAAAuR,GACAzB,EAAA4B,KAAAF,GACA1B,EAAApV,QAAA2T,GACAyB,EAAAnV,OAAA8W,GACA3B,EAAA6B,cAAA9H,EACAiG,EAAA8B,SAAA5H,EACA8F,EAAA+B,MAAA3H,EAEA4F,EAAAhR,WACA2N,YAAAqD,EAmMAnQ,KAAAyO,GA6BA0D,QAAA,SAAA5F,GACA,MAAAlT,MAAA2G,KAAA,KAAAuM,IAGA,IAAAsD,IAAAS,CA0BAA,GAAAnR,UAAAwR,iBAAA,WACA,MAAA,IAAA1W,OAAA,4CAGAqW,EAAAnR,UAAAuR,WAAA,WAIA,IAAA,GAHArW,GAAAhB,KAAAgB,OACAmJ,EAAAnK,KAAAmX,OAEAxW,EAAA,EAAAX,KAAAqT,SAAAoC,IAAAzU,EAAAL,EAAAA,IACAX,KAAA+Y,WAAA5O,EAAAxJ,GAAAA,IAIAsW,EAAAnR,UAAAiT,WAAA,SAAAC,EAAArY,GACA,GAAAyP,GAAApQ,KAAAkX,qBACAxV,EAAA0O,EAAA1O,OAEA,IAAAA,IAAA2T,GAAA,CACA,GAAA1O,GAAA0N,EAAA2E,EAEA,IAAArS,IAAAyO,IACA4D,EAAA3F,SAAAoC,GACAzV,KAAAiZ,WAAAD,EAAA3F,OAAA1S,EAAAqY,EAAArF,aACA,IAAA,kBAAAhN,GACA3G,KAAAoX,aACApX,KAAA2T,QAAAhT,GAAAqY,MACA,IAAA5I,IAAAwH,GAAA,CACA,GAAAxR,GAAA,GAAAgK,GAAAsD,EACAwB,GAAA9O,EAAA4S,EAAArS,GACA3G,KAAAkZ,cAAA9S,EAAAzF,OAEAX,MAAAkZ,cAAA,GAAA9I,GAAA,SAAA1O,GAAAA,EAAAsX,KAAArY,OAGAX,MAAAkZ,cAAAxX,EAAAsX,GAAArY,IAIAsW,EAAAnR,UAAAmT,WAAA,SAAA7F,EAAAzS,EAAAkL,GACA,GAAAzF,GAAApG,KAAAoG,OAEAA,GAAAiN,SAAAoC,KACAzV,KAAAoX,aAEAhE,IAAAG,GACAwB,EAAA3O,EAAAyF,GAEA7L,KAAA2T,QAAAhT,GAAAkL,GAIA,IAAA7L,KAAAoX,YACAvC,EAAAzO,EAAApG,KAAA2T,UAIAsD,EAAAnR,UAAAoT,cAAA,SAAA9S,EAAAzF,GACA,GAAAwY,GAAAnZ,IAEA6T,GAAAzN,EAAAlC,OAAA,SAAA2H,GACAsN,EAAAF,WAAA3F,GAAA3S,EAAAkL,IACA,SAAAiJ,GACAqE,EAAAF,WAAA1F,GAAA5S,EAAAmU,KA0BA,IAAAsE,IAAA7B,EAEA8B,IACAhT,QAAAuR,GACA0B,SAAAF,GAIA,mBAAA1Z,IAAAA,EAAA,IACAA,EAAA,WAAA,MAAA2Z,MACA,mBAAA5Z,IAAAA,EAAA,QACAA,EAAA,QAAA4Z,GACA,mBAAArZ,QACAA,KAAA,WAAAqZ,IAGAD,OACArY,KAAAf,QlBirCGe,KAAKf,KAAKU,EAAQ,YAA8B,mBAAXZ,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,aAE5I2I,SAAW,KAAK+Q,IAAI,SAAS7Y,EAAQjB,EAAOD,GmBnmE/C,QAAAga,KACAC,GAAA,EACAC,EAAA1Y,OACA2Y,EAAAD,EAAAE,OAAAD,GAEAE,EAAA,GAEAF,EAAA3Y,QACA8Y,IAIA,QAAAA,KACA,IAAAL,EAAA,CAGA,GAAA1W,GAAAyP,WAAAgH,EACAC,IAAA,CAGA,KADA,GAAAM,GAAAJ,EAAA3Y,OACA+Y,GAAA,CAGA,IAFAL,EAAAC,EACAA,OACAE,EAAAE,GACAL,GACAA,EAAAG,GAAAG,KAGAH,GAAA,GACAE,EAAAJ,EAAA3Y,OAEA0Y,EAAA,KACAD,GAAA,EACAQ,aAAAlX,IAiBA,QAAAmX,GAAAC,EAAAC,GACApa,KAAAma,IAAAA,EACAna,KAAAoa,MAAAA,EAYA,QAAAC,MAtEA,GAGAX,GAHAtR,EAAA3I,EAAAD,WACAma,KACAF,GAAA,EAEAI,EAAA,EAsCAzR,GAAAgJ,SAAA,SAAA+I,GACA,GAAAtQ,GAAA,GAAAC,OAAA/D,UAAA/E,OAAA,EACA,IAAA+E,UAAA/E,OAAA,EACA,IAAA,GAAAL,GAAA,EAAAA,EAAAoF,UAAA/E,OAAAL,IACAkJ,EAAAlJ,EAAA,GAAAoF,UAAApF,EAGAgZ,GAAAjT,KAAA,GAAAwT,GAAAC,EAAAtQ,IACA,IAAA8P,EAAA3Y,QAAAyY,GACAjH,WAAAsH,EAAA,IASAI,EAAApU,UAAAkU,IAAA,WACAha,KAAAma,IAAApQ,MAAA,KAAA/J,KAAAoa,QAEAhS,EAAAkS,MAAA,UACAlS,EAAAmS,SAAA,EACAnS,EAAAoS,OACApS,EAAAqS,QACArS,EAAAmI,QAAA,GACAnI,EAAAsS,YAIAtS,EAAAuS,GAAAN,EACAjS,EAAAwS,YAAAP,EACAjS,EAAAyS,KAAAR,EACAjS,EAAA0S,IAAAT,EACAjS,EAAA2S,eAAAV,EACAjS,EAAA4S,mBAAAX,EACAjS,EAAA6S,KAAAZ,EAEAjS,EAAA8S,QAAA,SAAApQ,GACA,KAAA,IAAAlK,OAAA,qCAGAwH,EAAA+S,IAAA,WAAA,MAAA,KACA/S,EAAAgT,MAAA,SAAAC,GACA,KAAA,IAAAza,OAAA,mCAEAwH,EAAAkT,MAAA,WAAA,MAAA,SnB8mEMC,IAAI,SAAS7a,EAAQjB,EAAOD,IAClC,SAAWM,IoBxsEX,SAAAyP,GAqBA,QAAAiM,GAAAC,GAMA,IALA,GAGA5P,GACA6P,EAJAlR,KACAmR,EAAA,EACA3a,EAAAya,EAAAza,OAGAA,EAAA2a,GACA9P,EAAA4P,EAAA5Q,WAAA8Q,KACA9P,GAAA,OAAA,OAAAA,GAAA7K,EAAA2a,GAEAD,EAAAD,EAAA5Q,WAAA8Q,KACA,QAAA,MAAAD,GACAlR,EAAA9D,OAAA,KAAAmF,IAAA,KAAA,KAAA6P,GAAA,QAIAlR,EAAA9D,KAAAmF,GACA8P,MAGAnR,EAAA9D,KAAAmF,EAGA,OAAArB,GAIA,QAAAoR,GAAAxB,GAKA,IAJA,GAEAvO,GAFA7K,EAAAoZ,EAAApZ,OACA6a,EAAA,GAEArR,EAAA,KACAqR,EAAA7a,GACA6K,EAAAuO,EAAAyB,GACAhQ,EAAA,QACAA,GAAA,MACArB,GAAAsR,EAAAjQ,IAAA,GAAA,KAAA,OACAA,EAAA,MAAA,KAAAA,GAEArB,GAAAsR,EAAAjQ,EAEA,OAAArB,GAGA,QAAAuR,GAAAC,GACA,GAAAA,GAAA,OAAA,OAAAA,EACA,KAAApb,OACA,oBAAAob,EAAAlN,SAAA,IAAAlM,cACA,0BAMA,QAAAqZ,GAAAD,EAAApV,GACA,MAAAkV,GAAAE,GAAApV,EAAA,GAAA,KAGA,QAAAsV,GAAAF,GACA,GAAA,IAAA,WAAAA,GACA,MAAAF,GAAAE,EAEA,IAAAG,GAAA,EAeA,OAdA,KAAA,WAAAH,GACAG,EAAAL,EAAAE,GAAA,EAAA,GAAA,KAEA,IAAA,WAAAA,IACAD,EAAAC,GACAG,EAAAL,EAAAE,GAAA,GAAA,GAAA,KACAG,GAAAF,EAAAD,EAAA,IAEA,IAAA,WAAAA,KACAG,EAAAL,EAAAE,GAAA,GAAA,EAAA,KACAG,GAAAF,EAAAD,EAAA,IACAG,GAAAF,EAAAD,EAAA,IAEAG,GAAAL,EAAA,GAAAE,EAAA,KAIA,QAAAI,GAAAX,GAMA,IALA,GAGAO,GAHAK,EAAAb,EAAAC,GACAza,EAAAqb,EAAArb,OACA6a,EAAA,GAEAS,EAAA,KACAT,EAAA7a,GACAgb,EAAAK,EAAAR,GACAS,GAAAJ,EAAAF,EAEA,OAAAM,GAKA,QAAAC,KACA,GAAAC,GAAAC,EACA,KAAA7b,OAAA,qBAGA,IAAA8b,GAAA,IAAAC,EAAAH,EAGA,IAFAA,IAEA,MAAA,IAAAE,GACA,MAAA,IAAAA,CAIA,MAAA9b,OAAA,6BAGA,QAAAgc,KACA,GAAAC,GACAC,EACAC,EACAC,EACAhB,CAEA,IAAAQ,EAAAC,EACA,KAAA7b,OAAA,qBAGA,IAAA4b,GAAAC,EACA,OAAA,CAQA,IAJAI,EAAA,IAAAF,EAAAH,GACAA,IAGA,IAAA,IAAAK,GACA,MAAAA,EAIA,IAAA,MAAA,IAAAA,GAAA,CACA,GAAAC,GAAAP,GAEA,IADAP,GAAA,GAAAa,IAAA,EAAAC,EACAd,GAAA,IACA,MAAAA,EAEA,MAAApb,OAAA,6BAKA,GAAA,MAAA,IAAAic,GAAA,CAIA,GAHAC,EAAAP,IACAQ,EAAAR,IACAP,GAAA,GAAAa,IAAA,GAAAC,GAAA,EAAAC,EACAf,GAAA,KAEA,MADAD,GAAAC,GACAA,CAEA,MAAApb,OAAA,6BAKA,GAAA,MAAA,IAAAic,KACAC,EAAAP,IACAQ,EAAAR,IACAS,EAAAT,IACAP,GAAA,GAAAa,IAAA,GAAAC,GAAA,GACAC,GAAA,EAAAC,EACAhB,GAAA,OAAA,SAAAA,GACA,MAAAA,EAIA,MAAApb,OAAA,0BAMA,QAAAqc,GAAAX,GACAK,EAAAnB,EAAAc,GACAG,EAAAE,EAAA3b,OACAwb,EAAA,CAGA,KAFA,GACAU,GADAb,MAEAa,EAAAN,QAAA,GACAP,EAAA3V,KAAAwW,EAEA,OAAAtB,GAAAS,GA5MA,GAAA7M,GAAA,gBAAAhQ,IAAAA,EAGAiQ,EAAA,gBAAAhQ,IAAAA,GACAA,EAAAD,SAAAgQ,GAAA/P,EAIAiQ,EAAA,gBAAA5P,IAAAA,GACA4P,EAAA5P,SAAA4P,GAAAA,EAAA7P,SAAA6P,KACAH,EAAAG,EAKA,IAiLAiN,GACAF,EACAD,EAnLAV,EAAAvR,OAAA2F,aAkMAiN,GACA5M,QAAA,QACAvF,OAAAoR,EACAtM,OAAAmN,EAKA,IACA,kBAAAvd,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WACA,MAAAyd,SAEA,IAAA3N,IAAAA,EAAAgB,SACA,GAAAf,EACAA,EAAAjQ,QAAA2d,MACA,CACA,GAAApJ,MACA5E,EAAA4E,EAAA5E,cACA,KAAA,GAAA7K,KAAA6Y,GACAhO,EAAApO,KAAAoc,EAAA7Y,KAAAkL,EAAAlL,GAAA6Y,EAAA7Y,QAIAiL,GAAA4N,KAAAA,GAGAnd,QpB4sEGe,KAAKf,KAAuB,mBAAXF,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,gBAErHud,IAAI,SAAS1c,EAAQjB,EAAOD,GqBt7ElC,cAEA,SAAA+P,EAAA8N,GAEA,kBAAA3d,IAAAA,EAAAC,IACAD,GAEA,cACA,UACA,OACA,SAEA,SAAA2G,EAAAiX,EAAAC,EAAAzW,GACA,MAAAyI,GAAAtP,OAAAod,EAAAhX,EAAAiX,EAAAC,EAAAzW,KAGA,gBAAArH,IAAAA,EAAAD,QACAC,EAAAD,QAAA6d,EAAA3c,EAAA,eAAAA,EAAA,WAAAA,EAAA,QAAAA,EAAA,UAEA6O,EAAAtP,OAAAod,EAAA9N,EAAAlJ,QAAAkJ,EAAAe,OAAAf,EAAA4N,KAAA5N,EAAAzI,QAEA9G,KAAA,SAAAqG,EAAAiX,EAAAC,EAAAzW,GACA,QAAA0W,GAAA/B,GACA,MAAA6B,GAAAtS,OAAAuS,EAAAvS,OAAAyQ,IAGApV,EAAAiT,UACAjT,EAAAiT,UAMA,IAAArZ,GAAA,SAAAwd,GACA,GAAAC,GAAAD,EAAAE,QAAA,yBAOAC,EAAA3d,EAAA2d,SAAA,SAAAjb,EAAAoJ,EAAAjK,EAAA+b,EAAAC,GACA,QAAAC,KACA,GAAA1b,GAAA0J,EAAA3I,QAAA,OAAA,EAAA2I,EAAA2R,EAAA3R,CAIA,IAFA1J,GAAA,KAAAyK,KAAAzK,GAAA,IAAA,IAEAP,GAAA,gBAAAA,KAAA,MAAA,OAAA,UAAAsB,QAAAT,GAAA,GACA,IAAA,GAAAqb,KAAAlc,GACAA,EAAAqN,eAAA6O,KACA3b,GAAA,IAAA4I,mBAAA+S,GAAA,IAAA/S,mBAAAnJ,EAAAkc,IAKA,OAAA3b,GAAAgH,QAAA,mBAAA,KACA,mBAAAxJ,QAAA,eAAA,GAAAuM,OAAA6R,UAAA,IAGA,GAAArc,IACAI,SACAuH,OAAAuU,EAAA,qCAAA,iCACAlV,eAAA,kCAEAjG,OAAAA,EACAb,KAAAA,EAAAA,KACAO,IAAA0b,IASA,QANAN,EAAA,OAAAA,EAAAlb,UAAAkb,EAAAjb,YACAZ,EAAAI,QAAAS,cAAAgb,EAAAS,MACA,SAAAT,EAAAS,MACA,SAAAV,EAAAC,EAAAlb,SAAA,IAAAkb,EAAAjb,WAGAsE,EAAAlF,GACA+E,KAAA,SAAApD,GACAsa,EACA,KACAta,EAAAzB,OAAA,EACAyB,EAAArB,UAEA,SAAAqB,GACA,MAAAA,EAAAE,OACAoa,EACA,KACAta,EAAAzB,OAAA,EACAyB,EAAArB,SAGA2b,GACA9R,KAAAA,EACA7J,QAAAqB,EAAArB,QACAyN,MAAApM,EAAAE,YAMA0a,EAAAle,EAAAke,iBAAA,SAAApS,EAAA8R,GACA,GAAAO,OAEA,QAAAC,KACAT,EAAA,MAAA7R,EAAA,KAAA,SAAAuS,EAAAC,EAAAC,GACA,GAAAF,EACA,MAAAT,GAAAS,EAGAC,aAAAzU,SACAyU,GAAAA,IAGAH,EAAA1X,KAAAqD,MAAAqU,EAAAG,EAEA,IAAAE,IAAAD,EAAAE,kBAAA,SAAA,IACAtQ,MAAA,KACAuQ,OAAA,SAAAC,GACA,MAAA,aAAA9R,KAAA8R,KAEAlU,IAAA,SAAAkU,GACA,OAAA,SAAAC,KAAAD,QAAA,KAEAE,KAEAL,IAGA1S,EAAA0S,EACAJ,KAHAR,EAAAS,EAAAF,EAAAI,QAk5BA,OAt4BAve,GAAA8e,KAAA,WACA/e,KAAAgf,MAAA,SAAAvB,EAAAI,GACA,IAAA9X,UAAA/E,QAAA,kBAAA+E,WAAA,KACA8X,EAAAJ,EACAA,MAGAA,EAAAA,KAEA,IAAApb,GAAA,cACAQ,IAEAA,GAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAwB,MAAA,QACApc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAyB,MAAA,YACArc,EAAA6D,KAAA,YAAAuE,mBAAAwS,EAAA0B,UAAA,QAEA1B,EAAA2B,MACAvc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA2B,OAGA/c,GAAA,IAAAQ,EAAA2I,KAAA,KAEA2S,EAAA9b,EAAAwb,IAMA7d,KAAAqf,KAAA,SAAAxB,GACAD,EAAA,MAAA,aAAA,KAAAC,IAMA7d,KAAAsf,MAAA,SAAAzB,GACAD,EAAA,MAAA,SAAA,KAAAC,IAMA7d,KAAAuf,cAAA,SAAA9B,EAAAI,GACA,IAAA9X,UAAA/E,QAAA,kBAAA+E,WAAA,KACA8X,EAAAJ,EACAA,MAGAA,EAAAA,KACA,IAAApb,GAAA,iBACAQ,IAUA,IARA4a,EAAAzW,KACAnE,EAAA6D,KAAA,YAGA+W,EAAA+B,eACA3c,EAAA6D,KAAA,sBAGA+W,EAAAgC,MAAA,CACA,GAAAA,GAAAhC,EAAAgC,KAEAA,GAAAhM,cAAArH,OACAqT,EAAAA,EAAAlU,eAGA1I,EAAA6D,KAAA,SAAAuE,mBAAAwU,IAGA,GAAAhC,EAAAiC,OAAA,CACA,GAAAA,GAAAjC,EAAAiC,MAEAA,GAAAjM,cAAArH,OACAsT,EAAAA,EAAAnU,eAGA1I,EAAA6D,KAAA,UAAAuE,mBAAAyU,IAGAjC,EAAA2B,MACAvc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA2B,OAGAvc,EAAA7B,OAAA,IACAqB,GAAA,IAAAQ,EAAA2I,KAAA,MAGAoS,EAAA,MAAAvb,EAAA,KAAAwb,IAMA7d,KAAA2f,KAAA,SAAApd,EAAAsb,GACA,GAAA+B,GAAArd,EAAA,UAAAA,EAAA,OAEAqb,GAAA,MAAAgC,EAAA,KAAA/B,IAMA7d,KAAA6f,UAAA,SAAAtd,EAAAsb,GAEAM,EAAA,UAAA5b,EAAA,4CAAAsb,IAMA7d,KAAA8f,YAAA,SAAAvd,EAAAsb,GAEAM,EAAA,UAAA5b,EAAA,iCAAAsb,IAMA7d,KAAA+f,UAAA,SAAAxd,EAAAsb,GACAD,EAAA,MAAA,UAAArb,EAAA,SAAA,KAAAsb,IAMA7d,KAAAggB,SAAA,SAAAC,EAAApC,GAEAM,EAAA,SAAA8B,EAAA,6DAAApC,IAMA7d,KAAAkgB,OAAA,SAAA3d,EAAAsb,GACAD,EAAA,MAAA,mBAAArb,EAAA,KAAAsb,IAMA7d,KAAAmgB,SAAA,SAAA5d,EAAAsb,GACAD,EAAA,SAAA,mBAAArb,EAAA,KAAAsb,IAKA7d,KAAAogB,WAAA,SAAA3C,EAAAI,GACAD,EAAA,OAAA,cAAAH,EAAAI,KAOA5d,EAAAogB,WAAA,SAAA5C,GAsBA,QAAA6C,GAAAC,EAAA1C,GACA,MAAA0C,KAAAC,EAAAD,QAAAC,EAAAC,IACA5C,EAAA,KAAA2C,EAAAC,SAGAC,GAAAC,OAAA,SAAAJ,EAAA,SAAAjC,EAAAmC,GACAD,EAAAD,OAAAA,EACAC,EAAAC,IAAAA,EACA5C,EAAAS,EAAAmC,KA7BA,GAKAG,GALAC,EAAApD,EAAA3S,KACAgW,EAAArD,EAAAqD,KACAC,EAAAtD,EAAAsD,SAEAL,EAAA1gB,IAIA4gB,GADAG,EACA,UAAAA,EAEA,UAAAD,EAAA,IAAAD,CAGA,IAAAL,IACAD,OAAA,KACAE,IAAA,KAqBAzgB,MAAA2gB,OAAA,SAAAK,EAAAnD,GACAD,EAAA,MAAAgD,EAAA,aAAAI,EAAA,KAAA,SAAA1C,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAxK,OAAA0M,IAAAjC,MAYAxe,KAAAihB,UAAA,SAAAxD,EAAAI,GACAD,EAAA,OAAAgD,EAAA,YAAAnD,EAAAI,IASA7d,KAAAkhB,UAAA,SAAAF,EAAAnD,GACAD,EAAA,SAAAgD,EAAA,aAAAI,EAAAvD,EAAAI,IAMA7d,KAAAogB,WAAA,SAAA3C,EAAAI,GACAD,EAAA,OAAA,cAAAH,EAAAI,IAMA7d,KAAAmhB,WAAA,SAAAtD,GACAD,EAAA,SAAAgD,EAAAnD,EAAAI,IAMA7d,KAAAohB,SAAA,SAAAvD,GACAD,EAAA,MAAAgD,EAAA,QAAA,KAAA/C,IAMA7d,KAAAqhB,UAAA,SAAA5D,EAAAI,GACAJ,EAAAA,KACA,IAAApb,GAAAue,EAAA,SACA/d,IAEA,iBAAA4a,GAEA5a,EAAA6D,KAAA,SAAA+W,IAEAA,EAAArK,OACAvQ,EAAA6D,KAAA,SAAAuE,mBAAAwS,EAAArK,QAGAqK,EAAA6D,MACAze,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA6D,OAGA7D,EAAA8D,MACA1e,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA8D,OAGA9D,EAAAyB,MACArc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAyB,OAGAzB,EAAA+D,WACA3e,EAAA6D,KAAA,aAAAuE,mBAAAwS,EAAA+D,YAGA/D,EAAA2B,MACAvc,EAAA6D,KAAA,QAAA+W,EAAA2B,MAGA3B,EAAA0B,UACAtc,EAAA6D,KAAA,YAAA+W,EAAA0B,WAIAtc,EAAA7B,OAAA,IACAqB,GAAA,IAAAQ,EAAA2I,KAAA,MAGAoS,EAAA,MAAAvb,EAAA,KAAAwb,IAMA7d,KAAAyhB,QAAA,SAAAC,EAAA7D,GACAD,EAAA,MAAAgD,EAAA,UAAAc,EAAA,KAAA7D,IAMA7d,KAAA2hB,QAAA,SAAAJ,EAAAD,EAAAzD,GACAD,EAAA,MAAAgD,EAAA,YAAAW,EAAA,MAAAD,EAAA,KAAAzD,IAMA7d,KAAA4hB,aAAA,SAAA/D,GACAD,EAAA,MAAAgD,EAAA,kBAAA,KAAA,SAAAtC,EAAAuD,EAAArD,GACA,MAAAF,GACAT,EAAAS,IAGAuD,EAAAA,EAAAnX,IAAA,SAAA4W,GACA,MAAAA,GAAAN,IAAA3X,QAAA,iBAAA,UAGAwU,GAAA,KAAAgE,EAAArD,OAOAxe,KAAA8hB,QAAA,SAAArB,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,cAAAH,EAAA,KAAA5C,EAAA,QAMA7d,KAAA+hB,UAAA,SAAAxB,EAAAE,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,gBAAAH,EAAA,KAAA5C,IAMA7d,KAAAgiB,OAAA,SAAAzB,EAAAxU,EAAA8R,GACA,MAAA9R,IAAA,KAAAA,MAIA6R,GAAA,MAAAgD,EAAA,aAAA7U,GAAAwU,EAAA,QAAAA,EAAA,IACA,KAAA,SAAAjC,EAAA2D,EAAAzD,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAoE,EAAAxB,IAAAjC,KATAkC,EAAAC,OAAA,SAAAJ,EAAA1C,IAgBA7d,KAAAkiB,YAAA,SAAAzB,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,aAAAH,EAAA,KAAA5C,IAMA7d,KAAAmiB,QAAA,SAAAC,EAAAvE,GACAD,EAAA,MAAAgD,EAAA,cAAAwB,EAAA,KAAA,SAAA9D,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAA6D,KAAA5D,MAOAxe,KAAAqiB,SAAA,SAAAC,EAAAzE,GAEAyE,EADA,gBAAA,IAEAA,QAAAA,EACAC,SAAA,UAIAD,QAAA9E,EAAA8E,GACAC,SAAA,UAIA3E,EAAA,OAAAgD,EAAA,aAAA0B,EAAA,SAAAhE,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAkC,IAAAjC,MAOAxe,KAAAsgB,WAAA,SAAAkC,EAAAzW,EAAA0W,EAAA5E,GACA,GAAA/b,IACA4gB,UAAAF,EACAJ,OAEArW,KAAAA,EACA4W,KAAA,SACA1D,KAAA,OACAwB,IAAAgC,IAKA7E,GAAA,OAAAgD,EAAA,aAAA9e,EAAA,SAAAwc,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAkC,IAAAjC,MAQAxe,KAAA4iB,SAAA,SAAAR,EAAAvE,GACAD,EAAA,OAAAgD,EAAA,cACAwB,KAAAA,GACA,SAAA9D,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAkC,IAAAjC,MAQAxe,KAAA6iB,OAAA,SAAA1P,EAAAiP,EAAAlY,EAAA2T,GACA,GAAAiD,GAAA,GAAA7gB,GAAA8e,IAEA+B,GAAAnB,KAAA,KAAA,SAAArB,EAAAwE,GACA,GAAAxE,EACA,MAAAT,GAAAS,EAGA,IAAAxc,IACAoI,QAAAA,EACA6Y,QACAjY,KAAA2S,EAAAqD,KACAkC,MAAAF,EAAAE,OAEAC,SACA9P,GAEAiP,KAAAA,EAGAxE,GAAA,OAAAgD,EAAA,eAAA9e,EAAA,SAAAwc,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,IAGAkC,EAAAC,IAAAlC,EAAAkC,QAEA5C,GAAA,KAAAU,EAAAkC,IAAAjC,SAQAxe,KAAAkjB,WAAA,SAAA5B,EAAAuB,EAAAhF,GACAD,EAAA,QAAAgD,EAAA,mBAAAU,GACAb,IAAAoC,GACAhF,IAMA7d,KAAA2f,KAAA,SAAA9B,GACAD,EAAA,MAAAgD,EAAA,KAAA/C,IAMA7d,KAAAmjB,aAAA,SAAAtF,EAAAuF,GACAA,EAAAA,GAAA,GACA,IAAA1C,GAAA1gB,IAEA4d,GAAA,MAAAgD,EAAA,sBAAA,KAAA,SAAAtC,EAAAxc,EAAA0c,GACA,MAAAF,GACAT,EAAAS,QAGA,MAAAE,EAAA/a,OACA+O,WACA,WACAkO,EAAAyC,aAAAtF,EAAAuF,IAEAA,GAGAvF,EAAAS,EAAAxc,EAAA0c,OAQAxe,KAAAqjB,SAAA,SAAArC,EAAAjV,EAAA8R,GACA9R,EAAAuX,UAAAvX,GACA6R,EAAA,MAAAgD,EAAA,aAAA7U,EAAA,IAAAA,EAAA,KACAiV,IAAAA,GACAnD,IAMA7d,KAAAujB,KAAA,SAAA1F,GACAD,EAAA,OAAAgD,EAAA,SAAA,KAAA/C,IAMA7d,KAAAwjB,UAAA,SAAA3F,GACAD,EAAA,MAAAgD,EAAA,SAAA,KAAA/C,IAMA7d,KAAAugB,OAAA,SAAAkD,EAAAC,EAAA7F,GACA,IAAA9X,UAAA/E,QAAA,kBAAA+E,WAAA,KACA8X,EAAA6F,EACAA,EAAAD,EACAA,EAAA,UAGAzjB,KAAA2gB,OAAA,SAAA8C,EAAA,SAAAnF,EAAA0C,GACA,MAAA1C,IAAAT,EACAA,EAAAS,OAGAoC,GAAAO,WACAD,IAAA,cAAA0C,EACAjD,IAAAO,GACAnD,MAOA7d,KAAA2jB,kBAAA,SAAAlG,EAAAI,GACAD,EAAA,OAAAgD,EAAA,SAAAnD,EAAAI,IAMA7d,KAAA4jB,UAAA,SAAA/F,GACAD,EAAA,MAAAgD,EAAA,SAAA,KAAA/C,IAMA7d,KAAA6jB,QAAA,SAAA7b,EAAA6V,GACAD,EAAA,MAAAgD,EAAA,UAAA5Y,EAAA,KAAA6V,IAMA7d,KAAA8jB,WAAA,SAAArG,EAAAI,GACAD,EAAA,OAAAgD,EAAA,SAAAnD,EAAAI,IAMA7d,KAAA+jB,SAAA,SAAA/b,EAAAyV,EAAAI,GACAD,EAAA,QAAAgD,EAAA,UAAA5Y,EAAAyV,EAAAI,IAMA7d,KAAAgkB,WAAA,SAAAhc,EAAA6V,GACAD,EAAA,SAAAgD,EAAA,UAAA5Y,EAAA,KAAA6V,IAMA7d,KAAAgE,KAAA,SAAAuc,EAAAxU,EAAA8R,GACAD,EAAA,MAAAgD,EAAA,aAAA0C,UAAAvX,IAAAwU,EAAA,QAAAA,EAAA,IACA,KAAA1C,GAAA,IAMA7d,KAAA2M,OAAA,SAAA4T,EAAAxU,EAAA8R,GACA6C,EAAAsB,OAAAzB,EAAAxU,EAAA,SAAAuS,EAAAmC,GACA,MAAAnC,GACAT,EAAAS,OAGAV,GAAA,SAAAgD,EAAA,aAAA7U,GACA7B,QAAA6B,EAAA,cACA0U,IAAAA,EACAF,OAAAA,GACA1C,MAMA7d,KAAAA,UAAAA,KAAA2M,OAKA3M,KAAAikB,KAAA,SAAA1D,EAAAxU,EAAAmY,EAAArG,GACAyC,EAAAC,EAAA,SAAAjC,EAAA6F,GACAzD,EAAAyB,QAAAgC,EAAA,kBAAA,SAAA7F,EAAA8D,GAEAA,EAAAhe,QAAA,SAAA4c,GACAA,EAAAjV,OAAAA,IACAiV,EAAAjV,KAAAmY,GAGA,SAAAlD,EAAA/B,YACA+B,GAAAP,MAIAC,EAAAkC,SAAAR,EAAA,SAAA9D,EAAA8F,GACA1D,EAAAmC,OAAAsB,EAAAC,EAAA,WAAArY,EAAA,SAAAuS,EAAAuE,GACAnC,EAAAwC,WAAA3C,EAAAsC,EAAAhF,YAUA7d,KAAA4L,MAAA,SAAA2U,EAAAxU,EAAAuW,EAAApY,EAAAuT,EAAAI,GACA,mBAAAA,KACAA,EAAAJ,EACAA,MAGAiD,EAAAsB,OAAAzB,EAAA+C,UAAAvX,GAAA,SAAAuS,EAAAmC,GACA,GAAA4D,IACAna,QAAAA,EACAoY,QAAA,mBAAA7E,GAAAzS,QAAAyS,EAAAzS,OAAAwS,EAAA8E,GAAAA,EACA/B,OAAAA,EACA+D,UAAA7G,GAAAA,EAAA6G,UAAA7G,EAAA6G,UAAApgB,OACA6e,OAAAtF,GAAAA,EAAAsF,OAAAtF,EAAAsF,OAAA7e,OAIAoa,IAAA,MAAAA,EAAA3O,QACA0U,EAAA5D,IAAAA,GAGA7C,EAAA,MAAAgD,EAAA,aAAA0C,UAAAvX,GAAAsY,EAAAxG,MAYA7d,KAAAukB,WAAA,SAAA9G,EAAAI,GACAJ,EAAAA,KACA,IAAApb,GAAAue,EAAA,WACA/d,IAcA,IAZA4a,EAAAgD,KACA5d,EAAA6D,KAAA,OAAAuE,mBAAAwS,EAAAgD,MAGAhD,EAAA1R,MACAlJ,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA1R,OAGA0R,EAAAsF,QACAlgB,EAAA6D,KAAA,UAAAuE,mBAAAwS,EAAAsF,SAGAtF,EAAAgC,MAAA,CACA,GAAAA,GAAAhC,EAAAgC,KAEAA,GAAAhM,cAAArH,OACAqT,EAAAA,EAAAlU,eAGA1I,EAAA6D,KAAA,SAAAuE,mBAAAwU,IAGA,GAAAhC,EAAA+G,MAAA,CACA,GAAAA,GAAA/G,EAAA+G,KAEAA,GAAA/Q,cAAArH,OACAoY,EAAAA,EAAAjZ,eAGA1I,EAAA6D,KAAA,SAAAuE,mBAAAuZ,IAGA/G,EAAA2B,MACAvc,EAAA6D,KAAA,QAAA+W,EAAA2B,MAGA3B,EAAAgH,SACA5hB,EAAA6D,KAAA,YAAA+W,EAAAgH,SAGA5hB,EAAA7B,OAAA,IACAqB,GAAA,IAAAQ,EAAA2I,KAAA,MAGAoS,EAAA,MAAAvb,EAAA,KAAAwb,IAMA7d,KAAA0kB,UAAA,SAAAC,EAAAC,EAAA/G,GACAD,EAAA,MAAA,iBAAA+G,EAAA,IAAAC,EAAA,KAAA/G,IAMA7d,KAAA6kB,KAAA,SAAAF,EAAAC,EAAA/G,GACAD,EAAA,MAAA,iBAAA+G,EAAA,IAAAC,EAAA,KAAA/G,IAMA7d,KAAA8kB,OAAA,SAAAH,EAAAC,EAAA/G,GACAD,EAAA,SAAA,iBAAA+G,EAAA,IAAAC,EAAA,KAAA/G,KAOA5d,EAAA8kB,KAAA,SAAAtH,GACA,GAAAzV,GAAAyV,EAAAzV,GACAgd,EAAA,UAAAhd,CAKAhI,MAAAgE,KAAA,SAAA6Z,GACAD,EAAA,MAAAoH,EAAA,KAAAnH,IAeA7d,KAAA+G,OAAA,SAAA0W,EAAAI,GACAD,EAAA,OAAA,SAAAH,EAAAI,IAMA7d,KAAAA,UAAA,SAAA6d,GACAD,EAAA,SAAAoH,EAAA,KAAAnH,IAMA7d,KAAAujB,KAAA,SAAA1F,GACAD,EAAA,OAAAoH,EAAA,QAAA,KAAAnH,IAMA7d,KAAAilB,OAAA,SAAAxH,EAAAI,GACAD,EAAA,QAAAoH,EAAAvH,EAAAI,IAMA7d,KAAA6kB,KAAA,SAAAhH,GACAD,EAAA,MAAAoH,EAAA,QAAA,KAAAnH,IAMA7d,KAAA8kB,OAAA,SAAAjH,GACAD,EAAA,SAAAoH,EAAA,QAAA,KAAAnH,IAMA7d,KAAA0kB,UAAA,SAAA7G,GACAD,EAAA,MAAAoH,EAAA,QAAA,KAAAnH,KAOA5d,EAAAilB,MAAA,SAAAzH,GACA,GAAA1R,GAAA,UAAA0R,EAAAqD,KAAA,IAAArD,EAAAoD,KAAA,SAEA7gB,MAAAmlB,KAAA,SAAA1H,EAAAI,GACA,GAAAuH,KAEA,KAAA,GAAA9gB,KAAAmZ,GACAA,EAAAtO,eAAA7K,IACA8gB,EAAA1e,KAAAuE,mBAAA3G,GAAA,IAAA2G,mBAAAwS,EAAAnZ,IAIA6Z,GAAApS,EAAA,IAAAqZ,EAAA5Z,KAAA,KAAAqS,IAGA7d,KAAAqlB,QAAA,SAAAC,EAAAD,EAAAxH,GACAD,EAAA,OAAA0H,EAAAC,cACAC,KAAAH,GACAxH,KAOA5d,EAAAwlB,OAAA,SAAAhI,GACA,GAAA1R,GAAA,WACAqZ,EAAA,MAAA3H,EAAA2H,KAEAplB,MAAA0lB,aAAA,SAAAjI,EAAAI,GACAD,EAAA,MAAA7R,EAAA,eAAAqZ,EAAA3H,EAAAI,IAGA7d,KAAAa,KAAA,SAAA4c,EAAAI,GACAD,EAAA,MAAA7R,EAAA,OAAAqZ,EAAA3H,EAAAI,IAGA7d,KAAA2lB,OAAA,SAAAlI,EAAAI,GACAD,EAAA,MAAA7R,EAAA,SAAAqZ,EAAA3H,EAAAI,IAGA7d,KAAA4lB,MAAA,SAAAnI,EAAAI,GACAD,EAAA,MAAA7R,EAAA,QAAAqZ,EAAA3H,EAAAI,KAOA5d,EAAA4lB,UAAA,WACA7lB,KAAA8lB,aAAA,SAAAjI,GACAD,EAAA,MAAA,cAAA,KAAAC,KAIA5d,EA8CA,OAxCAA,GAAA8lB,UAAA,SAAAjF,EAAAD,GACA,MAAA,IAAA5gB,GAAAilB,OACApE,KAAAA,EACAD,KAAAA,KAIA5gB,EAAA+lB,QAAA,SAAAlF,EAAAD,GACA,MAAAA,GAKA,GAAA5gB,GAAAogB,YACAS,KAAAA,EACAhW,KAAA+V,IANA,GAAA5gB,GAAAogB,YACAU,SAAAD,KAUA7gB,EAAAgmB,QAAA,WACA,MAAA,IAAAhmB,GAAA8e,MAGA9e,EAAAimB,QAAA,SAAAle,GACA,MAAA,IAAA/H,GAAA8kB,MACA/c,GAAAA,KAIA/H,EAAAkmB,UAAA,SAAAf,GACA,MAAA,IAAAnlB,GAAAwlB,QACAL,MAAAA,KAIAnlB,EAAA6lB,aAAA,WACA,MAAA,IAAA7lB,GAAA4lB,WAGA5lB,MrBo8EG6G,MAAQ,EAAEsf,UAAU,GAAGC,cAAc,GAAGlJ,KAAO,UAAU,KAAK","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 97751c48..9ec6ade8 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(l.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(l).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),n+="?"+o.join("&"),u(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e){u("/users/"+t+"/repos?type=all&per_page=100&sort=updated",e)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===l.branch&&l.sha?e(null,l.sha):void c.getRef("heads/"+t,function(n,o){l.branch=t,l.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,o))})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e,n){return t?r(t):(l.sha=e.sha,void r(null,e.sha,n))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,s,!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(e),f,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var p={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(p.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(p).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===p.branch&&p.sha?t(null,p.sha):void c.getRef("heads/"+e,function(n,o){p.branch=e,p.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var p={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(p.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,p){var l={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=p),n("PUT",o+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 0eb8b081..eb16ca93 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index 0573f026..91753b5a 100644 --- a/src/github.js +++ b/src/github.js @@ -249,9 +249,26 @@ // List user repositories // ------- - this.userRepos = function (username, cb) { - // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/users/' + username + '/repos?type=all&per_page=100&sort=updated', cb); + this.userRepos = function (username, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + var url = '/users/' + username + '/repos'; + var params = []; + + params.push('type=' + encodeURIComponent(options.type || 'all')); + params.push('sort=' + encodeURIComponent(options.sort || 'updated')); + params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore + + if (options.page) { + params.push('page=' + encodeURIComponent(options.page)); + } + + url += '?' + params.join('&'); + + _requestAllPages(url, cb); }; // List user starred repositories diff --git a/test/test.user.js b/test/test.user.js index 2752f34d..9ccdb0ff 100644 --- a/test/test.user.js +++ b/test/test.user.js @@ -94,10 +94,27 @@ describe('Github.User', function() { }); it('should show user\'s repos', function(done) { - // This is odd; userRepos times out on the test user, but user.repos does not. user.userRepos('aendrew', function(err, repos, xhr) { should.not.exist(err); xhr.should.be.instanceof(XMLHttpRequest); + repos.should.be.instanceof(Array); + + done(); + }); + }); + + it('should show user\'s repos with options', function(done) { + var options = { + type: 'owner', + sort: 'updated', + per_page: 90, // jscs:ignore + page: 1 + }; + + user.userRepos('aendrew', options, function(err, repos, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + repos.should.be.instanceof(Array); done(); }); From 36d6b27413cd0bf1fd719fa74486000bcd7ced29 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 01:23:14 +0000 Subject: [PATCH 074/217] Allow for unauthenticated requests Fixes gh-187 --- README.md | 10 +++++++++- dist/github.bundle.min.js | 4 ++-- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 2 ++ test/test.auth.js | 15 +++++++++++++++ 7 files changed, 31 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b6f0e11d..c62df1f2 100644 --- a/README.md +++ b/README.md @@ -57,9 +57,17 @@ var github = new Github({ }); ``` -You can use either: +Some information, such as public Gists, can be accessed without any authentication. For such use cases, you can create +a Github instance as follows: + +```js +var github = new Github(); +``` + +In conclusion, you can use: * Authorised App Tokens (via client/secret pairs), used for bigger applications, created in web-flows/on the fly * Personal Access Tokens (simpler to set up), used on command lines, scripts etc, created in GitHub web UI +* No authorization See these pages for more info: diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index ea3777aa..32b6b238 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function _(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function R(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?R(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?_(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),I(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(I,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(I,e)}function I(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&B(),this instanceof F?D(this,e):H())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new O,ce=new O,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var R in E)_.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{ -axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function _(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function R(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?R(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?_(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),I(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(I,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(I,e)}function I(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&B(),this instanceof F?D(this,e):H())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new O,ce=new O,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var R in E)_.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit; +},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 86fbfcfd..f5d6036c 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 9ec6ade8..73148077 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var p={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(p.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(p).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===p.branch&&p.sha?t(null,p.sha):void c.getRef("heads/"+e,function(n,o){p.branch=e,p.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var p={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(p.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,p){var l={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=p),n("PUT",o+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var p={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(p.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(p).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===p.branch&&p.sha?t(null,p.sha):void c.getRef("heads/"+e,function(n,o){p.branch=e,p.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var p={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(p.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,p){var l={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=p),n("PUT",o+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index eb16ca93..f03c9cdc 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index 91753b5a..48efe427 100644 --- a/src/github.js +++ b/src/github.js @@ -43,6 +43,8 @@ // ------------- var Github = function (options) { + options = options || {}; + var API_URL = options.apiUrl || 'https://api.github.com'; // HTTP Request Abstraction diff --git a/test/test.auth.js b/test/test.auth.js index b47ab489..154a3cae 100644 --- a/test/test.auth.js +++ b/test/test.auth.js @@ -23,6 +23,21 @@ describe('Github constructor', function() { }); }); +describe('Github constructor without authentication data', function() { + it('should read public information', function(done) { + var github = new Github(); + var gist = github.getGist('f1c0f84e53aa6b98ec03'); + + gist.read(function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.should.be.an('object'); + + done(); + }); + }); +}); + describe('Github constructor (failing case)', function() { before(function() { github = new Github({ From 19b539f5ad6f861f78d7a2bc4a1a671740aba2c5 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Thu, 28 Jan 2016 20:14:39 +0100 Subject: [PATCH 075/217] Added methods to edit and get an issue Closes gh-284 --- README.md | 26 +++++++++++++++++++++++++- dist/github.bundle.min.js | 4 ++-- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 8 ++++++++ test/test.issue.js | 26 ++++++++++++++++++++++++++ 7 files changed, 64 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c62df1f2..08e5d4a5 100644 --- a/README.md +++ b/README.md @@ -389,7 +389,31 @@ issues.list(options, function(err, issues) {}); To comment in a issue ```js -issues.comment(issue, comment,function(err, comment) {}); +issues.comment(issue, comment, function(err, comment) {}); +``` + +To edit an issue + +```js +var options = { + title: "Found a bug", + body: "I'm having a problem with this.", + assignee: "assignee_username", + milestone: 1, + state: "open", + labels: [ + "Label1", + "Label2" + ] +}; + +issues.edit(issue, options, function (err, issue) {}); +``` + +To get an issue + +```js +issues.get(issue, function (err, issue) {}); ``` ## Search API diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 32b6b238..1afe80be 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function _(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function R(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?R(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?_(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),I(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(I,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(I,e)}function I(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function B(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&B(),this instanceof F?D(this,e):H())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new O,ce=new O,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var R in E)_.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit; -},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function R(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function A(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?R(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?A(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),I(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&H(),this instanceof F?D(this,t):B())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new O,ct=new O,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);A(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var R in E)_.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)},this.edit=function(t,r,o){n("PATCH",e+"/"+t,r,o)},this.get=function(t,r){n("GET",e+"/"+t,null,r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){ +return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index f5d6036c..bd2ad2c8 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 73148077..711318c6 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var p={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(p.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(p).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===p.branch&&p.sha?t(null,p.sha):void c.getRef("heads/"+e,function(n,o){p.branch=e,p.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var p={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(p.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,p){var l={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=p),n("PUT",o+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index f03c9cdc..edfcde46 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAEM,cACA,UACA,OACA,SAEH,SAAUE,EAASC,EAAQC,EAAMC,GAC9B,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAGjC,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpBA,EAAUA,KAEV,IAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAI,GAAIS,KAASP,GACVA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAKhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAQK,cAAgB1B,EAAQ2B,MACvC,SAAW3B,EAAQ2B,MACnB,SAAW/B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTQ,KAAK,SAAUC,GACbtB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVxB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,SAGZvB,GACGF,KAAMA,EACNyB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB5C,EAAO4C,iBAAmB,SAA0B5B,EAAME,GAC9E,GAAI2B,OAEJ,QAAUC,KACPhC,EAAS,MAAOE,EAAM,KAAM,SAAU+B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO7B,GAAG6B,EAGPC,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAAQJ,EAAIK,kBAAkB,SAAW,IACzCC,MAAM,KACNC,OAAO,SAASC,GACd,MAAO,aAAalC,KAAKkC,KAE3BC,IAAI,SAASD,GACX,OAAQ,SAASE,KAAKF,QAAa,KAErCG,KAECP,IAGFrC,EAAOqC,EACPP,KAHA5B,EAAG6B,EAAKF,EAASI,QA26B7B,OA/5BAjD,GAAO6D,KAAO,WACXvD,KAAKwD,MAAQ,SAAUnD,EAASO,GACJ,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN4C,IAEJA,GAAOd,KAAK,QAAUzB,mBAAmBf,EAAQuD,MAAQ,QACzDD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,MAAQ,YACzDF,EAAOd,KAAK,YAAczB,mBAAmBf,EAAQyD,UAAY,QAE7DzD,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGpDhD,GAAO,IAAM4C,EAAOK,KAAK,KAEzB1B,EAAiBvB,EAAKH,IAMzBZ,KAAKiE,KAAO,SAAUrD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKkE,MAAQ,SAAUtD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKmE,cAAgB,SAAU9D,EAASO,GACZ,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN4C,IAUJ,IARItD,EAAQ+D,KACTT,EAAOd,KAAK,YAGXxC,EAAQgE,eACTV,EAAOd,KAAK,sBAGXxC,EAAQiE,MAAO,CAChB,GAAIA,GAAQjE,EAAQiE,KAEhBA,GAAMC,cAAgBhD,OACvB+C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmBkD,IAG7C,GAAIjE,EAAQoE,OAAQ,CACjB,GAAIA,GAASpE,EAAQoE,MAEjBA,GAAOF,cAAgBhD,OACxBkD,EAASA,EAAOD,eAGnBb,EAAOd,KAAK,UAAYzB,mBAAmBqD,IAG1CpE,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGhDJ,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK0E,KAAO,SAAU7C,EAAUjB,GAC7B,GAAI+D,GAAU9C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOmE,EAAS,KAAM/D,IAMlCZ,KAAK4E,UAAY,SAAU/C,EAAUxB,EAASO,GACpB,kBAAZP,KACRO,EAAKP,EACLA,KAGH,IAAIU,GAAM,UAAYc,EAAW,SAC7B8B,IAEJA,GAAOd,KAAK,QAAUzB,mBAAmBf,EAAQuD,MAAQ,QACzDD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,MAAQ,YACzDF,EAAOd,KAAK,YAAczB,mBAAmBf,EAAQyD,UAAY,QAE7DzD,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGpDhD,GAAO,IAAM4C,EAAOK,KAAK,KAEzB1B,EAAiBvB,EAAKH,IAMzBZ,KAAK6E,YAAc,SAAUhD,EAAUjB,GAEpC0B,EAAiB,UAAYT,EAAW,iCAAkCjB,IAM7EZ,KAAK8E,UAAY,SAAUjD,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK+E,SAAW,SAAUC,EAASpE,GAEhC0B,EAAiB,SAAW0C,EAAU,6DAA8DpE,IAMvGZ,KAAKiF,OAAS,SAAUpD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKkF,SAAW,SAAUrD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKmF,WAAa,SAAU9E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAO0F,WAAa,SAAU/E,GAsB3B,QAASgF,GAAWC,EAAQ1E,GACzB,MAAI0E,KAAWC,EAAYD,QAAUC,EAAYC,IACvC5E,EAAG,KAAM2E,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU7C,EAAK+C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB5E,EAAG6B,EAAK+C,KA7Bd,GAKIG,GALAC,EAAOvF,EAAQwF,KACfC,EAAOzF,EAAQyF,KACfC,EAAW1F,EAAQ0F,SAEnBN,EAAOzF,IAIR2F,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRxF,MAAK0F,OAAS,SAAUM,EAAKpF,GAC1BJ,EAAS,MAAOmF,EAAW,aAAeK,EAAK,KAAM,SAAUvD,EAAKC,EAAKC,GACtE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAIuD,OAAOT,IAAK7C,MAY/B3C,KAAKkG,UAAY,SAAU7F,EAASO,GACjCJ,EAAS,OAAQmF,EAAW,YAAatF,EAASO,IASrDZ,KAAKmG,UAAY,SAAUH,EAAKpF,GAC7BJ,EAAS,SAAUmF,EAAW,aAAeK,EAAK3F,EAASO,IAM9DZ,KAAKmF,WAAa,SAAU9E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,IAM5CZ,KAAKoG,WAAa,SAAUxF,GACzBJ,EAAS,SAAUmF,EAAUtF,EAASO,IAMzCZ,KAAKqG,SAAW,SAAUzF,GACvBJ,EAAS,MAAOmF,EAAW,QAAS,KAAM/E,IAM7CZ,KAAKsG,UAAY,SAAUjG,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,SACjBhC,IAEmB,iBAAZtD,GAERsD,EAAOd,KAAK,SAAWxC,IAEnBA,EAAQkG,OACT5C,EAAOd,KAAK,SAAWzB,mBAAmBf,EAAQkG,QAGjDlG,EAAQmG,MACT7C,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQmG,OAGhDnG,EAAQoG,MACT9C,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQoG,OAGhDpG,EAAQwD,MACTF,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGhDxD,EAAQqG,WACT/C,EAAOd,KAAK,aAAezB,mBAAmBf,EAAQqG,YAGrDrG,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUxC,EAAQ0D,MAG7B1D,EAAQyD,UACTH,EAAOd,KAAK,YAAcxC,EAAQyD,WAIpCH,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK2G,QAAU,SAAUC,EAAQhG,GAC9BJ,EAAS,MAAOmF,EAAW,UAAYiB,EAAQ,KAAMhG,IAMxDZ,KAAK6G,QAAU,SAAUJ,EAAMD,EAAM5F,GAClCJ,EAAS,MAAOmF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM5F,IAMvEZ,KAAK8G,aAAe,SAAUlG,GAC3BJ,EAAS,MAAOmF,EAAW,kBAAmB,KAAM,SAAUlD,EAAKsE,EAAOpE,GACvE,MAAIF,GACM7B,EAAG6B,IAGbsE,EAAQA,EAAM3D,IAAI,SAAUoD,GACzB,MAAOA,GAAKR,IAAI3E,QAAQ,iBAAkB,UAG7CT,GAAG,KAAMmG,EAAOpE,OAOtB3C,KAAKgH,QAAU,SAAUxB,EAAK5E,GAC3BJ,EAAS,MAAOmF,EAAW,cAAgBH,EAAK,KAAM5E,EAAI,QAM7DZ,KAAKiH,UAAY,SAAU3B,EAAQE,EAAK5E,GACrCJ,EAAS,MAAOmF,EAAW,gBAAkBH,EAAK,KAAM5E,IAM3DZ,KAAKkH,OAAS,SAAU5B,EAAQ5E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MAIbF,GAAS,MAAOmF,EAAW,aAAejF,GAAQ4E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU7C,EAAK0E,EAAaxE,GAC/B,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAMuG,EAAY3B,IAAK7C,KATtB8C,EAAKC,OAAO,SAAWJ,EAAQ1E,IAgB5CZ,KAAKoH,YAAc,SAAU5B,EAAK5E,GAC/BJ,EAAS,MAAOmF,EAAW,aAAeH,EAAK,KAAM5E,IAMxDZ,KAAKqH,QAAU,SAAUC,EAAM1G,GAC5BJ,EAAS,MAAOmF,EAAW,cAAgB2B,EAAM,KAAM,SAAU7E,EAAKC,EAAKC,GACxE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI4E,KAAM3E,MAOzB3C,KAAKuH,SAAW,SAAUC,EAAS5G,GAE7B4G,EADsB,gBAAd,IAELA,QAASA,EACTC,SAAU,UAIVD,QAASvH,EAAUuH,GACnBC,SAAU,UAIhBjH,EAAS,OAAQmF,EAAW,aAAc6B,EAAS,SAAU/E,EAAKC,EAAKC,GACpE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAOxB3C,KAAKqF,WAAa,SAAUqC,EAAUhH,EAAMiH,EAAM/G,GAC/C,GAAID,IACDiH,UAAWF,EACXJ,OAEM5G,KAAMA,EACNmH,KAAM,SACNjE,KAAM,OACN4B,IAAKmC,IAKdnH,GAAS,OAAQmF,EAAW,aAAchF,EAAM,SAAU8B,EAAKC,EAAKC,GACjE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK8H,SAAW,SAAUR,EAAM1G,GAC7BJ,EAAS,OAAQmF,EAAW,cACzB2B,KAAMA,GACN,SAAU7E,EAAKC,EAAKC,GACpB,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK+H,OAAS,SAAUC,EAAQV,EAAMW,EAASrH,GAC5C,GAAIkF,GAAO,GAAIpG,GAAO6D,IAEtBuC,GAAKpB,KAAK,KAAM,SAAUjC,EAAKyF,GAC5B,GAAIzF,EACD,MAAO7B,GAAG6B,EAGb,IAAI9B,IACDsH,QAASA,EACTE,QACGtC,KAAMxF,EAAQyF,KACdsC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT9G,GAAS,OAAQmF,EAAW,eAAgBhF,EAAM,SAAU8B,EAAKC,EAAKC,GACnE,MAAIF,GACM7B,EAAG6B,IAGb8C,EAAYC,IAAM9C,EAAI8C,QAEtB5E,GAAG,KAAM8B,EAAI8C,IAAK7C,SAQ3B3C,KAAKsI,WAAa,SAAU9B,EAAMuB,EAAQnH,GACvCJ,EAAS,QAASmF,EAAW,mBAAqBa,GAC/ChB,IAAKuC,GACLnH,IAMNZ,KAAK0E,KAAO,SAAU9D,GACnBJ,EAAS,MAAOmF,EAAU,KAAM/E,IAMnCZ,KAAKuI,aAAe,SAAU3H,EAAI4H,GAC/BA,EAAQA,GAAS,GACjB,IAAI/C,GAAOzF,IAEXQ,GAAS,MAAOmF,EAAW,sBAAuB,KAAM,SAAUlD,EAAK9B,EAAMgC,GAC1E,MAAIF,GACM7B,EAAG6B,QAGM,MAAfE,EAAIP,OACLqG,WACG,WACGhD,EAAK8C,aAAa3H,EAAI4H,IAEzBA,GAGH5H,EAAG6B,EAAK9B,EAAMgC,OAQvB3C,KAAK0I,SAAW,SAAU1C,EAAKtF,EAAME,GAClCF,EAAOiI,UAAUjI,GACjBF,EAAS,MAAOmF,EAAW,aAAejF,EAAO,IAAMA,EAAO,KAC3DsF,IAAKA,GACLpF,IAMNZ,KAAK4I,KAAO,SAAUhI,GACnBJ,EAAS,OAAQmF,EAAW,SAAU,KAAM/E,IAM/CZ,KAAK6I,UAAY,SAAUjI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKsF,OAAS,SAAUwD,EAAWC,EAAWnI,GAClB,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKmI,EACLA,EAAYD,EACZA,EAAY,UAGf9I,KAAK0F,OAAO,SAAWoD,EAAW,SAAUrG,EAAKuD,GAC9C,MAAIvD,IAAO7B,EACDA,EAAG6B,OAGbgD,GAAKS,WACFF,IAAK,cAAgB+C,EACrBvD,IAAKQ,GACLpF,MAOTZ,KAAKgJ,kBAAoB,SAAU3I,EAASO,GACzCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKiJ,UAAY,SAAUrI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKkJ,QAAU,SAAUC,EAAIvI,GAC1BJ,EAAS,MAAOmF,EAAW,UAAYwD,EAAI,KAAMvI,IAMpDZ,KAAKoJ,WAAa,SAAU/I,EAASO,GAClCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKqJ,SAAW,SAAUF,EAAI9I,EAASO,GACpCJ,EAAS,QAASmF,EAAW,UAAYwD,EAAI9I,EAASO,IAMzDZ,KAAKsJ,WAAa,SAAUH,EAAIvI,GAC7BJ,EAAS,SAAUmF,EAAW,UAAYwD,EAAI,KAAMvI,IAMvDZ,KAAKuJ,KAAO,SAAUjE,EAAQ5E,EAAME,GACjCJ,EAAS,MAAOmF,EAAW,aAAegD,UAAUjI,IAAS4E,EAAS,QAAUA,EAAS,IACtF,KAAM1E,GAAI,IAMhBZ,KAAKwJ,OAAS,SAAUlE,EAAQ5E,EAAME,GACnC6E,EAAKyB,OAAO5B,EAAQ5E,EAAM,SAAU+B,EAAK+C,GACtC,MAAI/C,GACM7B,EAAG6B,OAGbjC,GAAS,SAAUmF,EAAW,aAAejF,GAC1CuH,QAASvH,EAAO,cAChB8E,IAAKA,EACLF,OAAQA,GACR1E,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUnE,EAAQ5E,EAAMgJ,EAAS9I,GAC1CyE,EAAWC,EAAQ,SAAU7C,EAAKkH,GAC/BlE,EAAK4B,QAAQsC,EAAe,kBAAmB,SAAUlH,EAAK6E,GAE3DA,EAAKsC,QAAQ,SAAU5D,GAChBA,EAAItF,OAASA,IACdsF,EAAItF,KAAOgJ,GAGG,SAAb1D,EAAIpC,YACEoC,GAAIR,MAIjBC,EAAKqC,SAASR,EAAM,SAAU7E,EAAKoH,GAChCpE,EAAKsC,OAAO4B,EAAcE,EAAU,WAAanJ,EAAM,SAAU+B,EAAKsF,GACnEtC,EAAK6C,WAAWhD,EAAQyC,EAAQnH,YAU/CZ,KAAK8J,MAAQ,SAAUxE,EAAQ5E,EAAM8G,EAASS,EAAS5H,EAASO,GAC3C,mBAAPA,KACRA,EAAKP,EACLA,MAGHoF,EAAKyB,OAAO5B,EAAQqD,UAAUjI,GAAO,SAAU+B,EAAK+C,GACjD,GAAIuE,IACD9B,QAASA,EACTT,QAAmC,mBAAnBnH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUuH,GAAWA,EACxFlC,OAAQA,EACR0E,UAAW3J,GAAWA,EAAQ2J,UAAY3J,EAAQ2J,UAAYC,OAC9D9B,OAAQ9H,GAAWA,EAAQ8H,OAAS9H,EAAQ8H,OAAS8B,OAIlDxH,IAAqB,MAAdA,EAAIJ,QACd0H,EAAavE,IAAMA,GAGtBhF,EAAS,MAAOmF,EAAW,aAAegD,UAAUjI,GAAOqJ,EAAcnJ,MAY/EZ,KAAKkK,WAAa,SAAU7J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,WACjBhC,IAcJ,IAZItD,EAAQmF,KACT7B,EAAOd,KAAK,OAASzB,mBAAmBf,EAAQmF,MAG/CnF,EAAQK,MACTiD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQK,OAGhDL,EAAQ8H,QACTxE,EAAOd,KAAK,UAAYzB,mBAAmBf,EAAQ8H,SAGlD9H,EAAQiE,MAAO,CAChB,GAAIA,GAAQjE,EAAQiE,KAEhBA,GAAMC,cAAgBhD,OACvB+C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmBkD,IAG7C,GAAIjE,EAAQ8J,MAAO,CAChB,GAAIA,GAAQ9J,EAAQ8J,KAEhBA,GAAM5F,cAAgBhD,OACvB4I,EAAQA,EAAM3F,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmB+I,IAGzC9J,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUxC,EAAQ0D,MAG7B1D,EAAQ+J,SACTzG,EAAOd,KAAK,YAAcxC,EAAQ+J,SAGjCzG,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKqK,UAAY,SAASC,EAAOC,EAAY3J,GAC1CJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKwK,KAAO,SAASF,EAAOC,EAAY3J,GACrCJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKyK,OAAS,SAASH,EAAOC,EAAY3J,GACvCJ,EAAS,SAAU,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,KAO5ElB,EAAOgL,KAAO,SAAUrK,GACrB,GAAI8I,GAAK9I,EAAQ8I,GACbwB,EAAW,UAAYxB,CAK3BnJ,MAAKuJ,KAAO,SAAU3I,GACnBJ,EAAS,MAAOmK,EAAU,KAAM/J,IAenCZ,KAAK4K,OAAS,SAAUvK,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUmK,EAAU,KAAM/J,IAMtCZ,KAAK4I,KAAO,SAAUhI,GACnBJ,EAAS,OAAQmK,EAAW,QAAS,KAAM/J,IAM9CZ,KAAK6K,OAAS,SAAUxK,EAASO,GAC9BJ,EAAS,QAASmK,EAAUtK,EAASO,IAMxCZ,KAAKwK,KAAO,SAAU5J,GACnBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,IAM7CZ,KAAKyK,OAAS,SAAU7J,GACrBJ,EAAS,SAAUmK,EAAW,QAAS,KAAM/J,IAMhDZ,KAAKqK,UAAY,SAAUzJ,GACxBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,KAOhDlB,EAAOoL,MAAQ,SAAUzK,GACtB,GAAIK,GAAO,UAAYL,EAAQyF,KAAO,IAAMzF,EAAQuF,KAAO,SAE3D5F,MAAK+K,KAAO,SAAU1K,EAASO,GAC5B,GAAIoK,KAEJ,KAAI,GAAIC,KAAO5K,GACRA,EAAQc,eAAe8J,IACxBD,EAAMnI,KAAKzB,mBAAmB6J,GAAO,IAAM7J,mBAAmBf,EAAQ4K,IAI5E3I,GAAiB5B,EAAO,IAAMsK,EAAMhH,KAAK,KAAMpD,IAGlDZ,KAAKkL,QAAU,SAAUC,EAAOD,EAAStK,GACtCJ,EAAS,OAAQ2K,EAAMC,cACpBC,KAAMH,GACNtK,IAGNZ,KAAKsL,KAAO,SAAUH,EAAO9K,EAASO,GACnCJ,EAAS,QAASE,EAAO,IAAMyK,EAAO9K,EAASO,IAGlDZ,KAAKuL,IAAM,SAAUJ,EAAOvK,GACzBJ,EAAS,MAAOE,EAAO,IAAMyK,EAAO,KAAMvK,KAOhDlB,EAAO8L,OAAS,SAAUnL,GACvB,GAAIK,GAAO,WACPsK,EAAQ,MAAQ3K,EAAQ2K,KAE5BhL,MAAKyL,aAAe,SAAUpL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiBsK,EAAO3K,EAASO,IAG3DZ,KAAK0L,KAAO,SAAUrL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAASsK,EAAO3K,EAASO,IAGnDZ,KAAK2L,OAAS,SAAUtL,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAWsK,EAAO3K,EAASO,IAGrDZ,KAAK4L,MAAQ,SAAUvL,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAUsK,EAAO3K,EAASO,KAOvDlB,EAAOmM,UAAY,WAChB7L,KAAK8L,aAAe,SAASlL,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOqM,UAAY,SAAUjG,EAAMF,GAChC,MAAO,IAAIlG,GAAOoL,OACfhF,KAAMA,EACNF,KAAMA,KAIZlG,EAAOsM,QAAU,SAAUlG,EAAMF,GAC9B,MAAKA,GAKK,GAAIlG,GAAO0F,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIlG,GAAO0F,YACfW,SAAUD,KAUnBpG,EAAOuM,QAAU,WACd,MAAO,IAAIvM,GAAO6D,MAGrB7D,EAAOwM,QAAU,SAAU/C,GACxB,MAAO,IAAIzJ,GAAOgL,MACfvB,GAAIA,KAIVzJ,EAAOyM,UAAY,SAAUnB,GAC1B,MAAO,IAAItL,GAAO8L,QACfR,MAAOA,KAIbtL,EAAOoM,aAAe,WACnB,MAAO,IAAIpM,GAAOmM,WAGdnM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index 48efe427..32dec419 100644 --- a/src/github.js +++ b/src/github.js @@ -1032,6 +1032,14 @@ body: comment }, cb); }; + + this.edit = function (issue, options, cb) { + _request('PATCH', path + '/' + issue, options, cb); + }; + + this.get = function (issue, cb) { + _request('GET', path + '/' + issue, null, cb); + }; }; // Search API diff --git a/test/test.issue.js b/test/test.issue.js index 1c2cf070..c9d573ff 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -36,4 +36,30 @@ describe('Github.Issue', function() { }); }); }); + + it('should edit issues title', function(done) { + issues.list({}, function(err, issuesList) { + issues.edit(issuesList[0].number, { + title: 'Edited title' + }, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.title.should.equal('Edited title'); + + done(); + }); + }); + }); + + it('should get issue', function(done) { + issues.list({}, function(err, issuesList) { + issues.get(issuesList[0].number, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.number.should.equal(issuesList[0].number); + + done(); + }); + }); + }); }); From 136b1d3ca2c68e18327481983a0c8851509db613 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 01:40:45 +0000 Subject: [PATCH 076/217] Optimized issues tests --- test/test.issue.js | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/test/test.issue.js b/test/test.issue.js index c9d573ff..5fac713c 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -5,6 +5,8 @@ var testUser = require('./user.json'); var github, issues; describe('Github.Issue', function() { + var issue; + before(function() { github = new Github({ username: testUser.USERNAME, @@ -21,45 +23,41 @@ describe('Github.Issue', function() { xhr.should.be.instanceof(XMLHttpRequest); issues.should.have.length.above(0); + issue = issues[0]; + done(); }); }); it('should post issue comment', function(done) { - issues.list({}, function(err, issuesList) { - issues.comment(issuesList[0], 'Comment test', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.body.should.equal('Comment test'); + issues.comment(issue, 'Comment test', function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.body.should.equal('Comment test'); - done(); - }); + done(); }); }); it('should edit issues title', function(done) { - issues.list({}, function(err, issuesList) { - issues.edit(issuesList[0].number, { - title: 'Edited title' - }, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.title.should.equal('Edited title'); + issues.edit(issue.number, { + title: 'Edited title' + }, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.title.should.equal('Edited title'); - done(); - }); + done(); }); }); it('should get issue', function(done) { - issues.list({}, function(err, issuesList) { - issues.get(issuesList[0].number, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.number.should.equal(issuesList[0].number); + issues.get(issue.number, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.number.should.equal(issue.number); - done(); - }); + done(); }); }); }); From 7bdf5820df4a9f3164b45147862f706ffadb5ea4 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 01:51:27 +0000 Subject: [PATCH 077/217] Removed duplicated createRepo() method --- dist/github.bundle.min.js | 4 ++-- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 7 ------- 5 files changed, 5 insertions(+), 12 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 1afe80be..c7eb3544 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,3 +1,3 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function R(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function A(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?R(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?A(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),I(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&H(),this instanceof F?D(this,t):B())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new O,ct=new O,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);A(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var R in E)_.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)},this.edit=function(t,r,o){n("PATCH",e+"/"+t,r,o)},this.get=function(t,r){n("GET",e+"/"+t,null,r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){ -return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),I(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&H(),this instanceof F?D(this,t):B())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new O,ct=new O,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)},this.edit=function(t,r,o){n("PATCH",e+"/"+t,r,o)},this.get=function(t,r){n("GET",e+"/"+t,null,r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){ +return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index bd2ad2c8..5d22fcd4 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"CAAA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,OAAAV,MAAA,WAAA,GAAAG,EAAA,OAAA,SAAAQ,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAP,EAAAjB,EAAAD,GCAAC,EAAAD,QAAAkB,EAAA,iBCEGQ,cAAc,IAAIC,GAAG,SAAST,EAAQjB,EAAOD,GCFhD,YAEA,IAAA4B,GAAAV,EAAA,cACAW,EAAAX,EAAA,yBACAY,EAAAZ,EAAA,6BACAa,EAAAb,EAAA,8BACAc,EAAAd,EAAA,gCACAe,EAAA5B,OAAA4B,MAAAf,EAAA,oBAEAjB,GAAAD,QAAA,SAAAkC,EAAAC,EAAAC,GACA,GAAAC,GAAAD,EAAAE,KACAC,EAAAH,EAAAI,OAEAZ,GAAAa,WAAAJ,UACAE,GAAA,eAGA,IAAAG,GAAA,GAAAC,eASA,KALAtC,OAAAuC,gBAAA,mBAAAF,IAAAV,EAAAI,EAAAS,OACAH,EAAA,GAAArC,QAAAuC,gBAIAR,EAAAU,KAAA,CACA,GAAAC,GAAAX,EAAAU,KAAAC,UAAA,GACAC,EAAAZ,EAAAU,KAAAE,UAAA,EACAT,GAAAU,cAAA,SAAAhB,EAAAc,EAAA,IAAAC,GAqDA,GAlDAN,EAAAQ,KAAAd,EAAAe,OAAAC,cAAAvB,EAAAO,EAAAS,IAAAT,EAAAiB,OAAAjB,EAAAkB,mBAAA,GAGAZ,EAAAa,QAAAnB,EAAAmB,QAGAb,EAAAc,OAAA,WACA,GAAAd,EAAA,CAIA,GAAAe,GAAA,yBAAAf,GAAAZ,EAAAY,EAAAgB,yBAAA,KACAC,EAAA,MAAA,OAAA,IAAAC,QAAAxB,EAAAyB,cAAA,IAAAnB,EAAAoB,aAAApB,EAAAqB,SACAA,GACAzB,KAAAP,EACA4B,EACAF,EACArB,EAAA4B,mBAGAC,OAAA,OAAAvB,EAAAuB,OAAA,IAAAvB,EAAAuB,OACAC,WAAA,OAAAxB,EAAAuB,OAAA,aAAAvB,EAAAwB,WACA1B,QAAAiB,EACArB,OAAAA,EACAM,QAAAA,IAIAqB,EAAAE,QAAA,KAAAF,EAAAE,OAAA,OACA,UAAAvB,KAAAqB,EAAAD,aACA5B,EACAC,GAAA4B,GAGArB,EAAA,OAIAA,EAAAyB,QAAA,WAGAhC,EAAA,GAAAf,OAAA,kBAGAsB,EAAA,MAMAd,EAAAwC,uBAAA,CACA,GAAAC,GAAAnD,EAAA,wBAGAoD,EAAAlC,EAAAmC,iBAAAvC,EAAAI,EAAAS,KACAwB,EAAAG,KAAApC,EAAAqC,gBACAC,MAEAJ,KACA/B,EAAAH,EAAAuC,gBAAAL,GAuBA,GAlBA,oBAAA5B,IACAd,EAAAgD,QAAArC,EAAA,SAAAsC,EAAAC,GACA,mBAAAzC,IAAA,iBAAAyC,EAAAC,oBAEAxC,GAAAuC,GAGApC,EAAAsC,iBAAAF,EAAAD,KAMAzC,EAAAmC,kBACA7B,EAAA6B,iBAAA,GAIAnC,EAAAyB,aACA,IACAnB,EAAAmB,aAAAzB,EAAAyB,aACA,MAAAnD,GACA,GAAA,SAAAgC,EAAAmB,aACA,KAAAnD,GAKAkB,EAAAqD,cAAA5C,KACAA,EAAA,GAAA6C,UAAA7C,IAIAK,EAAAyC,KAAA9C,MDMG+C,oBAAoB,EAAEC,wBAAwB,EAAEC,uBAAuB,GAAGC,+BAA+B,GAAGC,4BAA4B,GAAGC,6BAA6B,GAAGC,aAAa,KAAKC,GAAG,SAASzE,EAAQjB,EAAOD,GEvI3N,YAWA,SAAA4F,GAAAC,GACArF,KAAAsF,SAAAlE,EAAAmE,SAAAF,GACArF,KAAAwF,cACAtD,QAAA,GAAAuD,GACAlC,SAAA,GAAAkC,IAbA,GAAAH,GAAA5E,EAAA,cACAU,EAAAV,EAAA,WACAgF,EAAAhF,EAAA,0BACA+E,EAAA/E,EAAA,6BACAiF,EAAAjF,EAAA,2BACAkF,EAAAlF,EAAA,yBACAmF,EAAAnF,EAAA,kBACAa,EAAAb,EAAA,0BAUA0E,GAAAU,UAAA5D,QAAA,SAAAN,GAGA,gBAAAA,KACAA,EAAAR,EAAAmE,OACAlD,IAAA0D,UAAA,IACAA,UAAA,KAGAnE,EAAAR,EAAAmE,MAAAD,EAAAtF,KAAAsF,UAAA3C,OAAA,OAAAf,GAGAA,EAAAoE,UAAAL,EAAA/D,EAAAS,OACAT,EAAAS,IAAAuD,EAAAhE,EAAAoE,QAAApE,EAAAS,MAIAT,EAAAmC,gBAAAnC,EAAAmC,iBAAA/D,KAAAsF,SAAAvB,gBAGAnC,EAAAE,KAAAP,EACAK,EAAAE,KACAF,EAAAI,QACAJ,EAAAqE,kBAIArE,EAAAI,QAAAZ,EAAAmE,MACA3D,EAAAI,QAAAkE,WACAtE,EAAAI,QAAAJ,EAAAe,YACAf,EAAAI,aAGAZ,EAAAgD,SACA,SAAA,MAAA,OAAA,OAAA,MAAA,QAAA,UACA,SAAAzB,SACAf,GAAAI,QAAAW,IAKA,IAAAwD,IAAAT,EAAAxB,QACAkC,EAAAC,QAAA3E,QAAAE,EAUA,KARA5B,KAAAwF,aAAAtD,QAAAkC,QAAA,SAAAkC,GACAH,EAAAI,QAAAD,EAAAE,UAAAF,EAAAG,YAGAzG,KAAAwF,aAAAjC,SAAAa,QAAA,SAAAkC,GACAH,EAAAO,KAAAJ,EAAAE,UAAAF,EAAAG,YAGAN,EAAAnF,QACAoF,EAAAA,EAAAO,KAAAR,EAAAS,QAAAT,EAAAS,QAGA,OAAAR,GAGA,IAAAS,GAAA,GAAAzB,GAAAE,GACAwB,EAAArH,EAAAD,QAAAqG,EAAAT,EAAAU,UAAA5D,QAAA2E,EAEAC,GAAAC,OAAA,SAAA1B,GACA,MAAA,IAAAD,GAAAC,IAIAyB,EAAAxB,SAAAuB,EAAAvB,SAGAwB,EAAAE,IAAA,SAAAC,GACA,MAAAZ,SAAAW,IAAAC,IAEAH,EAAAI,OAAAxG,EAAA,oBAGAoG,EAAAtB,aAAAqB,EAAArB,aAGApE,EAAAgD,SAAA,SAAA,MAAA,QAAA,SAAAzB,GAEAyC,EAAAU,UAAAnD,GAAA,SAAAN,EAAAT,GACA,MAAA5B,MAAAkC,QAAAd,EAAAmE,MAAA3D,OACAe,OAAAA,EACAN,IAAAA,MAGAyE,EAAAnE,GAAAkD,EAAAT,EAAAU,UAAAnD,GAAAkE,KAGAzF,EAAAgD,SAAA,OAAA,MAAA,SAAA,SAAAzB,GAEAyC,EAAAU,UAAAnD,GAAA,SAAAN,EAAAP,EAAAF,GACA,MAAA5B,MAAAkC,QAAAd,EAAAmE,MAAA3D,OACAe,OAAAA,EACAN,IAAAA,EACAP,KAAAA,MAGAgF,EAAAnE,GAAAkD,EAAAT,EAAAU,UAAAnD,GAAAkE,OF2IGM,4BAA4B,EAAEC,yBAAyB,EAAEC,aAAa,EAAEC,iBAAiB,EAAEC,wBAAwB,GAAGC,0BAA0B,GAAGC,mBAAmB,GAAGC,0BAA0B,GAAGC,UAAU,KAAKC,GAAG,SAASlH,EAAQjB,EAAOD,GGjQnP,YAIA,SAAAiG,KACAzF,KAAA6H,YAHA,GAAAzG,GAAAV,EAAA,aAcA+E,GAAAK,UAAAgC,IAAA,SAAAtB,EAAAC,GAKA,MAJAzG,MAAA6H,SAAAnB,MACAF,UAAAA,EACAC,SAAAA,IAEAzG,KAAA6H,SAAA7G,OAAA,GAQAyE,EAAAK,UAAAiC,MAAA,SAAAC,GACAhI,KAAA6H,SAAAG,KACAhI,KAAA6H,SAAAG,GAAA,OAYAvC,EAAAK,UAAA1B,QAAA,SAAA6D,GACA7G,EAAAgD,QAAApE,KAAA6H,SAAA,SAAAK,GACA,OAAAA,GACAD,EAAAC,MAKAzI,EAAAD,QAAAiG,IHoQGP,aAAa,KAAKiD,GAAG,SAASzH,EAAQjB,EAAOD,IAChD,SAAW4I,GIxTX,YASA3I,GAAAD,QAAA,SAAAoC,GACA,MAAA,IAAAyE,SAAA,SAAA3E,EAAAC,GACA,IACA,GAAA0G,EAEA,mBAAAzG,GAAAyG,QAEAA,EAAAzG,EAAAyG,QACA,mBAAAlG,gBAEAkG,EAAA3H,EAAA,mBACA,mBAAA0H,KAEAC,EAAA3H,EAAA,qBAGA,kBAAA2H,IACAA,EAAA3G,EAAAC,EAAAC,GAEA,MAAA1B,GACAyB,EAAAzB,SJ+TGa,KAAKf,KAAKU,EAAQ,eAElB4H,mBAAmB,EAAEC,kBAAkB,EAAEC,SAAW,KAAKC,GAAG,SAAS/H,EAAQjB,EAAOD,GK9VvF,YAEA,IAAA4B,GAAAV,EAAA,WAEAgI,EAAA,eACAC,GACAC,eAAA,oCAGAnJ,GAAAD,SACAyG,kBAAA,SAAAnE,EAAAE,GACA,MAAAZ,GAAAa,WAAAH,GACAA,EAEAV,EAAAqD,cAAA3C,GACAA,EAEAV,EAAAyH,kBAAA/G,GACAA,EAAAgH,QAEA1H,EAAA2H,SAAAjH,IAAAV,EAAA4H,OAAAlH,IAAAV,EAAA6H,OAAAnH,GAeAA,GAbAV,EAAA8H,YAAAlH,KACAZ,EAAAgD,QAAApC,EAAA,SAAAqC,EAAAC,GACA,iBAAAA,EAAAC,gBACAvC,EAAA,gBAAAqC,KAIAjD,EAAA8H,YAAAlH,EAAA,mBACAA,EAAA,gBAAA,mCAGAmH,KAAAC,UAAAtH,MAKA0B,mBAAA,SAAA1B,GAEA,GAAA,gBAAAA,GAAA,CACAA,EAAAA,EAAAuH,QAAAX,EAAA,GACA,KACA5G,EAAAqH,KAAAG,MAAAxH,GACA,MAAA5B,KAEA,MAAA4B,KAGAE,SACAkE,QACAqD,OAAA,qCAEAC,MAAApI,EAAAmE,MAAAoD,GACAc,KAAArI,EAAAmE,MAAAoD,GACAe,IAAAtI,EAAAmE,MAAAoD,IAGA5F,QAAA,EAEAkB,eAAA,aACAE,eAAA,kBLkWGwD,UAAU,KAAKgC,GAAG,SAASjJ,EAAQjB,EAAOD,GM/Z7C,YAEAC,GAAAD,QAAA,SAAAyI,EAAA2B,GACA,MAAA,YAEA,IAAA,GADAC,GAAA,GAAAC,OAAA/D,UAAA/E,QACAL,EAAA,EAAAA,EAAAkJ,EAAA7I,OAAAL,IACAkJ,EAAAlJ,GAAAoF,UAAApF,EAEA,OAAAsH,GAAA8B,MAAAH,EAAAC,UNoaMG,GAAG,SAAStJ,EAAQjB,EAAOD,GO5ajC,YAMA,SAAAyK,GAAAC,GACAlK,KAAAkK,QAAAA,EAMA,QAAAzI,GAAA0I,GAGA,IAEA,GAAAC,GAAAC,EAJAC,EAAAC,OAAAJ,GACAK,EAAA,GAGAC,EAAA,EAAAC,EAAAC,EAIAL,EAAAM,OAAA,EAAAH,KAAAC,EAAA,IAAAD,EAAA,GAEAD,GAAAE,EAAAE,OAAA,GAAAR,GAAA,EAAAK,EAAA,EAAA,GACA,CAEA,GADAJ,EAAAC,EAAAO,WAAAJ,GAAA,KACAJ,EAAA,IACA,KAAA,IAAAJ,GAAA,yCAEAG,GAAAA,GAAA,EAAAC,EAEA,MAAAG,GA5BA,GAAAG,GAAA,mEAKAV,GAAAnE,UAAA,GAAAlF,OACAqJ,EAAAnE,UAAAjF,KAAA,EACAoJ,EAAAnE,UAAAgF,KAAA,wBAwBArL,EAAAD,QAAAiC,OP+aMsJ,GAAG,SAASrK,EAAQjB,EAAOD,GQldjC,YAIA,SAAAwL,GAAA3G,GACA,MAAA4G,oBAAA5G,GACAgF,QAAA,QAAA,KACAA,QAAA,QAAA,KACAA,QAAA,OAAA,KACAA,QAAA,QAAA,KACAA,QAAA,OAAA,KACAA,QAAA,QAAA,KACAA,QAAA,QAAA,KAVA,GAAAjI,GAAAV,EAAA,aAoBAjB,GAAAD,QAAA,SAAA6C,EAAAQ,EAAAC,GAEA,IAAAD,EACA,MAAAR,EAGA,IAAA6I,EACA,IAAApI,EACAoI,EAAApI,EAAAD,OACA,CACA,GAAAsI,KAEA/J,GAAAgD,QAAAvB,EAAA,SAAAwB,EAAAC,GACA,OAAAD,GAAA,mBAAAA,KAIAjD,EAAAgK,QAAA/G,KACAC,GAAA,MAGAlD,EAAAgK,QAAA/G,KACAA,GAAAA,IAGAjD,EAAAgD,QAAAC,EAAA,SAAAgH,GACAjK,EAAAkK,OAAAD,GACAA,EAAAA,EAAAE,cACAnK,EAAA2H,SAAAsC,KACAA,EAAAlC,KAAAC,UAAAiC,IAEAF,EAAAzE,KAAAsE,EAAA1G,GAAA,IAAA0G,EAAAK,SAIAH,EAAAC,EAAAK,KAAA,KAOA,MAJAN,KACA7I,IAAA,KAAAA,EAAAe,QAAA,KAAA,IAAA,KAAA8H,GAGA7I,KRudG6C,aAAa,KAAKuG,IAAI,SAAS/K,EAAQjB,EAAOD,GSvhBjD,YASAC,GAAAD,QAAA,SAAAwG,EAAA0F,GACA,MAAA1F,GAAAqD,QAAA,OAAA,IAAA,IAAAqC,EAAArC,QAAA,OAAA,UT2hBMsC,IAAI,SAASjL,EAAQjB,EAAOD,GUriBlC,YAEA,IAAA4B,GAAAV,EAAA,aAEAjB,GAAAD,QACA4B,EAAAwC,uBAGA,WACA,OACAgI,MAAA,SAAAd,EAAAe,EAAAC,EAAAC,EAAAC,EAAAC,GACA,GAAAC,KACAA,GAAAxF,KAAAoE,EAAA,IAAAG,mBAAAY,IAEAzK,EAAA+K,SAAAL,IACAI,EAAAxF,KAAA,WAAA,GAAA0F,MAAAN,GAAAO,eAGAjL,EAAAkL,SAAAP,IACAG,EAAAxF,KAAA,QAAAqF,GAGA3K,EAAAkL,SAAAN,IACAE,EAAAxF,KAAA,UAAAsF,GAGAC,KAAA,GACAC,EAAAxF,KAAA,UAGA6F,SAAAL,OAAAA,EAAAV,KAAA,OAGAxH,KAAA,SAAA8G,GACA,GAAA0B,GAAAD,SAAAL,OAAAM,MAAA,GAAAC,QAAA,aAAA3B,EAAA,aACA,OAAA0B,GAAAE,mBAAAF,EAAA,IAAA,MAGAG,OAAA,SAAA7B,GACA9K,KAAA4L,MAAAd,EAAA,GAAAsB,KAAAQ,MAAA,YAMA,WACA,OACAhB,MAAA,aACA5H,KAAA,WAAA,MAAA,OACA2I,OAAA,mBV2iBGzH,aAAa,KAAK2H,IAAI,SAASnM,EAAQjB,EAAOD,GW5lBjD,YAQAC,GAAAD,QAAA,SAAA6C,GAIA,MAAA,gCAAAyK,KAAAzK,SXgmBM0K,IAAI,SAASrM,EAAQjB,EAAOD,GY5mBlC,YAEA,IAAA4B,GAAAV,EAAA,aAEAjB,GAAAD,QACA4B,EAAAwC,uBAIA,WAWA,QAAAoJ,GAAA3K,GACA,GAAA4K,GAAA5K,CAWA,OATA6K,KAEAC,EAAAC,aAAA,OAAAH,GACAA,EAAAE,EAAAF,MAGAE,EAAAC,aAAA,OAAAH,IAIAA,KAAAE,EAAAF,KACAI,SAAAF,EAAAE,SAAAF,EAAAE,SAAAhE,QAAA,KAAA,IAAA,GACAiE,KAAAH,EAAAG,KACAC,OAAAJ,EAAAI,OAAAJ,EAAAI,OAAAlE,QAAA,MAAA,IAAA,GACAmE,KAAAL,EAAAK,KAAAL,EAAAK,KAAAnE,QAAA,KAAA,IAAA,GACAoE,SAAAN,EAAAM,SACAC,KAAAP,EAAAO,KACAC,SAAA,MAAAR,EAAAQ,SAAA/C,OAAA,GACAuC,EAAAQ,SACA,IAAAR,EAAAQ,UAhCA,GAEAC,GAFAV,EAAA,kBAAAJ,KAAAe,UAAAC,WACAX,EAAAZ,SAAAwB,cAAA,IA2CA,OARAH,GAAAZ,EAAAnN,OAAAmO,SAAAf,MAQA,SAAAgB,GACA,GAAAC,GAAA9M,EAAAkL,SAAA2B,GAAAjB,EAAAiB,GAAAA,CACA,OAAAC,GAAAb,WAAAO,EAAAP,UACAa,EAAAZ,OAAAM,EAAAN,SAKA,WACA,MAAA,YACA,OAAA,QZknBGpI,aAAa,KAAKiJ,IAAI,SAASzN,EAAQjB,EAAOD,GalrBjD,YAEA,IAAA4B,GAAAV,EAAA,aAeAjB,GAAAD,QAAA,SAAAwC,GACA,GACAsC,GACAD,EACA1D,EAHAuN,IAKA,OAAAlM,IAEAZ,EAAAgD,QAAApC,EAAAoM,MAAA,MAAA,SAAAC,GACA1N,EAAA0N,EAAAjL,QAAA,KACAkB,EAAAlD,EAAAkN,KAAAD,EAAAE,OAAA,EAAA5N,IAAA4D,cACAF,EAAAjD,EAAAkN,KAAAD,EAAAE,OAAA5N,EAAA,IAEA2D,IACA4J,EAAA5J,GAAA4J,EAAA5J,GAAA4J,EAAA5J,GAAA,KAAAD,EAAAA,KAIA6J,GAZAA,KbksBGhJ,aAAa,KAAKsJ,IAAI,SAAS9N,EAAQjB,EAAOD,GcztBjD,YAsBAC,GAAAD,QAAA,SAAAiP,GACA,MAAA,UAAAC,GACA,MAAAD,GAAA1E,MAAA,KAAA2E,Ud8tBMC,IAAI,SAASjO,EAAQjB,EAAOD,GetvBlC,YAEA,IAAA4B,GAAAV,EAAA,aAUAjB,GAAAD,QAAA,SAAAsC,EAAAE,EAAA4M,GAMA,MAJAxN,GAAAgD,QAAAwK,EAAA,SAAA3G,GACAnG,EAAAmG,EAAAnG,EAAAE,KAGAF,Kf0vBGoD,aAAa,KAAK2J,IAAI,SAASnO,EAAQjB,EAAOD,GgB5wBjD,YAcA,SAAA4L,GAAA/G,GACA,MAAA,mBAAAyK,EAAA/N,KAAAsD,GASA,QAAAI,GAAAJ,GACA,MAAA,yBAAAyK,EAAA/N,KAAAsD,GASA,QAAApC,GAAAoC,GACA,MAAA,sBAAAyK,EAAA/N,KAAAsD,GASA,QAAAwE,GAAAxE,GACA,GAAA0K,EAMA,OAJAA,GADA,mBAAAC,cAAAA,YAAA,OACAA,YAAAC,OAAA5K,GAEA,GAAAA,EAAA,QAAAA,EAAAyE,iBAAAkG,aAWA,QAAA1C,GAAAjI,GACA,MAAA,gBAAAA,GASA,QAAA8H,GAAA9H,GACA,MAAA,gBAAAA,GASA,QAAA6E,GAAA7E,GACA,MAAA,mBAAAA,GASA,QAAA0E,GAAA1E,GACA,MAAA,QAAAA,GAAA,gBAAAA,GASA,QAAAiH,GAAAjH,GACA,MAAA,kBAAAyK,EAAA/N,KAAAsD,GASA,QAAA2E,GAAA3E,GACA,MAAA,kBAAAyK,EAAA/N,KAAAsD,GASA,QAAA4E,GAAA5E,GACA,MAAA,kBAAAyK,EAAA/N,KAAAsD,GASA,QAAAiK,GAAAhE,GACA,MAAAA,GAAAjB,QAAA,OAAA,IAAAA,QAAA,OAAA,IAgBA,QAAAzF,KACA,MACA,mBAAA/D,SACA,mBAAA0M,WACA,kBAAAA,UAAAwB,cAgBA,QAAA3J,GAAA8K,EAAAjH,GAEA,GAAA,OAAAiH,GAAA,mBAAAA,GAUA,GALA,gBAAAA,IAAA9D,EAAA8D,KAEAA,GAAAA,IAGA9D,EAAA8D,GAEA,IAAA,GAAAvO,GAAA,EAAAG,EAAAoO,EAAAlO,OAAAF,EAAAH,EAAAA,IACAsH,EAAAlH,KAAA,KAAAmO,EAAAvO,GAAAA,EAAAuO,OAIA,KAAA,GAAA5K,KAAA4K,GACAA,EAAAC,eAAA7K,IACA2D,EAAAlH,KAAA,KAAAmO,EAAA5K,GAAAA,EAAA4K,GAuBA,QAAA3J,KAEA,QAAA6J,GAAA/K,EAAAC,GACA,gBAAAyK,GAAAzK,IAAA,gBAAAD,GACA0K,EAAAzK,GAAAiB,EAAAwJ,EAAAzK,GAAAD,GAEA0K,EAAAzK,GAAAD,EAIA,IAAA,GATA0K,MASApO,EAAA,EAAAG,EAAAiF,UAAA/E,OAAAF,EAAAH,EAAAA,IACAyD,EAAA2B,UAAApF,GAAAyO,EAEA,OAAAL,GA1NA,GAAAD,GAAAO,OAAAvJ,UAAAgJ,QA6NArP,GAAAD,SACA4L,QAAAA,EACA3G,cAAAA,EACAxC,WAAAA,EACA4G,kBAAAA,EACAyD,SAAAA,EACAH,SAAAA,EACApD,SAAAA,EACAG,YAAAA,EACAoC,OAAAA,EACAtC,OAAAA,EACAC,OAAAA,EACArF,qBAAAA,EACAQ,QAAAA,EACAmB,MAAAA,EACA+I,KAAAA,QhBgxBMgB,IAAI,SAAS5O,EAAQjB,EAAOD,IAClC,SAAWM,IiBlgCX,SAAAyP,GAGA,GAAAC,GAAA,gBAAAhQ,IAAAA,EAGAiQ,EAAA,gBAAAhQ,IAAAA,GACAA,EAAAD,SAAAgQ,GAAA/P,EAIAiQ,EAAA,gBAAA5P,IAAAA,GACA4P,EAAA5P,SAAA4P,GAAAA,EAAA7P,SAAA6P,KACAH,EAAAG,EAKA,IAAAzF,GAAA,SAAAC,GACAlK,KAAAkK,QAAAA,EAEAD,GAAAnE,UAAA,GAAAlF,OACAqJ,EAAAnE,UAAAgF,KAAA,uBAEA,IAAA6E,GAAA,SAAAzF,GAGA,KAAA,IAAAD,GAAAC,IAGA0F,EAAA,mEAEAC,EAAA,eAMAC,EAAA,SAAA3F,GACAA,EAAAI,OAAAJ,GACAd,QAAAwG,EAAA,GACA,IAAA7O,GAAAmJ,EAAAnJ,MACAA,GAAA,GAAA,IACAmJ,EAAAA,EAAAd,QAAA,OAAA,IACArI,EAAAmJ,EAAAnJ,SAGAA,EAAA,GAAA,GAEA,kBAAA8L,KAAA3C,KAEAwF,EACA,wEAQA,KALA,GACAI,GACAjH,EAFAkH,EAAA,EAGAxF,EAAA,GACAyF,EAAA,KACAA,EAAAjP,GACA8H,EAAA8G,EAAAxM,QAAA+G,EAAAS,OAAAqF,IACAF,EAAAC,EAAA,EAAA,GAAAD,EAAAjH,EAAAA,EAEAkH,IAAA,IAEAxF,GAAAD,OAAA2F,aACA,IAAAH,IAAA,GAAAC,EAAA,IAIA,OAAAxF,IAKAQ,EAAA,SAAAb,GACAA,EAAAI,OAAAJ,GACA,aAAA2C,KAAA3C,IAGAwF,EACA,4EAeA,KAXA,GAGAlP,GACA0P,EACAC,EAEAtH,EAPAuH,EAAAlG,EAAAnJ,OAAA,EACAwJ,EAAA,GACAyF,EAAA,GAOAjP,EAAAmJ,EAAAnJ,OAAAqP,IAEAJ,EAAAjP,GAEAP,EAAA0J,EAAAU,WAAAoF,IAAA,GACAE,EAAAhG,EAAAU,aAAAoF,IAAA,EACAG,EAAAjG,EAAAU,aAAAoF,GACAnH,EAAArI,EAAA0P,EAAAC,EAGA5F,GACAoF,EAAAhF,OAAA9B,GAAA,GAAA,IACA8G,EAAAhF,OAAA9B,GAAA,GAAA,IACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA8G,EAAAhF,OAAA,GAAA9B,EAuBA,OAnBA,IAAAuH,GACA5P,EAAA0J,EAAAU,WAAAoF,IAAA,EACAE,EAAAhG,EAAAU,aAAAoF,GACAnH,EAAArI,EAAA0P,EACA3F,GACAoF,EAAAhF,OAAA9B,GAAA,IACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA,KAEA,GAAAuH,IACAvH,EAAAqB,EAAAU,WAAAoF,GACAzF,GACAoF,EAAAhF,OAAA9B,GAAA,GACA8G,EAAAhF,OAAA9B,GAAA,EAAA,IACA,MAIA0B,GAGA8F,GACAtF,OAAAA,EACA8E,OAAAA,EACAS,QAAA,QAKA,IACA,kBAAA7Q,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WACA,MAAA4Q,SAEA,IAAAd,IAAAA,EAAAgB,SACA,GAAAf,EACAA,EAAAjQ,QAAA8Q,MAEA,KAAA,GAAAhM,KAAAgM,GACAA,EAAAnB,eAAA7K,KAAAkL,EAAAlL,GAAAgM,EAAAhM,QAIAiL,GAAAe,OAAAA,GAGAtQ,QjBsgCGe,KAAKf,KAAuB,mBAAXF,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,gBAErH4Q,IAAI,SAAS/P,EAAQjB,EAAOD,IAClC,SAAW4I,EAAQtI,IkBrqCnB,WACA,YACA,SAAA4Q,GAAAC,GACA,MAAA,kBAAAA,IAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,kBAAAA,GAqCA,QAAAE,GAAAC,GACAC,EAAAD,EAGA,QAAAE,GAAAC,GACAC,EAAAD,EAcA,QAAAE,KAGA,MAAA,YACA/I,EAAAgJ,SAAAC,IAKA,QAAAC,KACA,MAAA,YACAC,EAAAF,IAIA,QAAAG,KACA,GAAAC,GAAA,EACAC,EAAA,GAAAC,GAAAN,GACAO,EAAArF,SAAAsF,eAAA,GAGA,OAFAH,GAAAI,QAAAF,GAAAG,eAAA,IAEA,WACAH,EAAA9P,KAAA2P,IAAAA,EAAA,GAKA,QAAAO,KACA,GAAAC,GAAA,GAAAC,eAEA,OADAD,GAAAE,MAAAC,UAAAf,EACA,WACAY,EAAAI,MAAAC,YAAA,IAIA,QAAAC,KACA,MAAA,YACAC,WAAAnB,EAAA,IAKA,QAAAA,KACA,IAAA,GAAA1Q,GAAA,EAAA8R,EAAA9R,EAAAA,GAAA,EAAA,CACA,GAAA8N,GAAAiE,GAAA/R,GACAgS,EAAAD,GAAA/R,EAAA,EAEA8N,GAAAkE,GAEAD,GAAA/R,GAAAuD,OACAwO,GAAA/R,EAAA,GAAAuD,OAGAuO,EAAA,EAGA,QAAAG,KACA,IACA,GAAAvS,GAAAK,EACAmS,EAAAxS,EAAA,QAEA,OADAkR,GAAAsB,EAAAC,WAAAD,EAAAE,aACAzB,IACA,MAAApR,GACA,MAAAqS,MAiBA,QAAAS,GAAAC,EAAAC,GACA,GAAAC,GAAAnT,KACAoT,EAAAD,EAAAE,MAEA,IAAAD,IAAAE,KAAAL,GAAAG,IAAAG,KAAAL,EACA,MAAAlT,KAGA,IAAAwT,GAAA,GAAAxT,MAAAyT,YAAAC,GACA3E,EAAAoE,EAAAQ,OAEA,IAAAP,EAAA,CACA,GAAA3E,GAAA1I,UAAAqN,EAAA,EACAlC,GAAA,WACA0C,EAAAR,EAAAI,EAAA/E,EAAAM,SAGA8E,GAAAV,EAAAK,EAAAP,EAAAC,EAGA,OAAAM,GAGA,QAAAM,GAAAC,GAEA,GAAAC,GAAAhU,IAEA,IAAA+T,GAAA,gBAAAA,IAAAA,EAAAN,cAAAO,EACA,MAAAD,EAGA,IAAA3N,GAAA,GAAA4N,GAAAN,EAEA,OADAO,GAAA7N,EAAA2N,GACA3N,EAIA,QAAAsN,MAQA,QAAAQ,KACA,MAAA,IAAAC,WAAA,4CAGA,QAAAC,KACA,MAAA,IAAAD,WAAA,wDAGA,QAAAE,GAAAjO,GACA,IACA,MAAAA,GAAAO,KACA,MAAAgJ,GAEA,MADA2E,IAAA3E,MAAAA,EACA2E,IAIA,QAAAC,GAAA5N,EAAAkF,EAAA2I,EAAAC,GACA,IACA9N,EAAA5F,KAAA8K,EAAA2I,EAAAC,GACA,MAAAvU,GACA,MAAAA,IAIA,QAAAwU,GAAAtO,EAAAuO,EAAAhO,GACAuK,EAAA,SAAA9K,GACA,GAAAwO,IAAA,EACAjF,EAAA4E,EAAA5N,EAAAgO,EAAA,SAAA9I,GACA+I,IACAA,GAAA,EACAD,IAAA9I,EACAoI,EAAA7N,EAAAyF,GAEAgJ,EAAAzO,EAAAyF,KAEA,SAAAiJ,GACAF,IACAA,GAAA,EAEAG,EAAA3O,EAAA0O,KACA,YAAA1O,EAAA4O,QAAA,sBAEAJ,GAAAjF,IACAiF,GAAA,EACAG,EAAA3O,EAAAuJ,KAEAvJ,GAGA,QAAA6O,GAAA7O,EAAAuO,GACAA,EAAAtB,SAAAC,GACAuB,EAAAzO,EAAAuO,EAAAhB,SACAgB,EAAAtB,SAAAE,GACAwB,EAAA3O,EAAAuO,EAAAhB,SAEAE,EAAAc,EAAAzQ,OAAA,SAAA2H,GACAoI,EAAA7N,EAAAyF,IACA,SAAAiJ,GACAC,EAAA3O,EAAA0O,KAKA,QAAAI,GAAA9O,EAAA+O,EAAAxO,GACAwO,EAAA1B,cAAArN,EAAAqN,aACA9M,IAAAyO,IACA3B,YAAA/R,UAAA2T,GACAJ,EAAA7O,EAAA+O,GAEAxO,IAAA2N,GACAS,EAAA3O,EAAAkO,GAAA3E,OACAzL,SAAAyC,EACAkO,EAAAzO,EAAA+O,GACAvE,EAAAjK,GACA+N,EAAAtO,EAAA+O,EAAAxO,GAEAkO,EAAAzO,EAAA+O,GAKA,QAAAlB,GAAA7N,EAAAyF,GACAzF,IAAAyF,EACAkJ,EAAA3O,EAAA8N,KACAxD,EAAA7E,GACAqJ,EAAA9O,EAAAyF,EAAAwI,EAAAxI,IAEAgJ,EAAAzO,EAAAyF,GAIA,QAAAyJ,GAAAlP,GACAA,EAAAmP,UACAnP,EAAAmP,SAAAnP,EAAAuN,SAGA6B,EAAApP,GAGA,QAAAyO,GAAAzO,EAAAyF,GACAzF,EAAAiN,SAAAoC,KAEArP,EAAAuN,QAAA9H,EACAzF,EAAAiN,OAAAC,GAEA,IAAAlN,EAAAsP,aAAA1U,QACAkQ,EAAAsE,EAAApP,IAIA,QAAA2O,GAAA3O,EAAA0O,GACA1O,EAAAiN,SAAAoC,KACArP,EAAAiN,OAAAE,GACAnN,EAAAuN,QAAAmB,EAEA5D,EAAAoE,EAAAlP,IAGA,QAAAyN,GAAAV,EAAAK,EAAAP,EAAAC,GACA,GAAAyC,GAAAxC,EAAAuC,aACA1U,EAAA2U,EAAA3U,MAEAmS,GAAAoC,SAAA,KAEAI,EAAA3U,GAAAwS,EACAmC,EAAA3U,EAAAsS,IAAAL,EACA0C,EAAA3U,EAAAuS,IAAAL,EAEA,IAAAlS,GAAAmS,EAAAE,QACAnC,EAAAsE,EAAArC,GAIA,QAAAqC,GAAApP,GACA,GAAAuP,GAAAvP,EAAAsP,aACAE,EAAAxP,EAAAiN,MAEA,IAAA,IAAAsC,EAAA3U,OAAA,CAIA,IAAA,GAFAwS,GAAA/E,EAAAoH,EAAAzP,EAAAuN,QAEAhT,EAAA,EAAAA,EAAAgV,EAAA3U,OAAAL,GAAA,EACA6S,EAAAmC,EAAAhV,GACA8N,EAAAkH,EAAAhV,EAAAiV,GAEApC,EACAI,EAAAgC,EAAApC,EAAA/E,EAAAoH,GAEApH,EAAAoH,EAIAzP,GAAAsP,aAAA1U,OAAA,GAGA,QAAA8U,KACA9V,KAAA2P,MAAA,KAKA,QAAAoG,GAAAtH,EAAAoH,GACA,IACA,MAAApH,GAAAoH,GACA,MAAA3V,GAEA,MADA8V,IAAArG,MAAAzP,EACA8V,IAIA,QAAApC,GAAAgC,EAAAxP,EAAAqI,EAAAoH,GACA,GACAhK,GAAA8D,EAAAsG,EAAAC,EADAC,EAAAvF,EAAAnC,EAGA,IAAA0H,GAWA,GAVAtK,EAAAkK,EAAAtH,EAAAoH,GAEAhK,IAAAmK,IACAE,GAAA,EACAvG,EAAA9D,EAAA8D,MACA9D,EAAA,MAEAoK,GAAA,EAGA7P,IAAAyF,EAEA,WADAkJ,GAAA3O,EAAAgO,SAKAvI,GAAAgK,EACAI,GAAA,CAGA7P,GAAAiN,SAAAoC,KAEAU,GAAAF,EACAhC,EAAA7N,EAAAyF,GACAqK,EACAnB,EAAA3O,EAAAuJ,GACAiG,IAAAtC,GACAuB,EAAAzO,EAAAyF,GACA+J,IAAArC,IACAwB,EAAA3O,EAAAyF,IAIA,QAAAuK,GAAAhQ,EAAAiQ,GACA,IACAA,EAAA,SAAAxK,GACAoI,EAAA7N,EAAAyF,IACA,SAAAiJ,GACAC,EAAA3O,EAAA0O,KAEA,MAAA5U,GACA6U,EAAA3O,EAAAlG,IAIA,QAAAoW,GAAAC,GACA,MAAA,IAAAC,IAAAxW,KAAAuW,GAAAnQ,QAGA,QAAAqQ,GAAAF,GAaA,QAAAtD,GAAApH,GACAoI,EAAA7N,EAAAyF,GAGA,QAAAqH,GAAA4B,GACAC,EAAA3O,EAAA0O,GAhBA,GAAAd,GAAAhU,KAEAoG,EAAA,GAAA4N,GAAAN,EAEA,KAAAgD,EAAAH,GAEA,MADAxB,GAAA3O,EAAA,GAAA+N,WAAA,oCACA/N,CAaA,KAAA,GAVApF,GAAAuV,EAAAvV,OAUAL,EAAA,EAAAyF,EAAAiN,SAAAoC,IAAAzU,EAAAL,EAAAA,IACAkT,EAAAG,EAAAtS,QAAA6U,EAAA5V,IAAAuD,OAAA+O,EAAAC,EAGA,OAAA9M,GAGA,QAAAuQ,GAAA7B,GAEA,GAAAd,GAAAhU,KACAoG,EAAA,GAAA4N,GAAAN,EAEA,OADAqB,GAAA3O,EAAA0O,GACA1O,EAMA,QAAAwQ,KACA,KAAA,IAAAzC,WAAA,sFAGA,QAAA0C,KACA,KAAA,IAAA1C,WAAA,yHA2GA,QAAA2C,GAAAT,GACArW,KAAA+W,IAAAC,KACAhX,KAAAqT,OAAAnP,OACAlE,KAAA2T,QAAAzP,OACAlE,KAAA0V,gBAEAhC,IAAA2C,IACA,kBAAAA,IAAAO,IACA5W,eAAA8W,GAAAV,EAAApW,KAAAqW,GAAAQ,KAkPA,QAAAI,GAAAjD,EAAA7J,GACAnK,KAAAkX,qBAAAlD,EACAhU,KAAAoG,QAAA,GAAA4N,GAAAN,GAEA5J,MAAAsB,QAAAjB,IACAnK,KAAAmX,OAAAhN,EACAnK,KAAAgB,OAAAmJ,EAAAnJ,OACAhB,KAAAoX,WAAAjN,EAAAnJ,OAEAhB,KAAA2T,QAAA,GAAA7J,OAAA9J,KAAAgB,QAEA,IAAAhB,KAAAgB,OACA6T,EAAA7U,KAAAoG,QAAApG,KAAA2T,UAEA3T,KAAAgB,OAAAhB,KAAAgB,QAAA,EACAhB,KAAAqX,aACA,IAAArX,KAAAoX,YACAvC,EAAA7U,KAAAoG,QAAApG,KAAA2T,WAIAoB,EAAA/U,KAAAoG,QAAApG,KAAAsX,oBAqEA,QAAAC,KACA,GAAAC,EAEA,IAAA,mBAAA1X,GACA0X,EAAA1X,MACA,IAAA,mBAAAC,MACAyX,EAAAzX,SAEA,KACAyX,EAAAC,SAAA,iBACA,MAAAvX,GACA,KAAA,IAAAU,OAAA,4EAIA,GAAA8W,GAAAF,EAAAnR,UAEAqR,GAAA,qBAAArI,OAAAvJ,UAAAgJ,SAAA/N,KAAA2W,EAAAhW,YAAAgW,EAAAC,QAIAH,EAAAnR,QAAAuR,IA/4BA,GAAAC,EAMAA,GALA/N,MAAAsB,QAKAtB,MAAAsB,QAJA,SAAAuF,GACA,MAAA,mBAAAtB,OAAAvJ,UAAAgJ,SAAA/N,KAAA4P,GAMA,IAEAY,GACAR,EAwGA+G,EA3GApB,EAAAmB,EACApF,EAAA,EAIAvB,EAAA,SAAAzC,EAAAkE,GACAD,GAAAD,GAAAhE,EACAiE,GAAAD,EAAA,GAAAE,EACAF,GAAA,EACA,IAAAA,IAIA1B,EACAA,EAAAM,GAEAyG,MAaAC,EAAA,mBAAAlY,QAAAA,OAAAqE,OACA8T,EAAAD,MACApG,EAAAqG,EAAAC,kBAAAD,EAAAE,uBACAC,GAAA,mBAAA/P,IAAA,wBAAA0G,SAAA/N,KAAAqH,GAGAgQ,GAAA,mBAAAC,oBACA,mBAAAC,gBACA,mBAAApG,gBA4CAQ,GAAA,GAAA5I,OAAA,IA6BAgO,GADAK,GACAhH,IACAQ,EACAH,IACA4G,GACApG,IACA9N,SAAA6T,GAAA,kBAAArX,GACAkS,IAEAL,GAwBA,IAAA6C,IAAApC,EAaAqC,GAAAvB,EAIA2B,GAAA,OACAnC,GAAA,EACAC,GAAA,EAEAe,GAAA,GAAAwB,GAkKAE,GAAA,GAAAF,GAgEAyC,GAAAjC,EA4BAkC,GAAA/B,EAQAgC,GAAA9B,EAEAK,GAAA,EAUAY,GAAAd,CAoHAA,GAAA9P,IAAAuR,GACAzB,EAAA4B,KAAAF,GACA1B,EAAApV,QAAA2T,GACAyB,EAAAnV,OAAA8W,GACA3B,EAAA6B,cAAA9H,EACAiG,EAAA8B,SAAA5H,EACA8F,EAAA+B,MAAA3H,EAEA4F,EAAAhR,WACA2N,YAAAqD,EAmMAnQ,KAAAyO,GA6BA0D,QAAA,SAAA5F,GACA,MAAAlT,MAAA2G,KAAA,KAAAuM,IAGA,IAAAsD,IAAAS,CA0BAA,GAAAnR,UAAAwR,iBAAA,WACA,MAAA,IAAA1W,OAAA,4CAGAqW,EAAAnR,UAAAuR,WAAA,WAIA,IAAA,GAHArW,GAAAhB,KAAAgB,OACAmJ,EAAAnK,KAAAmX,OAEAxW,EAAA,EAAAX,KAAAqT,SAAAoC,IAAAzU,EAAAL,EAAAA,IACAX,KAAA+Y,WAAA5O,EAAAxJ,GAAAA,IAIAsW,EAAAnR,UAAAiT,WAAA,SAAAC,EAAArY,GACA,GAAAyP,GAAApQ,KAAAkX,qBACAxV,EAAA0O,EAAA1O,OAEA,IAAAA,IAAA2T,GAAA,CACA,GAAA1O,GAAA0N,EAAA2E,EAEA,IAAArS,IAAAyO,IACA4D,EAAA3F,SAAAoC,GACAzV,KAAAiZ,WAAAD,EAAA3F,OAAA1S,EAAAqY,EAAArF,aACA,IAAA,kBAAAhN,GACA3G,KAAAoX,aACApX,KAAA2T,QAAAhT,GAAAqY,MACA,IAAA5I,IAAAwH,GAAA,CACA,GAAAxR,GAAA,GAAAgK,GAAAsD,EACAwB,GAAA9O,EAAA4S,EAAArS,GACA3G,KAAAkZ,cAAA9S,EAAAzF,OAEAX,MAAAkZ,cAAA,GAAA9I,GAAA,SAAA1O,GAAAA,EAAAsX,KAAArY,OAGAX,MAAAkZ,cAAAxX,EAAAsX,GAAArY,IAIAsW,EAAAnR,UAAAmT,WAAA,SAAA7F,EAAAzS,EAAAkL,GACA,GAAAzF,GAAApG,KAAAoG,OAEAA,GAAAiN,SAAAoC,KACAzV,KAAAoX,aAEAhE,IAAAG,GACAwB,EAAA3O,EAAAyF,GAEA7L,KAAA2T,QAAAhT,GAAAkL,GAIA,IAAA7L,KAAAoX,YACAvC,EAAAzO,EAAApG,KAAA2T,UAIAsD,EAAAnR,UAAAoT,cAAA,SAAA9S,EAAAzF,GACA,GAAAwY,GAAAnZ,IAEA6T,GAAAzN,EAAAlC,OAAA,SAAA2H,GACAsN,EAAAF,WAAA3F,GAAA3S,EAAAkL,IACA,SAAAiJ,GACAqE,EAAAF,WAAA1F,GAAA5S,EAAAmU,KA0BA,IAAAsE,IAAA7B,EAEA8B,IACAhT,QAAAuR,GACA0B,SAAAF,GAIA,mBAAA1Z,IAAAA,EAAA,IACAA,EAAA,WAAA,MAAA2Z,MACA,mBAAA5Z,IAAAA,EAAA,QACAA,EAAA,QAAA4Z,GACA,mBAAArZ,QACAA,KAAA,WAAAqZ,IAGAD,OACArY,KAAAf,QlBirCGe,KAAKf,KAAKU,EAAQ,YAA8B,mBAAXZ,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,aAE5I2I,SAAW,KAAK+Q,IAAI,SAAS7Y,EAAQjB,EAAOD,GmBnmE/C,QAAAga,KACAC,GAAA,EACAC,EAAA1Y,OACA2Y,EAAAD,EAAAE,OAAAD,GAEAE,EAAA,GAEAF,EAAA3Y,QACA8Y,IAIA,QAAAA,KACA,IAAAL,EAAA,CAGA,GAAA1W,GAAAyP,WAAAgH,EACAC,IAAA,CAGA,KADA,GAAAM,GAAAJ,EAAA3Y,OACA+Y,GAAA,CAGA,IAFAL,EAAAC,EACAA,OACAE,EAAAE,GACAL,GACAA,EAAAG,GAAAG,KAGAH,GAAA,GACAE,EAAAJ,EAAA3Y,OAEA0Y,EAAA,KACAD,GAAA,EACAQ,aAAAlX,IAiBA,QAAAmX,GAAAC,EAAAC,GACApa,KAAAma,IAAAA,EACAna,KAAAoa,MAAAA,EAYA,QAAAC,MAtEA,GAGAX,GAHAtR,EAAA3I,EAAAD,WACAma,KACAF,GAAA,EAEAI,EAAA,EAsCAzR,GAAAgJ,SAAA,SAAA+I,GACA,GAAAtQ,GAAA,GAAAC,OAAA/D,UAAA/E,OAAA,EACA,IAAA+E,UAAA/E,OAAA,EACA,IAAA,GAAAL,GAAA,EAAAA,EAAAoF,UAAA/E,OAAAL,IACAkJ,EAAAlJ,EAAA,GAAAoF,UAAApF,EAGAgZ,GAAAjT,KAAA,GAAAwT,GAAAC,EAAAtQ,IACA,IAAA8P,EAAA3Y,QAAAyY,GACAjH,WAAAsH,EAAA,IASAI,EAAApU,UAAAkU,IAAA,WACAha,KAAAma,IAAApQ,MAAA,KAAA/J,KAAAoa,QAEAhS,EAAAkS,MAAA,UACAlS,EAAAmS,SAAA,EACAnS,EAAAoS,OACApS,EAAAqS,QACArS,EAAAmI,QAAA,GACAnI,EAAAsS,YAIAtS,EAAAuS,GAAAN,EACAjS,EAAAwS,YAAAP,EACAjS,EAAAyS,KAAAR,EACAjS,EAAA0S,IAAAT,EACAjS,EAAA2S,eAAAV,EACAjS,EAAA4S,mBAAAX,EACAjS,EAAA6S,KAAAZ,EAEAjS,EAAA8S,QAAA,SAAApQ,GACA,KAAA,IAAAlK,OAAA,qCAGAwH,EAAA+S,IAAA,WAAA,MAAA,KACA/S,EAAAgT,MAAA,SAAAC,GACA,KAAA,IAAAza,OAAA,mCAEAwH,EAAAkT,MAAA,WAAA,MAAA,SnB8mEMC,IAAI,SAAS7a,EAAQjB,EAAOD,IAClC,SAAWM,IoBxsEX,SAAAyP,GAqBA,QAAAiM,GAAAC,GAMA,IALA,GAGA5P,GACA6P,EAJAlR,KACAmR,EAAA,EACA3a,EAAAya,EAAAza,OAGAA,EAAA2a,GACA9P,EAAA4P,EAAA5Q,WAAA8Q,KACA9P,GAAA,OAAA,OAAAA,GAAA7K,EAAA2a,GAEAD,EAAAD,EAAA5Q,WAAA8Q,KACA,QAAA,MAAAD,GACAlR,EAAA9D,OAAA,KAAAmF,IAAA,KAAA,KAAA6P,GAAA,QAIAlR,EAAA9D,KAAAmF,GACA8P,MAGAnR,EAAA9D,KAAAmF,EAGA,OAAArB,GAIA,QAAAoR,GAAAxB,GAKA,IAJA,GAEAvO,GAFA7K,EAAAoZ,EAAApZ,OACA6a,EAAA,GAEArR,EAAA,KACAqR,EAAA7a,GACA6K,EAAAuO,EAAAyB,GACAhQ,EAAA,QACAA,GAAA,MACArB,GAAAsR,EAAAjQ,IAAA,GAAA,KAAA,OACAA,EAAA,MAAA,KAAAA,GAEArB,GAAAsR,EAAAjQ,EAEA,OAAArB,GAGA,QAAAuR,GAAAC,GACA,GAAAA,GAAA,OAAA,OAAAA,EACA,KAAApb,OACA,oBAAAob,EAAAlN,SAAA,IAAAlM,cACA,0BAMA,QAAAqZ,GAAAD,EAAApV,GACA,MAAAkV,GAAAE,GAAApV,EAAA,GAAA,KAGA,QAAAsV,GAAAF,GACA,GAAA,IAAA,WAAAA,GACA,MAAAF,GAAAE,EAEA,IAAAG,GAAA,EAeA,OAdA,KAAA,WAAAH,GACAG,EAAAL,EAAAE,GAAA,EAAA,GAAA,KAEA,IAAA,WAAAA,IACAD,EAAAC,GACAG,EAAAL,EAAAE,GAAA,GAAA,GAAA,KACAG,GAAAF,EAAAD,EAAA,IAEA,IAAA,WAAAA,KACAG,EAAAL,EAAAE,GAAA,GAAA,EAAA,KACAG,GAAAF,EAAAD,EAAA,IACAG,GAAAF,EAAAD,EAAA,IAEAG,GAAAL,EAAA,GAAAE,EAAA,KAIA,QAAAI,GAAAX,GAMA,IALA,GAGAO,GAHAK,EAAAb,EAAAC,GACAza,EAAAqb,EAAArb,OACA6a,EAAA,GAEAS,EAAA,KACAT,EAAA7a,GACAgb,EAAAK,EAAAR,GACAS,GAAAJ,EAAAF,EAEA,OAAAM,GAKA,QAAAC,KACA,GAAAC,GAAAC,EACA,KAAA7b,OAAA,qBAGA,IAAA8b,GAAA,IAAAC,EAAAH,EAGA,IAFAA,IAEA,MAAA,IAAAE,GACA,MAAA,IAAAA,CAIA,MAAA9b,OAAA,6BAGA,QAAAgc,KACA,GAAAC,GACAC,EACAC,EACAC,EACAhB,CAEA,IAAAQ,EAAAC,EACA,KAAA7b,OAAA,qBAGA,IAAA4b,GAAAC,EACA,OAAA,CAQA,IAJAI,EAAA,IAAAF,EAAAH,GACAA,IAGA,IAAA,IAAAK,GACA,MAAAA,EAIA,IAAA,MAAA,IAAAA,GAAA,CACA,GAAAC,GAAAP,GAEA,IADAP,GAAA,GAAAa,IAAA,EAAAC,EACAd,GAAA,IACA,MAAAA,EAEA,MAAApb,OAAA,6BAKA,GAAA,MAAA,IAAAic,GAAA,CAIA,GAHAC,EAAAP,IACAQ,EAAAR,IACAP,GAAA,GAAAa,IAAA,GAAAC,GAAA,EAAAC,EACAf,GAAA,KAEA,MADAD,GAAAC,GACAA,CAEA,MAAApb,OAAA,6BAKA,GAAA,MAAA,IAAAic,KACAC,EAAAP,IACAQ,EAAAR,IACAS,EAAAT,IACAP,GAAA,GAAAa,IAAA,GAAAC,GAAA,GACAC,GAAA,EAAAC,EACAhB,GAAA,OAAA,SAAAA,GACA,MAAAA,EAIA,MAAApb,OAAA,0BAMA,QAAAqc,GAAAX,GACAK,EAAAnB,EAAAc,GACAG,EAAAE,EAAA3b,OACAwb,EAAA,CAGA,KAFA,GACAU,GADAb,MAEAa,EAAAN,QAAA,GACAP,EAAA3V,KAAAwW,EAEA,OAAAtB,GAAAS,GA5MA,GAAA7M,GAAA,gBAAAhQ,IAAAA,EAGAiQ,EAAA,gBAAAhQ,IAAAA,GACAA,EAAAD,SAAAgQ,GAAA/P,EAIAiQ,EAAA,gBAAA5P,IAAAA,GACA4P,EAAA5P,SAAA4P,GAAAA,EAAA7P,SAAA6P,KACAH,EAAAG,EAKA,IAiLAiN,GACAF,EACAD,EAnLAV,EAAAvR,OAAA2F,aAkMAiN,GACA5M,QAAA,QACAvF,OAAAoR,EACAtM,OAAAmN,EAKA,IACA,kBAAAvd,IACA,gBAAAA,GAAAC,KACAD,EAAAC,IAEAD,EAAA,WACA,MAAAyd,SAEA,IAAA3N,IAAAA,EAAAgB,SACA,GAAAf,EACAA,EAAAjQ,QAAA2d,MACA,CACA,GAAApJ,MACA5E,EAAA4E,EAAA5E,cACA,KAAA,GAAA7K,KAAA6Y,GACAhO,EAAApO,KAAAoc,EAAA7Y,KAAAkL,EAAAlL,GAAA6Y,EAAA7Y,QAIAiL,GAAA4N,KAAAA,GAGAnd,QpB4sEGe,KAAKf,KAAuB,mBAAXF,QAAyBA,OAAyB,mBAATC,MAAuBA,KAAyB,mBAAXF,QAAyBA,gBAErHud,IAAI,SAAS1c,EAAQjB,EAAOD,GqBt7ElC,cAEA,SAAA+P,EAAA8N,GAEA,kBAAA3d,IAAAA,EAAAC,IACAD,GAEA,cACA,UACA,OACA,SAEA,SAAA2G,EAAAiX,EAAAC,EAAAzW,GACA,MAAAyI,GAAAtP,OAAAod,EAAAhX,EAAAiX,EAAAC,EAAAzW,KAGA,gBAAArH,IAAAA,EAAAD,QACAC,EAAAD,QAAA6d,EAAA3c,EAAA,eAAAA,EAAA,WAAAA,EAAA,QAAAA,EAAA,UAEA6O,EAAAtP,OAAAod,EAAA9N,EAAAlJ,QAAAkJ,EAAAe,OAAAf,EAAA4N,KAAA5N,EAAAzI,QAEA9G,KAAA,SAAAqG,EAAAiX,EAAAC,EAAAzW,GACA,QAAA0W,GAAA/B,GACA,MAAA6B,GAAAtS,OAAAuS,EAAAvS,OAAAyQ,IAGApV,EAAAiT,UACAjT,EAAAiT,UAMA,IAAArZ,GAAA,SAAAwd,GACAA,EAAAA,KAEA,IAAAC,GAAAD,EAAAE,QAAA,yBAOAC,EAAA3d,EAAA2d,SAAA,SAAAjb,EAAAoJ,EAAAjK,EAAA+b,EAAAC,GACA,QAAAC,KACA,GAAA1b,GAAA0J,EAAA3I,QAAA,OAAA,EAAA2I,EAAA2R,EAAA3R,CAIA,IAFA1J,GAAA,KAAAyK,KAAAzK,GAAA,IAAA,IAEAP,GAAA,gBAAAA,KAAA,MAAA,OAAA,UAAAsB,QAAAT,GAAA,GACA,IAAA,GAAAqb,KAAAlc,GACAA,EAAAqN,eAAA6O,KACA3b,GAAA,IAAA4I,mBAAA+S,GAAA,IAAA/S,mBAAAnJ,EAAAkc,IAKA,OAAA3b,GAAAgH,QAAA,mBAAA,KACA,mBAAAxJ,QAAA,eAAA,GAAAuM,OAAA6R,UAAA,IAGA,GAAArc,IACAI,SACAuH,OAAAuU,EAAA,qCAAA,iCACAlV,eAAA,kCAEAjG,OAAAA,EACAb,KAAAA,EAAAA,KACAO,IAAA0b,IASA,QANAN,EAAA,OAAAA,EAAAlb,UAAAkb,EAAAjb,YACAZ,EAAAI,QAAAS,cAAAgb,EAAAS,MACA,SAAAT,EAAAS,MACA,SAAAV,EAAAC,EAAAlb,SAAA,IAAAkb,EAAAjb,WAGAsE,EAAAlF,GACA+E,KAAA,SAAApD,GACAsa,EACA,KACAta,EAAAzB,OAAA,EACAyB,EAAArB,UAEA,SAAAqB,GACA,MAAAA,EAAAE,OACAoa,EACA,KACAta,EAAAzB,OAAA,EACAyB,EAAArB,SAGA2b,GACA9R,KAAAA,EACA7J,QAAAqB,EAAArB,QACAyN,MAAApM,EAAAE,YAMA0a,EAAAle,EAAAke,iBAAA,SAAApS,EAAA8R,GACA,GAAAO,OAEA,QAAAC,KACAT,EAAA,MAAA7R,EAAA,KAAA,SAAAuS,EAAAC,EAAAC,GACA,GAAAF,EACA,MAAAT,GAAAS,EAGAC,aAAAzU,SACAyU,GAAAA,IAGAH,EAAA1X,KAAAqD,MAAAqU,EAAAG,EAEA,IAAAE,IAAAD,EAAAE,kBAAA,SAAA,IACAtQ,MAAA,KACAuQ,OAAA,SAAAC,GACA,MAAA,aAAA9R,KAAA8R,KAEAlU,IAAA,SAAAkU,GACA,OAAA,SAAAC,KAAAD,QAAA,KAEAE,KAEAL,IAGA1S,EAAA0S,EACAJ,KAHAR,EAAAS,EAAAF,EAAAI,QAo6BA,OAx5BAve,GAAA8e,KAAA,WACA/e,KAAAgf,MAAA,SAAAvB,EAAAI,GACA,IAAA9X,UAAA/E,QAAA,kBAAA+E,WAAA,KACA8X,EAAAJ,EACAA,MAGAA,EAAAA,KAEA,IAAApb,GAAA,cACAQ,IAEAA,GAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAwB,MAAA,QACApc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAyB,MAAA,YACArc,EAAA6D,KAAA,YAAAuE,mBAAAwS,EAAA0B,UAAA,QAEA1B,EAAA2B,MACAvc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA2B,OAGA/c,GAAA,IAAAQ,EAAA2I,KAAA,KAEA2S,EAAA9b,EAAAwb,IAMA7d,KAAAqf,KAAA,SAAAxB,GACAD,EAAA,MAAA,aAAA,KAAAC,IAMA7d,KAAAsf,MAAA,SAAAzB,GACAD,EAAA,MAAA,SAAA,KAAAC,IAMA7d,KAAAuf,cAAA,SAAA9B,EAAAI,GACA,IAAA9X,UAAA/E,QAAA,kBAAA+E,WAAA,KACA8X,EAAAJ,EACAA,MAGAA,EAAAA,KACA,IAAApb,GAAA,iBACAQ,IAUA,IARA4a,EAAAzW,KACAnE,EAAA6D,KAAA,YAGA+W,EAAA+B,eACA3c,EAAA6D,KAAA,sBAGA+W,EAAAgC,MAAA,CACA,GAAAA,GAAAhC,EAAAgC,KAEAA,GAAAhM,cAAArH,OACAqT,EAAAA,EAAAlU,eAGA1I,EAAA6D,KAAA,SAAAuE,mBAAAwU,IAGA,GAAAhC,EAAAiC,OAAA,CACA,GAAAA,GAAAjC,EAAAiC,MAEAA,GAAAjM,cAAArH,OACAsT,EAAAA,EAAAnU,eAGA1I,EAAA6D,KAAA,UAAAuE,mBAAAyU,IAGAjC,EAAA2B,MACAvc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA2B,OAGAvc,EAAA7B,OAAA,IACAqB,GAAA,IAAAQ,EAAA2I,KAAA,MAGAoS,EAAA,MAAAvb,EAAA,KAAAwb,IAMA7d,KAAA2f,KAAA,SAAApd,EAAAsb,GACA,GAAA+B,GAAArd,EAAA,UAAAA,EAAA,OAEAqb,GAAA,MAAAgC,EAAA,KAAA/B,IAMA7d,KAAA6f,UAAA,SAAAtd,EAAAkb,EAAAI,GACA,kBAAAJ,KACAI,EAAAJ,EACAA,KAGA,IAAApb,GAAA,UAAAE,EAAA,SACAM,IAEAA,GAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAwB,MAAA,QACApc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAyB,MAAA,YACArc,EAAA6D,KAAA,YAAAuE,mBAAAwS,EAAA0B,UAAA,QAEA1B,EAAA2B,MACAvc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA2B,OAGA/c,GAAA,IAAAQ,EAAA2I,KAAA,KAEA2S,EAAA9b,EAAAwb,IAMA7d,KAAA8f,YAAA,SAAAvd,EAAAsb,GAEAM,EAAA,UAAA5b,EAAA,iCAAAsb,IAMA7d,KAAA+f,UAAA,SAAAxd,EAAAsb,GACAD,EAAA,MAAA,UAAArb,EAAA,SAAA,KAAAsb,IAMA7d,KAAAggB,SAAA,SAAAC,EAAApC,GAEAM,EAAA,SAAA8B,EAAA,6DAAApC,IAMA7d,KAAAkgB,OAAA,SAAA3d,EAAAsb,GACAD,EAAA,MAAA,mBAAArb,EAAA,KAAAsb,IAMA7d,KAAAmgB,SAAA,SAAA5d,EAAAsb,GACAD,EAAA,SAAA,mBAAArb,EAAA,KAAAsb,IAKA7d,KAAAogB,WAAA,SAAA3C,EAAAI,GACAD,EAAA,OAAA,cAAAH,EAAAI,KAOA5d,EAAAogB,WAAA,SAAA5C,GAsBA,QAAA6C,GAAAC,EAAA1C,GACA,MAAA0C,KAAAC,EAAAD,QAAAC,EAAAC,IACA5C,EAAA,KAAA2C,EAAAC,SAGAC,GAAAC,OAAA,SAAAJ,EAAA,SAAAjC,EAAAmC,GACAD,EAAAD,OAAAA,EACAC,EAAAC,IAAAA,EACA5C,EAAAS,EAAAmC,KA7BA,GAKAG,GALAC,EAAApD,EAAA3S,KACAgW,EAAArD,EAAAqD,KACAC,EAAAtD,EAAAsD,SAEAL,EAAA1gB,IAIA4gB,GADAG,EACA,UAAAA,EAEA,UAAAD,EAAA,IAAAD,CAGA,IAAAL,IACAD,OAAA,KACAE,IAAA,KAqBAzgB,MAAA2gB,OAAA,SAAAK,EAAAnD,GACAD,EAAA,MAAAgD,EAAA,aAAAI,EAAA,KAAA,SAAA1C,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAxK,OAAA0M,IAAAjC,MAYAxe,KAAAihB,UAAA,SAAAxD,EAAAI,GACAD,EAAA,OAAAgD,EAAA,YAAAnD,EAAAI,IASA7d,KAAAkhB,UAAA,SAAAF,EAAAnD,GACAD,EAAA,SAAAgD,EAAA,aAAAI,EAAAvD,EAAAI,IAMA7d,KAAAmhB,WAAA,SAAAtD,GACAD,EAAA,SAAAgD,EAAAnD,EAAAI,IAMA7d,KAAAohB,SAAA,SAAAvD,GACAD,EAAA,MAAAgD,EAAA,QAAA,KAAA/C,IAMA7d,KAAAqhB,UAAA,SAAA5D,EAAAI,GACAJ,EAAAA,KACA,IAAApb,GAAAue,EAAA,SACA/d,IAEA,iBAAA4a,GAEA5a,EAAA6D,KAAA,SAAA+W,IAEAA,EAAArK,OACAvQ,EAAA6D,KAAA,SAAAuE,mBAAAwS,EAAArK,QAGAqK,EAAA6D,MACAze,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA6D,OAGA7D,EAAA8D,MACA1e,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA8D,OAGA9D,EAAAyB,MACArc,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAAyB,OAGAzB,EAAA+D,WACA3e,EAAA6D,KAAA,aAAAuE,mBAAAwS,EAAA+D,YAGA/D,EAAA2B,MACAvc,EAAA6D,KAAA,QAAA+W,EAAA2B,MAGA3B,EAAA0B,UACAtc,EAAA6D,KAAA,YAAA+W,EAAA0B,WAIAtc,EAAA7B,OAAA,IACAqB,GAAA,IAAAQ,EAAA2I,KAAA,MAGAoS,EAAA,MAAAvb,EAAA,KAAAwb,IAMA7d,KAAAyhB,QAAA,SAAAC,EAAA7D,GACAD,EAAA,MAAAgD,EAAA,UAAAc,EAAA,KAAA7D,IAMA7d,KAAA2hB,QAAA,SAAAJ,EAAAD,EAAAzD,GACAD,EAAA,MAAAgD,EAAA,YAAAW,EAAA,MAAAD,EAAA,KAAAzD,IAMA7d,KAAA4hB,aAAA,SAAA/D,GACAD,EAAA,MAAAgD,EAAA,kBAAA,KAAA,SAAAtC,EAAAuD,EAAArD,GACA,MAAAF,GACAT,EAAAS,IAGAuD,EAAAA,EAAAnX,IAAA,SAAA4W,GACA,MAAAA,GAAAN,IAAA3X,QAAA,iBAAA,UAGAwU,GAAA,KAAAgE,EAAArD,OAOAxe,KAAA8hB,QAAA,SAAArB,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,cAAAH,EAAA,KAAA5C,EAAA,QAMA7d,KAAA+hB,UAAA,SAAAxB,EAAAE,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,gBAAAH,EAAA,KAAA5C,IAMA7d,KAAAgiB,OAAA,SAAAzB,EAAAxU,EAAA8R,GACA,MAAA9R,IAAA,KAAAA,MAIA6R,GAAA,MAAAgD,EAAA,aAAA7U,GAAAwU,EAAA,QAAAA,EAAA,IACA,KAAA,SAAAjC,EAAA2D,EAAAzD,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAoE,EAAAxB,IAAAjC,KATAkC,EAAAC,OAAA,SAAAJ,EAAA1C,IAgBA7d,KAAAkiB,YAAA,SAAAzB,EAAA5C,GACAD,EAAA,MAAAgD,EAAA,aAAAH,EAAA,KAAA5C,IAMA7d,KAAAmiB,QAAA,SAAAC,EAAAvE,GACAD,EAAA,MAAAgD,EAAA,cAAAwB,EAAA,KAAA,SAAA9D,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAA6D,KAAA5D,MAOAxe,KAAAqiB,SAAA,SAAAC,EAAAzE,GAEAyE,EADA,gBAAA,IAEAA,QAAAA,EACAC,SAAA,UAIAD,QAAA9E,EAAA8E,GACAC,SAAA,UAIA3E,EAAA,OAAAgD,EAAA,aAAA0B,EAAA,SAAAhE,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAkC,IAAAjC,MAOAxe,KAAAsgB,WAAA,SAAAkC,EAAAzW,EAAA0W,EAAA5E,GACA,GAAA/b,IACA4gB,UAAAF,EACAJ,OAEArW,KAAAA,EACA4W,KAAA,SACA1D,KAAA,OACAwB,IAAAgC,IAKA7E,GAAA,OAAAgD,EAAA,aAAA9e,EAAA,SAAAwc,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAkC,IAAAjC,MAQAxe,KAAA4iB,SAAA,SAAAR,EAAAvE,GACAD,EAAA,OAAAgD,EAAA,cACAwB,KAAAA,GACA,SAAA9D,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,OAGAT,GAAA,KAAAU,EAAAkC,IAAAjC,MAQAxe,KAAA6iB,OAAA,SAAA1P,EAAAiP,EAAAlY,EAAA2T,GACA,GAAAiD,GAAA,GAAA7gB,GAAA8e,IAEA+B,GAAAnB,KAAA,KAAA,SAAArB,EAAAwE,GACA,GAAAxE,EACA,MAAAT,GAAAS,EAGA,IAAAxc,IACAoI,QAAAA,EACA6Y,QACAjY,KAAA2S,EAAAqD,KACAkC,MAAAF,EAAAE,OAEAC,SACA9P,GAEAiP,KAAAA,EAGAxE,GAAA,OAAAgD,EAAA,eAAA9e,EAAA,SAAAwc,EAAAC,EAAAC,GACA,MAAAF,GACAT,EAAAS,IAGAkC,EAAAC,IAAAlC,EAAAkC,QAEA5C,GAAA,KAAAU,EAAAkC,IAAAjC,SAQAxe,KAAAkjB,WAAA,SAAA5B,EAAAuB,EAAAhF,GACAD,EAAA,QAAAgD,EAAA,mBAAAU,GACAb,IAAAoC,GACAhF,IAMA7d,KAAA2f,KAAA,SAAA9B,GACAD,EAAA,MAAAgD,EAAA,KAAA/C,IAMA7d,KAAAmjB,aAAA,SAAAtF,EAAAuF,GACAA,EAAAA,GAAA,GACA,IAAA1C,GAAA1gB,IAEA4d,GAAA,MAAAgD,EAAA,sBAAA,KAAA,SAAAtC,EAAAxc,EAAA0c,GACA,MAAAF,GACAT,EAAAS,QAGA,MAAAE,EAAA/a,OACA+O,WACA,WACAkO,EAAAyC,aAAAtF,EAAAuF,IAEAA,GAGAvF,EAAAS,EAAAxc,EAAA0c,OAQAxe,KAAAqjB,SAAA,SAAArC,EAAAjV,EAAA8R,GACA9R,EAAAuX,UAAAvX,GACA6R,EAAA,MAAAgD,EAAA,aAAA7U,EAAA,IAAAA,EAAA,KACAiV,IAAAA,GACAnD,IAMA7d,KAAAujB,KAAA,SAAA1F,GACAD,EAAA,OAAAgD,EAAA,SAAA,KAAA/C,IAMA7d,KAAAwjB,UAAA,SAAA3F,GACAD,EAAA,MAAAgD,EAAA,SAAA,KAAA/C,IAMA7d,KAAAugB,OAAA,SAAAkD,EAAAC,EAAA7F,GACA,IAAA9X,UAAA/E,QAAA,kBAAA+E,WAAA,KACA8X,EAAA6F,EACAA,EAAAD,EACAA,EAAA,UAGAzjB,KAAA2gB,OAAA,SAAA8C,EAAA,SAAAnF,EAAA0C,GACA,MAAA1C,IAAAT,EACAA,EAAAS,OAGAoC,GAAAO,WACAD,IAAA,cAAA0C,EACAjD,IAAAO,GACAnD,MAOA7d,KAAA2jB,kBAAA,SAAAlG,EAAAI,GACAD,EAAA,OAAAgD,EAAA,SAAAnD,EAAAI,IAMA7d,KAAA4jB,UAAA,SAAA/F,GACAD,EAAA,MAAAgD,EAAA,SAAA,KAAA/C,IAMA7d,KAAA6jB,QAAA,SAAA7b,EAAA6V,GACAD,EAAA,MAAAgD,EAAA,UAAA5Y,EAAA,KAAA6V,IAMA7d,KAAA8jB,WAAA,SAAArG,EAAAI,GACAD,EAAA,OAAAgD,EAAA,SAAAnD,EAAAI,IAMA7d,KAAA+jB,SAAA,SAAA/b,EAAAyV,EAAAI,GACAD,EAAA,QAAAgD,EAAA,UAAA5Y,EAAAyV,EAAAI,IAMA7d,KAAAgkB,WAAA,SAAAhc,EAAA6V,GACAD,EAAA,SAAAgD,EAAA,UAAA5Y,EAAA,KAAA6V,IAMA7d,KAAAgE,KAAA,SAAAuc,EAAAxU,EAAA8R,GACAD,EAAA,MAAAgD,EAAA,aAAA0C,UAAAvX,IAAAwU,EAAA,QAAAA,EAAA,IACA,KAAA1C,GAAA,IAMA7d,KAAA2M,OAAA,SAAA4T,EAAAxU,EAAA8R,GACA6C,EAAAsB,OAAAzB,EAAAxU,EAAA,SAAAuS,EAAAmC,GACA,MAAAnC,GACAT,EAAAS,OAGAV,GAAA,SAAAgD,EAAA,aAAA7U,GACA7B,QAAA6B,EAAA,cACA0U,IAAAA,EACAF,OAAAA,GACA1C,MAMA7d,KAAAA,UAAAA,KAAA2M,OAKA3M,KAAAikB,KAAA,SAAA1D,EAAAxU,EAAAmY,EAAArG,GACAyC,EAAAC,EAAA,SAAAjC,EAAA6F,GACAzD,EAAAyB,QAAAgC,EAAA,kBAAA,SAAA7F,EAAA8D,GAEAA,EAAAhe,QAAA,SAAA4c,GACAA,EAAAjV,OAAAA,IACAiV,EAAAjV,KAAAmY,GAGA,SAAAlD,EAAA/B,YACA+B,GAAAP,MAIAC,EAAAkC,SAAAR,EAAA,SAAA9D,EAAA8F,GACA1D,EAAAmC,OAAAsB,EAAAC,EAAA,WAAArY,EAAA,SAAAuS,EAAAuE,GACAnC,EAAAwC,WAAA3C,EAAAsC,EAAAhF,YAUA7d,KAAA4L,MAAA,SAAA2U,EAAAxU,EAAAuW,EAAApY,EAAAuT,EAAAI,GACA,mBAAAA,KACAA,EAAAJ,EACAA,MAGAiD,EAAAsB,OAAAzB,EAAA+C,UAAAvX,GAAA,SAAAuS,EAAAmC,GACA,GAAA4D,IACAna,QAAAA,EACAoY,QAAA,mBAAA7E,GAAAzS,QAAAyS,EAAAzS,OAAAwS,EAAA8E,GAAAA,EACA/B,OAAAA,EACA+D,UAAA7G,GAAAA,EAAA6G,UAAA7G,EAAA6G,UAAApgB,OACA6e,OAAAtF,GAAAA,EAAAsF,OAAAtF,EAAAsF,OAAA7e,OAIAoa,IAAA,MAAAA,EAAA3O,QACA0U,EAAA5D,IAAAA,GAGA7C,EAAA,MAAAgD,EAAA,aAAA0C,UAAAvX,GAAAsY,EAAAxG,MAYA7d,KAAAukB,WAAA,SAAA9G,EAAAI,GACAJ,EAAAA,KACA,IAAApb,GAAAue,EAAA,WACA/d,IAcA,IAZA4a,EAAAgD,KACA5d,EAAA6D,KAAA,OAAAuE,mBAAAwS,EAAAgD,MAGAhD,EAAA1R,MACAlJ,EAAA6D,KAAA,QAAAuE,mBAAAwS,EAAA1R,OAGA0R,EAAAsF,QACAlgB,EAAA6D,KAAA,UAAAuE,mBAAAwS,EAAAsF,SAGAtF,EAAAgC,MAAA,CACA,GAAAA,GAAAhC,EAAAgC,KAEAA,GAAAhM,cAAArH,OACAqT,EAAAA,EAAAlU,eAGA1I,EAAA6D,KAAA,SAAAuE,mBAAAwU,IAGA,GAAAhC,EAAA+G,MAAA,CACA,GAAAA,GAAA/G,EAAA+G,KAEAA,GAAA/Q,cAAArH,OACAoY,EAAAA,EAAAjZ,eAGA1I,EAAA6D,KAAA,SAAAuE,mBAAAuZ,IAGA/G,EAAA2B,MACAvc,EAAA6D,KAAA,QAAA+W,EAAA2B,MAGA3B,EAAAgH,SACA5hB,EAAA6D,KAAA,YAAA+W,EAAAgH,SAGA5hB,EAAA7B,OAAA,IACAqB,GAAA,IAAAQ,EAAA2I,KAAA,MAGAoS,EAAA,MAAAvb,EAAA,KAAAwb,IAMA7d,KAAA0kB,UAAA,SAAAC,EAAAC,EAAA/G,GACAD,EAAA,MAAA,iBAAA+G,EAAA,IAAAC,EAAA,KAAA/G,IAMA7d,KAAA6kB,KAAA,SAAAF,EAAAC,EAAA/G,GACAD,EAAA,MAAA,iBAAA+G,EAAA,IAAAC,EAAA,KAAA/G,IAMA7d,KAAA8kB,OAAA,SAAAH,EAAAC,EAAA/G,GACAD,EAAA,SAAA,iBAAA+G,EAAA,IAAAC,EAAA,KAAA/G,KAOA5d,EAAA8kB,KAAA,SAAAtH,GACA,GAAAzV,GAAAyV,EAAAzV,GACAgd,EAAA,UAAAhd,CAKAhI,MAAAgE,KAAA,SAAA6Z,GACAD,EAAA,MAAAoH,EAAA,KAAAnH,IAeA7d,KAAA+G,OAAA,SAAA0W,EAAAI,GACAD,EAAA,OAAA,SAAAH,EAAAI,IAMA7d,KAAAA,UAAA,SAAA6d,GACAD,EAAA,SAAAoH,EAAA,KAAAnH,IAMA7d,KAAAujB,KAAA,SAAA1F,GACAD,EAAA,OAAAoH,EAAA,QAAA,KAAAnH,IAMA7d,KAAAilB,OAAA,SAAAxH,EAAAI,GACAD,EAAA,QAAAoH,EAAAvH,EAAAI,IAMA7d,KAAA6kB,KAAA,SAAAhH,GACAD,EAAA,MAAAoH,EAAA,QAAA,KAAAnH,IAMA7d,KAAA8kB,OAAA,SAAAjH,GACAD,EAAA,SAAAoH,EAAA,QAAA,KAAAnH,IAMA7d,KAAA0kB,UAAA,SAAA7G,GACAD,EAAA,MAAAoH,EAAA,QAAA,KAAAnH,KAOA5d,EAAAilB,MAAA,SAAAzH,GACA,GAAA1R,GAAA,UAAA0R,EAAAqD,KAAA,IAAArD,EAAAoD,KAAA,SAEA7gB,MAAAmlB,KAAA,SAAA1H,EAAAI,GACA,GAAAuH,KAEA,KAAA,GAAA9gB,KAAAmZ,GACAA,EAAAtO,eAAA7K,IACA8gB,EAAA1e,KAAAuE,mBAAA3G,GAAA,IAAA2G,mBAAAwS,EAAAnZ,IAIA6Z,GAAApS,EAAA,IAAAqZ,EAAA5Z,KAAA,KAAAqS,IAGA7d,KAAAqlB,QAAA,SAAAC,EAAAD,EAAAxH,GACAD,EAAA,OAAA0H,EAAAC,cACAC,KAAAH,GACAxH,IAGA7d,KAAAylB,KAAA,SAAAH,EAAA7H,EAAAI,GACAD,EAAA,QAAA7R,EAAA,IAAAuZ,EAAA7H,EAAAI,IAGA7d,KAAA0lB,IAAA,SAAAJ,EAAAzH,GACAD,EAAA,MAAA7R,EAAA,IAAAuZ,EAAA,KAAAzH,KAOA5d,EAAA0lB,OAAA,SAAAlI,GACA,GAAA1R,GAAA,WACAqZ,EAAA,MAAA3H,EAAA2H,KAEAplB,MAAA4lB,aAAA,SAAAnI,EAAAI,GACAD,EAAA,MAAA7R,EAAA,eAAAqZ,EAAA3H,EAAAI,IAGA7d,KAAAa,KAAA,SAAA4c,EAAAI,GACAD,EAAA,MAAA7R,EAAA,OAAAqZ,EAAA3H,EAAAI,IAGA7d,KAAA6lB,OAAA,SAAApI,EAAAI,GACAD,EAAA,MAAA7R,EAAA,SAAAqZ,EAAA3H,EAAAI,IAGA7d,KAAA8lB,MAAA,SAAArI,EAAAI,GACAD,EAAA,MAAA7R,EAAA,QAAAqZ,EAAA3H,EAAAI,KAOA5d,EAAA8lB,UAAA,WACA/lB,KAAAgmB,aAAA,SAAAnI,GACAD,EAAA,MAAA,cAAA,KAAAC,KAIA5d,EA8CA,OAxCAA,GAAAgmB,UAAA,SAAAnF,EAAAD,GACA,MAAA,IAAA5gB,GAAAilB,OACApE,KAAAA,EACAD,KAAAA,KAIA5gB,EAAAimB,QAAA,SAAApF,EAAAD,GACA,MAAAA,GAKA,GAAA5gB,GAAAogB,YACAS,KAAAA,EACAhW,KAAA+V,IANA,GAAA5gB,GAAAogB,YACAU,SAAAD,KAUA7gB,EAAAkmB,QAAA,WACA,MAAA,IAAAlmB,GAAA8e,MAGA9e,EAAAmmB,QAAA,SAAApe,GACA,MAAA,IAAA/H,GAAA8kB,MACA/c,GAAAA,KAIA/H,EAAAomB,UAAA,SAAAjB,GACA,MAAA,IAAAnlB,GAAA0lB,QACAP,MAAAA,KAIAnlB,EAAA+lB,aAAA;AACA,MAAA,IAAA/lB,GAAA8lB,WAGA9lB,MrBo8EG6G,MAAQ,EAAEwf,UAAU,GAAGC,cAAc,GAAGpJ,KAAO,UAAU,KAAK","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index 711318c6..b3e4ca2c 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index edfcde46..9a31e51d 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index 32dec419..bd405680 100644 --- a/src/github.js +++ b/src/github.js @@ -389,13 +389,6 @@ _request('DELETE', repoPath + '/git/refs/' + ref, options, cb); }; - // Create a repo - // ------- - - this.createRepo = function (options, cb) { - _request('POST', '/user/repos', options, cb); - }; - // Delete a repo // -------- From 9335b8cba34c387748915d30c7131cd3206d096c Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sun, 21 Feb 2016 01:55:55 +0000 Subject: [PATCH 078/217] Minor code improvement --- dist/github.bundle.min.js | 4 ++-- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index c7eb3544..b2b520dd 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,3 +1,3 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),I(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&H(),this instanceof F?D(this,t):B())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new O,ct=new O,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){1===arguments.length&&"function"==typeof arguments[0]&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"undefined"==typeof a&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)},this.edit=function(t,r,o){n("PATCH",e+"/"+t,r,o)},this.get=function(t,r){n("GET",e+"/"+t,null,r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){ -return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),I(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&H(),this instanceof F?D(this,t):B())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new O,ct=new O,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)},this.edit=function(t,r,o){n("PATCH",e+"/"+t,r,o)},this.get=function(t,r){n("GET",e+"/"+t,null,r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18, +"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 5d22fcd4..976e02d8 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index b3e4ca2c..d4f3d47b 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){1===arguments.length&&"function"==typeof arguments[0]&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"undefined"==typeof a&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(f).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),n+="?"+o.join("&"),u(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var o="/users/"+t+"/repos",s=[];s.push("type="+encodeURIComponent(e.type||"all")),s.push("sort="+encodeURIComponent(e.sort||"updated")),s.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&s.push("page="+encodeURIComponent(e.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,o){f.branch=t,f.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,o))})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e,n){return t?r(t):(f.sha=e.sha,void r(null,e.sha,n))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,s,!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"function"==typeof r&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",o+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)},this.edit=function(t,o,s){n("PATCH",e+"/"+t,o,s)},this.get=function(t,o){n("GET",e+"/"+t,null,o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 9a31e51d..5bcdd40a 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","arguments","length","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAEM,cACA,UACA,OACA,SAEH,SAAUE,EAASC,EAAQC,EAAMC,GAC9B,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAGjC,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpBA,EAAUA,KAEV,IAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAI,GAAIS,KAASP,GACVA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAKhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAQK,cAAgB1B,EAAQ2B,MACvC,SAAW3B,EAAQ2B,MACnB,SAAW/B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTQ,KAAK,SAAUC,GACbtB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVxB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,SAGZvB,GACGF,KAAMA,EACNyB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB5C,EAAO4C,iBAAmB,SAA0B5B,EAAME,GAC9E,GAAI2B,OAEJ,QAAUC,KACPhC,EAAS,MAAOE,EAAM,KAAM,SAAU+B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO7B,GAAG6B,EAGPC,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAAQJ,EAAIK,kBAAkB,SAAW,IACzCC,MAAM,KACNC,OAAO,SAASC,GACd,MAAO,aAAalC,KAAKkC,KAE3BC,IAAI,SAASD,GACX,OAAQ,SAASE,KAAKF,QAAa,KAErCG,KAECP,IAGFrC,EAAOqC,EACPP,KAHA5B,EAAG6B,EAAKF,EAASI,QAo6B7B,OAx5BAjD,GAAO6D,KAAO,WACXvD,KAAKwD,MAAQ,SAAUnD,EAASO,GACJ,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN4C,IAEJA,GAAOd,KAAK,QAAUzB,mBAAmBf,EAAQuD,MAAQ,QACzDD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,MAAQ,YACzDF,EAAOd,KAAK,YAAczB,mBAAmBf,EAAQyD,UAAY,QAE7DzD,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGpDhD,GAAO,IAAM4C,EAAOK,KAAK,KAEzB1B,EAAiBvB,EAAKH,IAMzBZ,KAAKiE,KAAO,SAAUrD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKkE,MAAQ,SAAUtD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKmE,cAAgB,SAAU9D,EAASO,GACZ,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN4C,IAUJ,IARItD,EAAQ+D,KACTT,EAAOd,KAAK,YAGXxC,EAAQgE,eACTV,EAAOd,KAAK,sBAGXxC,EAAQiE,MAAO,CAChB,GAAIA,GAAQjE,EAAQiE,KAEhBA,GAAMC,cAAgBhD,OACvB+C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmBkD,IAG7C,GAAIjE,EAAQoE,OAAQ,CACjB,GAAIA,GAASpE,EAAQoE,MAEjBA,GAAOF,cAAgBhD,OACxBkD,EAASA,EAAOD,eAGnBb,EAAOd,KAAK,UAAYzB,mBAAmBqD,IAG1CpE,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGhDJ,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK0E,KAAO,SAAU7C,EAAUjB,GAC7B,GAAI+D,GAAU9C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOmE,EAAS,KAAM/D,IAMlCZ,KAAK4E,UAAY,SAAU/C,EAAUxB,EAASO,GACpB,kBAAZP,KACRO,EAAKP,EACLA,KAGH,IAAIU,GAAM,UAAYc,EAAW,SAC7B8B,IAEJA,GAAOd,KAAK,QAAUzB,mBAAmBf,EAAQuD,MAAQ,QACzDD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,MAAQ,YACzDF,EAAOd,KAAK,YAAczB,mBAAmBf,EAAQyD,UAAY,QAE7DzD,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQ0D,OAGpDhD,GAAO,IAAM4C,EAAOK,KAAK,KAEzB1B,EAAiBvB,EAAKH,IAMzBZ,KAAK6E,YAAc,SAAUhD,EAAUjB,GAEpC0B,EAAiB,UAAYT,EAAW,iCAAkCjB,IAM7EZ,KAAK8E,UAAY,SAAUjD,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK+E,SAAW,SAAUC,EAASpE,GAEhC0B,EAAiB,SAAW0C,EAAU,6DAA8DpE,IAMvGZ,KAAKiF,OAAS,SAAUpD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKkF,SAAW,SAAUrD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKmF,WAAa,SAAU9E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAO0F,WAAa,SAAU/E,GAsB3B,QAASgF,GAAWC,EAAQ1E,GACzB,MAAI0E,KAAWC,EAAYD,QAAUC,EAAYC,IACvC5E,EAAG,KAAM2E,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU7C,EAAK+C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB5E,EAAG6B,EAAK+C,KA7Bd,GAKIG,GALAC,EAAOvF,EAAQwF,KACfC,EAAOzF,EAAQyF,KACfC,EAAW1F,EAAQ0F,SAEnBN,EAAOzF,IAIR2F,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRxF,MAAK0F,OAAS,SAAUM,EAAKpF,GAC1BJ,EAAS,MAAOmF,EAAW,aAAeK,EAAK,KAAM,SAAUvD,EAAKC,EAAKC,GACtE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAIuD,OAAOT,IAAK7C,MAY/B3C,KAAKkG,UAAY,SAAU7F,EAASO,GACjCJ,EAAS,OAAQmF,EAAW,YAAatF,EAASO,IASrDZ,KAAKmG,UAAY,SAAUH,EAAKpF,GAC7BJ,EAAS,SAAUmF,EAAW,aAAeK,EAAK3F,EAASO,IAM9DZ,KAAKoG,WAAa,SAAUxF,GACzBJ,EAAS,SAAUmF,EAAUtF,EAASO,IAMzCZ,KAAKqG,SAAW,SAAUzF,GACvBJ,EAAS,MAAOmF,EAAW,QAAS,KAAM/E,IAM7CZ,KAAKsG,UAAY,SAAUjG,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,SACjBhC,IAEmB,iBAAZtD,GAERsD,EAAOd,KAAK,SAAWxC,IAEnBA,EAAQkG,OACT5C,EAAOd,KAAK,SAAWzB,mBAAmBf,EAAQkG,QAGjDlG,EAAQmG,MACT7C,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQmG,OAGhDnG,EAAQoG,MACT9C,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQoG,OAGhDpG,EAAQwD,MACTF,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGhDxD,EAAQqG,WACT/C,EAAOd,KAAK,aAAezB,mBAAmBf,EAAQqG,YAGrDrG,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUxC,EAAQ0D,MAG7B1D,EAAQyD,UACTH,EAAOd,KAAK,YAAcxC,EAAQyD,WAIpCH,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK2G,QAAU,SAAUC,EAAQhG,GAC9BJ,EAAS,MAAOmF,EAAW,UAAYiB,EAAQ,KAAMhG,IAMxDZ,KAAK6G,QAAU,SAAUJ,EAAMD,EAAM5F,GAClCJ,EAAS,MAAOmF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM5F,IAMvEZ,KAAK8G,aAAe,SAAUlG,GAC3BJ,EAAS,MAAOmF,EAAW,kBAAmB,KAAM,SAAUlD,EAAKsE,EAAOpE,GACvE,MAAIF,GACM7B,EAAG6B,IAGbsE,EAAQA,EAAM3D,IAAI,SAAUoD,GACzB,MAAOA,GAAKR,IAAI3E,QAAQ,iBAAkB,UAG7CT,GAAG,KAAMmG,EAAOpE,OAOtB3C,KAAKgH,QAAU,SAAUxB,EAAK5E,GAC3BJ,EAAS,MAAOmF,EAAW,cAAgBH,EAAK,KAAM5E,EAAI,QAM7DZ,KAAKiH,UAAY,SAAU3B,EAAQE,EAAK5E,GACrCJ,EAAS,MAAOmF,EAAW,gBAAkBH,EAAK,KAAM5E,IAM3DZ,KAAKkH,OAAS,SAAU5B,EAAQ5E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MAIbF,GAAS,MAAOmF,EAAW,aAAejF,GAAQ4E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU7C,EAAK0E,EAAaxE,GAC/B,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAMuG,EAAY3B,IAAK7C,KATtB8C,EAAKC,OAAO,SAAWJ,EAAQ1E,IAgB5CZ,KAAKoH,YAAc,SAAU5B,EAAK5E,GAC/BJ,EAAS,MAAOmF,EAAW,aAAeH,EAAK,KAAM5E,IAMxDZ,KAAKqH,QAAU,SAAUC,EAAM1G,GAC5BJ,EAAS,MAAOmF,EAAW,cAAgB2B,EAAM,KAAM,SAAU7E,EAAKC,EAAKC,GACxE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI4E,KAAM3E,MAOzB3C,KAAKuH,SAAW,SAAUC,EAAS5G,GAE7B4G,EADsB,gBAAd,IAELA,QAASA,EACTC,SAAU,UAIVD,QAASvH,EAAUuH,GACnBC,SAAU,UAIhBjH,EAAS,OAAQmF,EAAW,aAAc6B,EAAS,SAAU/E,EAAKC,EAAKC,GACpE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAOxB3C,KAAKqF,WAAa,SAAUqC,EAAUhH,EAAMiH,EAAM/G,GAC/C,GAAID,IACDiH,UAAWF,EACXJ,OAEM5G,KAAMA,EACNmH,KAAM,SACNjE,KAAM,OACN4B,IAAKmC,IAKdnH,GAAS,OAAQmF,EAAW,aAAchF,EAAM,SAAU8B,EAAKC,EAAKC,GACjE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK8H,SAAW,SAAUR,EAAM1G,GAC7BJ,EAAS,OAAQmF,EAAW,cACzB2B,KAAMA,GACN,SAAU7E,EAAKC,EAAKC,GACpB,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK+H,OAAS,SAAUC,EAAQV,EAAMW,EAASrH,GAC5C,GAAIkF,GAAO,GAAIpG,GAAO6D,IAEtBuC,GAAKpB,KAAK,KAAM,SAAUjC,EAAKyF,GAC5B,GAAIzF,EACD,MAAO7B,GAAG6B,EAGb,IAAI9B,IACDsH,QAASA,EACTE,QACGtC,KAAMxF,EAAQyF,KACdsC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT9G,GAAS,OAAQmF,EAAW,eAAgBhF,EAAM,SAAU8B,EAAKC,EAAKC,GACnE,MAAIF,GACM7B,EAAG6B,IAGb8C,EAAYC,IAAM9C,EAAI8C,QAEtB5E,GAAG,KAAM8B,EAAI8C,IAAK7C,SAQ3B3C,KAAKsI,WAAa,SAAU9B,EAAMuB,EAAQnH,GACvCJ,EAAS,QAASmF,EAAW,mBAAqBa,GAC/ChB,IAAKuC,GACLnH,IAMNZ,KAAK0E,KAAO,SAAU9D,GACnBJ,EAAS,MAAOmF,EAAU,KAAM/E,IAMnCZ,KAAKuI,aAAe,SAAU3H,EAAI4H,GAC/BA,EAAQA,GAAS,GACjB,IAAI/C,GAAOzF,IAEXQ,GAAS,MAAOmF,EAAW,sBAAuB,KAAM,SAAUlD,EAAK9B,EAAMgC,GAC1E,MAAIF,GACM7B,EAAG6B,QAGM,MAAfE,EAAIP,OACLqG,WACG,WACGhD,EAAK8C,aAAa3H,EAAI4H,IAEzBA,GAGH5H,EAAG6B,EAAK9B,EAAMgC,OAQvB3C,KAAK0I,SAAW,SAAU1C,EAAKtF,EAAME,GAClCF,EAAOiI,UAAUjI,GACjBF,EAAS,MAAOmF,EAAW,aAAejF,EAAO,IAAMA,EAAO,KAC3DsF,IAAKA,GACLpF,IAMNZ,KAAK4I,KAAO,SAAUhI,GACnBJ,EAAS,OAAQmF,EAAW,SAAU,KAAM/E,IAM/CZ,KAAK6I,UAAY,SAAUjI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKsF,OAAS,SAAUwD,EAAWC,EAAWnI,GAClB,IAArB6C,UAAUC,QAAwC,kBAAjBD,WAAU,KAC5C7C,EAAKmI,EACLA,EAAYD,EACZA,EAAY,UAGf9I,KAAK0F,OAAO,SAAWoD,EAAW,SAAUrG,EAAKuD,GAC9C,MAAIvD,IAAO7B,EACDA,EAAG6B,OAGbgD,GAAKS,WACFF,IAAK,cAAgB+C,EACrBvD,IAAKQ,GACLpF,MAOTZ,KAAKgJ,kBAAoB,SAAU3I,EAASO,GACzCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKiJ,UAAY,SAAUrI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKkJ,QAAU,SAAUC,EAAIvI,GAC1BJ,EAAS,MAAOmF,EAAW,UAAYwD,EAAI,KAAMvI,IAMpDZ,KAAKoJ,WAAa,SAAU/I,EAASO,GAClCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKqJ,SAAW,SAAUF,EAAI9I,EAASO,GACpCJ,EAAS,QAASmF,EAAW,UAAYwD,EAAI9I,EAASO,IAMzDZ,KAAKsJ,WAAa,SAAUH,EAAIvI,GAC7BJ,EAAS,SAAUmF,EAAW,UAAYwD,EAAI,KAAMvI,IAMvDZ,KAAKuJ,KAAO,SAAUjE,EAAQ5E,EAAME,GACjCJ,EAAS,MAAOmF,EAAW,aAAegD,UAAUjI,IAAS4E,EAAS,QAAUA,EAAS,IACtF,KAAM1E,GAAI,IAMhBZ,KAAKwJ,OAAS,SAAUlE,EAAQ5E,EAAME,GACnC6E,EAAKyB,OAAO5B,EAAQ5E,EAAM,SAAU+B,EAAK+C,GACtC,MAAI/C,GACM7B,EAAG6B,OAGbjC,GAAS,SAAUmF,EAAW,aAAejF,GAC1CuH,QAASvH,EAAO,cAChB8E,IAAKA,EACLF,OAAQA,GACR1E,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUnE,EAAQ5E,EAAMgJ,EAAS9I,GAC1CyE,EAAWC,EAAQ,SAAU7C,EAAKkH,GAC/BlE,EAAK4B,QAAQsC,EAAe,kBAAmB,SAAUlH,EAAK6E,GAE3DA,EAAKsC,QAAQ,SAAU5D,GAChBA,EAAItF,OAASA,IACdsF,EAAItF,KAAOgJ,GAGG,SAAb1D,EAAIpC,YACEoC,GAAIR,MAIjBC,EAAKqC,SAASR,EAAM,SAAU7E,EAAKoH,GAChCpE,EAAKsC,OAAO4B,EAAcE,EAAU,WAAanJ,EAAM,SAAU+B,EAAKsF,GACnEtC,EAAK6C,WAAWhD,EAAQyC,EAAQnH,YAU/CZ,KAAK8J,MAAQ,SAAUxE,EAAQ5E,EAAM8G,EAASS,EAAS5H,EAASO,GAC3C,mBAAPA,KACRA,EAAKP,EACLA,MAGHoF,EAAKyB,OAAO5B,EAAQqD,UAAUjI,GAAO,SAAU+B,EAAK+C,GACjD,GAAIuE,IACD9B,QAASA,EACTT,QAAmC,mBAAnBnH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUuH,GAAWA,EACxFlC,OAAQA,EACR0E,UAAW3J,GAAWA,EAAQ2J,UAAY3J,EAAQ2J,UAAYC,OAC9D9B,OAAQ9H,GAAWA,EAAQ8H,OAAS9H,EAAQ8H,OAAS8B,OAIlDxH,IAAqB,MAAdA,EAAIJ,QACd0H,EAAavE,IAAMA,GAGtBhF,EAAS,MAAOmF,EAAW,aAAegD,UAAUjI,GAAOqJ,EAAcnJ,MAY/EZ,KAAKkK,WAAa,SAAU7J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,WACjBhC,IAcJ,IAZItD,EAAQmF,KACT7B,EAAOd,KAAK,OAASzB,mBAAmBf,EAAQmF,MAG/CnF,EAAQK,MACTiD,EAAOd,KAAK,QAAUzB,mBAAmBf,EAAQK,OAGhDL,EAAQ8H,QACTxE,EAAOd,KAAK,UAAYzB,mBAAmBf,EAAQ8H,SAGlD9H,EAAQiE,MAAO,CAChB,GAAIA,GAAQjE,EAAQiE,KAEhBA,GAAMC,cAAgBhD,OACvB+C,EAAQA,EAAME,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmBkD,IAG7C,GAAIjE,EAAQ8J,MAAO,CAChB,GAAIA,GAAQ9J,EAAQ8J,KAEhBA,GAAM5F,cAAgBhD,OACvB4I,EAAQA,EAAM3F,eAGjBb,EAAOd,KAAK,SAAWzB,mBAAmB+I,IAGzC9J,EAAQ0D,MACTJ,EAAOd,KAAK,QAAUxC,EAAQ0D,MAG7B1D,EAAQ+J,SACTzG,EAAOd,KAAK,YAAcxC,EAAQ+J,SAGjCzG,EAAOD,OAAS,IACjB3C,GAAO,IAAM4C,EAAOK,KAAK,MAG5BxD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKqK,UAAY,SAASC,EAAOC,EAAY3J,GAC1CJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKwK,KAAO,SAASF,EAAOC,EAAY3J,GACrCJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKyK,OAAS,SAASH,EAAOC,EAAY3J,GACvCJ,EAAS,SAAU,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,KAO5ElB,EAAOgL,KAAO,SAAUrK,GACrB,GAAI8I,GAAK9I,EAAQ8I,GACbwB,EAAW,UAAYxB,CAK3BnJ,MAAKuJ,KAAO,SAAU3I,GACnBJ,EAAS,MAAOmK,EAAU,KAAM/J,IAenCZ,KAAK4K,OAAS,SAAUvK,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUmK,EAAU,KAAM/J,IAMtCZ,KAAK4I,KAAO,SAAUhI,GACnBJ,EAAS,OAAQmK,EAAW,QAAS,KAAM/J,IAM9CZ,KAAK6K,OAAS,SAAUxK,EAASO,GAC9BJ,EAAS,QAASmK,EAAUtK,EAASO,IAMxCZ,KAAKwK,KAAO,SAAU5J,GACnBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,IAM7CZ,KAAKyK,OAAS,SAAU7J,GACrBJ,EAAS,SAAUmK,EAAW,QAAS,KAAM/J,IAMhDZ,KAAKqK,UAAY,SAAUzJ,GACxBJ,EAAS,MAAOmK,EAAW,QAAS,KAAM/J,KAOhDlB,EAAOoL,MAAQ,SAAUzK,GACtB,GAAIK,GAAO,UAAYL,EAAQyF,KAAO,IAAMzF,EAAQuF,KAAO,SAE3D5F,MAAK+K,KAAO,SAAU1K,EAASO,GAC5B,GAAIoK,KAEJ,KAAI,GAAIC,KAAO5K,GACRA,EAAQc,eAAe8J,IACxBD,EAAMnI,KAAKzB,mBAAmB6J,GAAO,IAAM7J,mBAAmBf,EAAQ4K,IAI5E3I,GAAiB5B,EAAO,IAAMsK,EAAMhH,KAAK,KAAMpD,IAGlDZ,KAAKkL,QAAU,SAAUC,EAAOD,EAAStK,GACtCJ,EAAS,OAAQ2K,EAAMC,cACpBC,KAAMH,GACNtK,IAGNZ,KAAKsL,KAAO,SAAUH,EAAO9K,EAASO,GACnCJ,EAAS,QAASE,EAAO,IAAMyK,EAAO9K,EAASO,IAGlDZ,KAAKuL,IAAM,SAAUJ,EAAOvK,GACzBJ,EAAS,MAAOE,EAAO,IAAMyK,EAAO,KAAMvK,KAOhDlB,EAAO8L,OAAS,SAAUnL,GACvB,GAAIK,GAAO,WACPsK,EAAQ,MAAQ3K,EAAQ2K,KAE5BhL,MAAKyL,aAAe,SAAUpL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiBsK,EAAO3K,EAASO,IAG3DZ,KAAK0L,KAAO,SAAUrL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAASsK,EAAO3K,EAASO,IAGnDZ,KAAK2L,OAAS,SAAUtL,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAWsK,EAAO3K,EAASO,IAGrDZ,KAAK4L,MAAQ,SAAUvL,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAUsK,EAAO3K,EAASO,KAOvDlB,EAAOmM,UAAY,WAChB7L,KAAK8L,aAAe,SAASlL,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOqM,UAAY,SAAUjG,EAAMF,GAChC,MAAO,IAAIlG,GAAOoL,OACfhF,KAAMA,EACNF,KAAMA,KAIZlG,EAAOsM,QAAU,SAAUlG,EAAMF,GAC9B,MAAKA,GAKK,GAAIlG,GAAO0F,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIlG,GAAO0F,YACfW,SAAUD,KAUnBpG,EAAOuM,QAAU,WACd,MAAO,IAAIvM,GAAO6D,MAGrB7D,EAAOwM,QAAU,SAAU/C,GACxB,MAAO,IAAIzJ,GAAOgL,MACfvB,GAAIA,KAIVzJ,EAAOyM,UAAY,SAAUnB,GAC1B,MAAO,IAAItL,GAAO8L,QACfR,MAAOA,KAIbtL,EAAOoM,aAAe,WACnB,MAAO,IAAIpM,GAAOmM,WAGdnM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (arguments.length === 1 && typeof arguments[0] === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof (content) === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof cb === 'undefined') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index bd405680..3d3f3894 100644 --- a/src/github.js +++ b/src/github.js @@ -150,7 +150,7 @@ Github.User = function () { this.repos = function (options, cb) { - if (arguments.length === 1 && typeof arguments[0] === 'function') { + if (typeof options === 'function') { cb = options; options = {}; } @@ -191,7 +191,7 @@ // ------- this.notifications = function (options, cb) { - if (arguments.length === 1 && typeof arguments[0] === 'function') { + if (typeof options === 'function') { cb = options; options = {}; } @@ -538,7 +538,7 @@ // ------- this.postBlob = function (content, cb) { - if (typeof (content) === 'string') { + if (typeof content === 'string') { content = { content: content, encoding: 'utf-8' @@ -824,7 +824,7 @@ // ------- this.write = function (branch, path, content, message, options, cb) { - if (typeof cb === 'undefined') { + if (typeof options === 'function') { cb = options; options = {}; } From 3dc854a40e3cca355ee1258fe4956ff23c7800fc Mon Sep 17 00:00:00 2001 From: Damian Fortuna Date: Sun, 21 Feb 2016 18:37:36 -0300 Subject: [PATCH 079/217] Added create issue Closes gh-291 --- README.md | 17 +++++++++++++++++ src/github.js | 6 +++++- test/test.issue.js | 15 +++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 08e5d4a5..045a66bf 100644 --- a/README.md +++ b/README.md @@ -386,6 +386,23 @@ To read all the issues of a given repository issues.list(options, function(err, issues) {}); ``` +To create an issue + +```js +var options = { + title: "Found a bug", + body: "I'm having a problem with this.", + assignee: "assignee_username", + milestone: 1, + labels: [ + "Label1", + "Label2" + ] +}; + +issues.create(options, function(err, issue) {}); +``` + To comment in a issue ```js diff --git a/src/github.js b/src/github.js index 3d3f3894..cb6546a5 100644 --- a/src/github.js +++ b/src/github.js @@ -1008,6 +1008,10 @@ Github.Issue = function (options) { var path = '/repos/' + options.user + '/' + options.repo + '/issues'; + this.create = function(options, cb) { + _request('POST', path, options, cb); + }; + this.list = function (options, cb) { var query = []; @@ -1115,4 +1119,4 @@ }; return Github; -})); \ No newline at end of file +})); diff --git a/test/test.issue.js b/test/test.issue.js index 5fac713c..a4c6c1a9 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -17,6 +17,21 @@ describe('Github.Issue', function() { issues = github.getIssues(testUser.USERNAME, 'TestRepo'); }); + it('should create issue', function(done) { + issues.create({ + title: 'New issue', + body: 'New issue body' + }, function(err, issue, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + should.exist(issue.url); + issue.title.should.equal('New issue'); + issue.body.should.equal('New issue body'); + + done(); + }); + }); + it('should list issues', function(done) { issues.list({}, function(err, issues, xhr) { should.not.exist(err); From b29e1f4373946640643825f1bf528e9a719ffcab Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Mon, 29 Feb 2016 08:33:48 -0600 Subject: [PATCH 080/217] Add release events API Ref gh-162 Closes gh-297 --- dist/github.bundle.min.js | 4 +-- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 28 +++++++++++++++++ test/test.repo.js | 58 +++++++++++++++++++++++++++++++++-- 6 files changed, 89 insertions(+), 7 deletions(-) diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index b2b520dd..56b02112 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,3 +1,3 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};t[s][0].call(f.exports,function(e){var n=t[s][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?e:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=t("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(t,e){"undefined"==typeof f&&"content-type"===e.toLowerCase()?delete l[e]:p.setRequestHeader(e,t)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),c=t("./helpers/combineURLs"),f=t("./helpers/bind"),l=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=c(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=l(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var p=new r(o),h=e.exports=f(r.prototype.request,p);h.create=function(t){return new r(t)},h.defaults=p.defaults,h.all=function(t){return Promise.all(t)},h.spread=t("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},h[t]=f(r.prototype[t],p)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},h[t]=f(r.prototype[t],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===y.call(t)}function o(t){return"[object ArrayBuffer]"===y.call(t)}function i(t){return"[object FormData]"===y.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function c(t){return"undefined"==typeof t}function f(t){return null!==t&&"object"==typeof t}function l(t){return"[object Date]"===y.call(t)}function p(t){return"[object File]"===y.call(t)}function h(t){return"[object Blob]"===y.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)g(arguments[n],t);return e}var y=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;(u.global===u||u.window===u)&&(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(t){throw new a(t)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(t){t=String(t).replace(l,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9\/]/.test(t))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){V=t}function a(t){$=t}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function p(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var t=0;Y>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}Y=0}function m(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(y);return C(n,t),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then}catch(e){return at.error=e,at}}function T(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function _(t,e,n){$(function(t){var r=!1,o=T(n,e,function(n){r||(r=!0,e!==n?C(t,n):S(t,n))},function(e){r||(r=!0,U(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,U(t,o))},t)}function A(t,e){e._state===st?S(t,e._result):e._state===ut?U(t,e._result):j(e,void 0,function(e){C(t,e)},function(e){U(t,e)})}function R(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?A(t,e):n===at?U(t,at.error):void 0===n?S(t,e):s(n)?_(t,e,n):S(t,e)}function C(t,e){t===e?U(t,w()):i(e)?R(t,e,E(e)):S(t,e)}function x(t){t._onerror&&t._onerror(t._result),I(t)}function S(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function U(t,e){t._state===it&&(t._state=ut,t._result=e,$(x,t))}function j(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)j(r.resolve(t[s]),void 0,e,n);return o}function q(t){var e=this,n=new e(y);return U(n,t),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(t){this._id=ht++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==t&&("function"!=typeof t&&H(),this instanceof F?D(this,t):B())}function N(t,e){this._instanceConstructor=t,this.promise=new t(y),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(t.Promise=dt)}var X;X=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,V,J,K=X,Y=0,$=function(t,e){nt[Y]=t,nt[Y+1]=e,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);J=tt?c():Q?l():et?p():void 0===W&&"function"==typeof e?m():h();var rt=g,ot=v,it=void 0,st=1,ut=2,at=new O,ct=new O,ft=L,lt=k,pt=q,ht=0,dt=F;F.all=ft,F.race=lt,F.resolve=ot,F.reject=pt,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:rt,"catch":function(t){return this.then(null,t)}};var mt=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},N.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(y);R(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},N.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?U(r,n):this._result[e]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(t,e){var n=this;j(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var gt=M,vt={Promise:dt,polyfill:gt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),gt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(t,e,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var t=setTimeout(r);f=!0;for(var e=c.length;e;){for(u=c,c=[];++l1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function f(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function p(){var t,e,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=l();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=l(),n=l(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=l(),n=l(),r=l(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){v=i(t),y=v.length,w=0;for(var e,n=[];(e=p())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof e&&e;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},_=T.hasOwnProperty;for(var A in E)_.call(E,A)&&(d[A]=E[A])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(e,n,r){"use strict";!function(r,o){"function"==typeof t&&t.amd?t(["es6-promise","base-64","utf8","axios"],function(t,e,n,i){return r.Github=o(t,e,n,i)}):"object"==typeof n&&n.exports?n.exports=o(e("es6-promise"),e("base-64"),e("utf8"),e("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(t,e,n,r){function o(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(t+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+o(t.username+":"+t.password)),r(f).then(function(t){u(null,t.data||!0,t.request)},function(t){304===t.status?u(null,t.data||!0,t.request):u({path:i,request:t.request,error:t.status})})},s=i._requestAllPages=function(t,e){var r=[];!function o(){n("GET",t,null,function(n,i,s){if(n)return e(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();u?(t=u,o()):e(n,r,s)})}()};return i.User=function(){this.repos=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),s(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var r="/notifications",o=[];if(t.all&&o.push("all=true"),t.participating&&o.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}t.page&&o.push("page="+encodeURIComponent(t.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,e)},this.show=function(t,e){var r=t?"/users/"+t:"/user";n("GET",r,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(t,e){s("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){s("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,r){f.branch=t,f.sha=r,e(n,r)})}var r,s=t.name,u=t.user,a=t.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){n("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,o){n("DELETE",r+"/git/refs/"+e,t,o)},this.deleteRepo=function(e){n("DELETE",r,t,e)},this.listTags=function(t){n("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var o=r+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.getPull=function(t,e){n("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,o){n("GET",r+"/compare/"+t+"..."+e,null,o)},this.listBranches=function(t){n("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){n("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,o){n("GET",r+"/git/commits/"+e,null,o)},this.getSha=function(t,e,o){return e&&""!==e?void n("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?o(t):void o(null,e.sha,n)}):c.getRef("heads/"+t,o)},this.getStatuses=function(t,e){n("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:o(t),encoding:"base64"},n("POST",r+"/git/blobs",t,function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.updateTree=function(t,e,o,i){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:t.user,email:a.email},parents:[e],tree:o};n("POST",r+"/git/commits",c,function(t,e,n){return t?u(t):(f.sha=e.sha,void u(null,e.sha,n))})})},this.updateHead=function(t,e,o){n("PATCH",r+"/git/refs/heads/"+t,{sha:e},o)},this.show=function(t){n("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?t(n):void(202===i.status?setTimeout(function(){o.contributors(t,e)},e):t(n,r,i))})},this.contents=function(t,e,o){e=encodeURI(e),n("GET",r+"/contents"+(e?"/"+e:""),{ref:t},o)},this.fork=function(t){n("POST",r+"/forks",null,t)},this.listForks=function(t){n("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){n("POST",r+"/pulls",t,e)},this.listHooks=function(t){n("GET",r+"/hooks",null,t)},this.getHook=function(t,e){n("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",r+"/hooks",t,e)},this.editHook=function(t,e,o){n("PATCH",r+"/hooks/"+t,e,o)},this.deleteHook=function(t,e){n("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,o){n("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,o,!0)},this.remove=function(t,e,o){c.getSha(t,e,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},o)})},this["delete"]=this.remove,this.move=function(t,n,r,o){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,s){s.forEach(function(t){t.path===n&&(t.path=r),"tree"===t.type&&delete t.sha}),c.postTree(s,function(e,r){c.commit(i,r,"Deleted "+n,function(e,n){c.updateHead(t,n,o)})})})})},this.write=function(t,e,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var o=r+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,e)},this.isStarred=function(t,e,r){n("GET","/user/starred/"+t+"/"+e,null,r)},this.star=function(t,e,r){n("PUT","/user/starred/"+t+"/"+e,null,r)},this.unstar=function(t,e,r){n("DELETE","/user/starred/"+t+"/"+e,null,r)}},i.Gist=function(t){var e=t.id,r="/gists/"+e;this.read=function(t){n("GET",r,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",r,null,t)},this.fork=function(t){n("POST",r+"/fork",null,t)},this.update=function(t,e){n("PATCH",r,t,e)},this.star=function(t){n("PUT",r+"/star",null,t)},this.unstar=function(t){n("DELETE",r+"/star",null,t)},this.isStarred=function(t){n("GET",r+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var r=[];for(var o in t)t.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(t[o]));s(e+"?"+r.join("&"),n)},this.comment=function(t,e,r){n("POST",t.comments_url,{body:e},r)},this.edit=function(t,r,o){n("PATCH",e+"/"+t,r,o)},this.get=function(t,r){n("GET",e+"/"+t,null,r)}},i.Search=function(t){var e="/search/",r="?q="+t.query;this.repositories=function(t,o){n("GET",e+"repositories"+r,t,o)},this.code=function(t,o){n("GET",e+"code"+r,t,o)},this.issues=function(t,o){n("GET",e+"issues"+r,t,o)},this.users=function(t,o){n("GET",e+"users"+r,t,o)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18, -"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function R(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function _(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?_(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?R(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),I(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(I,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(I,e)}function I(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&H(),this instanceof F?D(this,e):B())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new O,ce=new O,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},R=T.hasOwnProperty;for(var _ in E)R.call(E,_)&&(d[_]=E[_])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)},this.createRelease=function(e,t){n("POST",r+"/releases",e,t)},this.editRelease=function(e,t,o){n("PATCH",r+"/releases/"+e,t,o)},this.getRelease=function(e,t){n("GET",r+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",r+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,r){n("POST",t,e,r)},this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)},this.edit=function(e,r,o){n("PATCH",t+"/"+e,r,o)},this.get=function(e,r){n("GET",t+"/"+e,null,r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){ +return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 976e02d8..7580a0bd 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index d4f3d47b..e178e5da 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(t,e){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return t.Github=e(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=e(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):t.Github=e(t.Promise,t.base64,t.utf8,t.axios)}(this,function(t,e,n,o){function s(t){return e.encode(n.encode(t))}t.polyfill&&t.polyfill();var i=function(t){t=t||{};var e=t.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var t=i.indexOf("//")>=0?i:e+i;if(t+=/\?/.test(t)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(t+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(t.token||t.username&&t.password)&&(f.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),o(f).then(function(t){r(null,t.data||!0,t.request)},function(t){304===t.status?r(null,t.data||!0,t.request):r({path:i,request:t.request,error:t.status})})},u=i._requestAllPages=function(t,e){var o=[];!function s(){n("GET",t,null,function(n,i,u){if(n)return e(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();r?(t=r,s()):e(n,o,u)})}()};return i.User=function(){this.repos=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),n+="?"+o.join("&"),u(n,e)},this.orgs=function(t){n("GET","/user/orgs",null,t)},this.gists=function(t){n("GET","/gists",null,t)},this.notifications=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var o="/notifications",s=[];if(t.all&&s.push("all=true"),t.participating&&s.push("participating=true"),t.since){var i=t.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(t.before){var u=t.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}t.page&&s.push("page="+encodeURIComponent(t.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,e)},this.show=function(t,e){var o=t?"/users/"+t:"/user";n("GET",o,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var o="/users/"+t+"/repos",s=[];s.push("type="+encodeURIComponent(e.type||"all")),s.push("sort="+encodeURIComponent(e.sort||"updated")),s.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&s.push("page="+encodeURIComponent(e.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(t,e){u("/users/"+t+"/starred?type=all&per_page=100",e)},this.userGists=function(t,e){n("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){u("/orgs/"+t+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",e)},this.follow=function(t,e){n("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){n("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){n("POST","/user/repos",t,e)}},i.Repository=function(t){function e(t,e){return t===f.branch&&f.sha?e(null,f.sha):void c.getRef("heads/"+t,function(n,o){f.branch=t,f.sha=o,e(n,o)})}var o,u=t.name,r=t.user,a=t.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var f={branch:null,sha:null};this.getRef=function(t,e){n("GET",o+"/git/refs/"+t,null,function(t,n,o){return t?e(t):void e(null,n.object.sha,o)})},this.createRef=function(t,e){n("POST",o+"/git/refs",t,e)},this.deleteRef=function(e,s){n("DELETE",o+"/git/refs/"+e,t,s)},this.deleteRepo=function(e){n("DELETE",o,t,e)},this.listTags=function(t){n("GET",o+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var s=o+"/pulls",i=[];"string"==typeof t?i.push("state="+t):(t.state&&i.push("state="+encodeURIComponent(t.state)),t.head&&i.push("head="+encodeURIComponent(t.head)),t.base&&i.push("base="+encodeURIComponent(t.base)),t.sort&&i.push("sort="+encodeURIComponent(t.sort)),t.direction&&i.push("direction="+encodeURIComponent(t.direction)),t.page&&i.push("page="+t.page),t.per_page&&i.push("per_page="+t.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.getPull=function(t,e){n("GET",o+"/pulls/"+t,null,e)},this.compare=function(t,e,s){n("GET",o+"/compare/"+t+"..."+e,null,s)},this.listBranches=function(t){n("GET",o+"/git/refs/heads",null,function(e,n,o){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,o))})},this.getBlob=function(t,e){n("GET",o+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,s){n("GET",o+"/git/commits/"+e,null,s)},this.getSha=function(t,e,s){return e&&""!==e?void n("GET",o+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,n){return t?s(t):void s(null,e.sha,n)}):c.getRef("heads/"+t,s)},this.getStatuses=function(t,e){n("GET",o+"/statuses/"+t,null,e)},this.getTree=function(t,e){n("GET",o+"/git/trees/"+t,null,function(t,n,o){return t?e(t):void e(null,n.tree,o)})},this.postBlob=function(t,e){t="string"==typeof t?{content:t,encoding:"utf-8"}:{content:s(t),encoding:"base64"},n("POST",o+"/git/blobs",t,function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.updateTree=function(t,e,s,i){var u={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(t,e,n){return t?i(t):void i(null,e.sha,n)})},this.postTree=function(t,e){n("POST",o+"/git/trees",{tree:t},function(t,n,o){return t?e(t):void e(null,n.sha,o)})},this.commit=function(e,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:t.user,email:a.email},parents:[e],tree:s};n("POST",o+"/git/commits",c,function(t,e,n){return t?r(t):(f.sha=e.sha,void r(null,e.sha,n))})})},this.updateHead=function(t,e,s){n("PATCH",o+"/git/refs/heads/"+t,{sha:e},s)},this.show=function(t){n("GET",o,null,t)},this.contributors=function(t,e){e=e||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?t(n):void(202===i.status?setTimeout(function(){s.contributors(t,e)},e):t(n,o,i))})},this.contents=function(t,e,s){e=encodeURI(e),n("GET",o+"/contents"+(e?"/"+e:""),{ref:t},s)},this.fork=function(t){n("POST",o+"/forks",null,t)},this.listForks=function(t){n("GET",o+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,o){return t&&n?n(t):void c.createRef({ref:"refs/heads/"+e,sha:o},n)})},this.createPullRequest=function(t,e){n("POST",o+"/pulls",t,e)},this.listHooks=function(t){n("GET",o+"/hooks",null,t)},this.getHook=function(t,e){n("GET",o+"/hooks/"+t,null,e)},this.createHook=function(t,e){n("POST",o+"/hooks",t,e)},this.editHook=function(t,e,s){n("PATCH",o+"/hooks/"+t,e,s)},this.deleteHook=function(t,e){n("DELETE",o+"/hooks/"+t,null,e)},this.read=function(t,e,s){n("GET",o+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,s,!0)},this.remove=function(t,e,s){c.getSha(t,e,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+e,{message:e+" is removed",sha:u,branch:t},s)})},this["delete"]=this.remove,this.move=function(t,n,o,s){e(t,function(e,i){c.getTree(i+"?recursive=true",function(e,u){u.forEach(function(t){t.path===n&&(t.path=o),"tree"===t.type&&delete t.sha}),c.postTree(u,function(e,o){c.commit(i,o,"Deleted "+n,function(e,n){c.updateHead(t,n,s)})})})})},this.write=function(t,e,i,u,r,a){"function"==typeof r&&(a=r,r={}),c.getSha(t,encodeURI(e),function(c,f){var l={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:t,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",o+"/contents/"+encodeURI(e),l,a)})},this.getCommits=function(t,e){t=t||{};var s=o+"/commits",i=[];if(t.sha&&i.push("sha="+encodeURIComponent(t.sha)),t.path&&i.push("path="+encodeURIComponent(t.path)),t.author&&i.push("author="+encodeURIComponent(t.author)),t.since){var u=t.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(t.until){var r=t.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}t.page&&i.push("page="+t.page),t.perpage&&i.push("per_page="+t.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,e)},this.isStarred=function(t,e,o){n("GET","/user/starred/"+t+"/"+e,null,o)},this.star=function(t,e,o){n("PUT","/user/starred/"+t+"/"+e,null,o)},this.unstar=function(t,e,o){n("DELETE","/user/starred/"+t+"/"+e,null,o)}},i.Gist=function(t){var e=t.id,o="/gists/"+e;this.read=function(t){n("GET",o,null,t)},this.create=function(t,e){n("POST","/gists",t,e)},this["delete"]=function(t){n("DELETE",o,null,t)},this.fork=function(t){n("POST",o+"/fork",null,t)},this.update=function(t,e){n("PATCH",o,t,e)},this.star=function(t){n("PUT",o+"/star",null,t)},this.unstar=function(t){n("DELETE",o+"/star",null,t)},this.isStarred=function(t){n("GET",o+"/star",null,t)}},i.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.list=function(t,n){var o=[];for(var s in t)t.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(t[s]));u(e+"?"+o.join("&"),n)},this.comment=function(t,e,o){n("POST",t.comments_url,{body:e},o)},this.edit=function(t,o,s){n("PATCH",e+"/"+t,o,s)},this.get=function(t,o){n("GET",e+"/"+t,null,o)}},i.Search=function(t){var e="/search/",o="?q="+t.query;this.repositories=function(t,s){n("GET",e+"repositories"+o,t,s)},this.code=function(t,s){n("GET",e+"code"+o,t,s)},this.issues=function(t,s){n("GET",e+"issues"+o,t,s)},this.users=function(t,s){n("GET",e+"users"+o,t,s)}},i.RateLimit=function(){this.getRateLimit=function(t){n("GET","/rate_limit",null,t)}},i};return i.getIssues=function(t,e){return new i.Issue({user:t,repo:e})},i.getRepo=function(t,e){return e?new i.Repository({user:t,name:e}):new i.Repository({fullname:t})},i.getUser=function(){return new i.User},i.getGist=function(t){return new i.Gist({id:t})},i.getSearch=function(t){return new i.Search({query:t})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"function"==typeof r&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)},this.createRelease=function(e,t){n("POST",o+"/releases",e,t)},this.editRelease=function(e,t,s){n("PATCH",o+"/releases/"+e,t,s)},this.getRelease=function(e,t){n("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",o+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,o){n("POST",t,e,o)},this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 5bcdd40a..920d463b 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAEM,cACA,UACA,OACA,SAEH,SAAUE,EAASC,EAAQC,EAAMC,GAC9B,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAGjC,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpBA,EAAUA,KAEV,IAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAI,GAAIS,KAASP,GACVA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAKhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAQK,cAAgB1B,EAAQ2B,MACvC,SAAW3B,EAAQ2B,MACnB,SAAW/B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTQ,KAAK,SAAUC,GACbtB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVxB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,SAGZvB,GACGF,KAAMA,EACNyB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB5C,EAAO4C,iBAAmB,SAA0B5B,EAAME,GAC9E,GAAI2B,OAEJ,QAAUC,KACPhC,EAAS,MAAOE,EAAM,KAAM,SAAU+B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO7B,GAAG6B,EAGPC,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAAQJ,EAAIK,kBAAkB,SAAW,IACzCC,MAAM,KACNC,OAAO,SAASC,GACd,MAAO,aAAalC,KAAKkC,KAE3BC,IAAI,SAASD,GACX,OAAQ,SAASE,KAAKF,QAAa,KAErCG,KAECP,IAGFrC,EAAOqC,EACPP,KAHA5B,EAAG6B,EAAKF,EAASI,QAo8B7B,OAx7BAjD,GAAO6D,KAAO,WACXvD,KAAKwD,MAAQ,SAAUnD,EAASO,GACN,kBAAZP,KACRO,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN0C,IAEJA,GAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQqD,MAAQ,QACzDD,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQsD,MAAQ,YACzDF,EAAOZ,KAAK,YAAczB,mBAAmBf,EAAQuD,UAAY,QAE7DvD,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGpD9C,GAAO,IAAM0C,EAAOK,KAAK,KAEzBxB,EAAiBvB,EAAKH,IAMzBZ,KAAK+D,KAAO,SAAUnD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKgE,MAAQ,SAAUpD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKiE,cAAgB,SAAU5D,EAASO,GACd,kBAAZP,KACRO,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN0C,IAUJ,IARIpD,EAAQ6D,KACTT,EAAOZ,KAAK,YAGXxC,EAAQ8D,eACTV,EAAOZ,KAAK,sBAGXxC,EAAQ+D,MAAO,CAChB,GAAIA,GAAQ/D,EAAQ+D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOZ,KAAK,SAAWzB,mBAAmBgD,IAG7C,GAAI/D,EAAQkE,OAAQ,CACjB,GAAIA,GAASlE,EAAQkE,MAEjBA,GAAOF,cAAgB9C,OACxBgD,EAASA,EAAOD,eAGnBb,EAAOZ,KAAK,UAAYzB,mBAAmBmD,IAG1ClE,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGhDJ,EAAOe,OAAS,IACjBzD,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKyE,KAAO,SAAU5C,EAAUjB,GAC7B,GAAI8D,GAAU7C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOkE,EAAS,KAAM9D,IAMlCZ,KAAK2E,UAAY,SAAU9C,EAAUxB,EAASO,GACpB,kBAAZP,KACRO,EAAKP,EACLA,KAGH,IAAIU,GAAM,UAAYc,EAAW,SAC7B4B,IAEJA,GAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQqD,MAAQ,QACzDD,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQsD,MAAQ,YACzDF,EAAOZ,KAAK,YAAczB,mBAAmBf,EAAQuD,UAAY,QAE7DvD,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGpD9C,GAAO,IAAM0C,EAAOK,KAAK,KAEzBxB,EAAiBvB,EAAKH,IAMzBZ,KAAK4E,YAAc,SAAU/C,EAAUjB,GAEpC0B,EAAiB,UAAYT,EAAW,iCAAkCjB,IAM7EZ,KAAK6E,UAAY,SAAUhD,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK8E,SAAW,SAAUC,EAASnE,GAEhC0B,EAAiB,SAAWyC,EAAU,6DAA8DnE,IAMvGZ,KAAKgF,OAAS,SAAUnD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKiF,SAAW,SAAUpD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKkF,WAAa,SAAU7E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAO/ClB,EAAOyF,WAAa,SAAU9E,GAsB3B,QAAS+E,GAAWC,EAAQzE,GACzB,MAAIyE,KAAWC,EAAYD,QAAUC,EAAYC,IACvC3E,EAAG,KAAM0E,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU5C,EAAK8C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB3E,EAAG6B,EAAK8C,KA7Bd,GAKIG,GALAC,EAAOtF,EAAQuF,KACfC,EAAOxF,EAAQwF,KACfC,EAAWzF,EAAQyF,SAEnBN,EAAOxF,IAIR0F,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRvF,MAAKyF,OAAS,SAAUM,EAAKnF,GAC1BJ,EAAS,MAAOkF,EAAW,aAAeK,EAAK,KAAM,SAAUtD,EAAKC,EAAKC,GACtE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAIsD,OAAOT,IAAK5C,MAY/B3C,KAAKiG,UAAY,SAAU5F,EAASO,GACjCJ,EAAS,OAAQkF,EAAW,YAAarF,EAASO,IASrDZ,KAAKkG,UAAY,SAAUH,EAAKnF,GAC7BJ,EAAS,SAAUkF,EAAW,aAAeK,EAAK1F,EAASO,IAM9DZ,KAAKmG,WAAa,SAAUvF,GACzBJ,EAAS,SAAUkF,EAAUrF,EAASO,IAMzCZ,KAAKoG,SAAW,SAAUxF,GACvBJ,EAAS,MAAOkF,EAAW,QAAS,KAAM9E,IAM7CZ,KAAKqG,UAAY,SAAUhG,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM2E,EAAW,SACjBjC,IAEmB,iBAAZpD,GAERoD,EAAOZ,KAAK,SAAWxC,IAEnBA,EAAQiG,OACT7C,EAAOZ,KAAK,SAAWzB,mBAAmBf,EAAQiG,QAGjDjG,EAAQkG,MACT9C,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQkG,OAGhDlG,EAAQmG,MACT/C,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQmG,OAGhDnG,EAAQsD,MACTF,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQsD,OAGhDtD,EAAQoG,WACThD,EAAOZ,KAAK,aAAezB,mBAAmBf,EAAQoG,YAGrDpG,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUxC,EAAQwD,MAG7BxD,EAAQuD,UACTH,EAAOZ,KAAK,YAAcxC,EAAQuD,WAIpCH,EAAOe,OAAS,IACjBzD,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK0G,QAAU,SAAUC,EAAQ/F,GAC9BJ,EAAS,MAAOkF,EAAW,UAAYiB,EAAQ,KAAM/F,IAMxDZ,KAAK4G,QAAU,SAAUJ,EAAMD,EAAM3F,GAClCJ,EAAS,MAAOkF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM3F,IAMvEZ,KAAK6G,aAAe,SAAUjG,GAC3BJ,EAAS,MAAOkF,EAAW,kBAAmB,KAAM,SAAUjD,EAAKqE,EAAOnE,GACvE,MAAIF,GACM7B,EAAG6B,IAGbqE,EAAQA,EAAM1D,IAAI,SAAUmD,GACzB,MAAOA,GAAKR,IAAI1E,QAAQ,iBAAkB,UAG7CT,GAAG,KAAMkG,EAAOnE,OAOtB3C,KAAK+G,QAAU,SAAUxB,EAAK3E,GAC3BJ,EAAS,MAAOkF,EAAW,cAAgBH,EAAK,KAAM3E,EAAI,QAM7DZ,KAAKgH,UAAY,SAAU3B,EAAQE,EAAK3E,GACrCJ,EAAS,MAAOkF,EAAW,gBAAkBH,EAAK,KAAM3E,IAM3DZ,KAAKiH,OAAS,SAAU5B,EAAQ3E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MAIbF,GAAS,MAAOkF,EAAW,aAAehF,GAAQ2E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU5C,EAAKyE,EAAavE,GAC/B,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAMsG,EAAY3B,IAAK5C,KATtB6C,EAAKC,OAAO,SAAWJ,EAAQzE,IAgB5CZ,KAAKmH,YAAc,SAAU5B,EAAK3E,GAC/BJ,EAAS,MAAOkF,EAAW,aAAeH,EAAK,KAAM3E,IAMxDZ,KAAKoH,QAAU,SAAUC,EAAMzG,GAC5BJ,EAAS,MAAOkF,EAAW,cAAgB2B,EAAM,KAAM,SAAU5E,EAAKC,EAAKC,GACxE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI2E,KAAM1E,MAOzB3C,KAAKsH,SAAW,SAAUC,EAAS3G,GAE7B2G,EADoB,gBAAZA,IAELA,QAASA,EACTC,SAAU,UAIVD,QAAStH,EAAUsH,GACnBC,SAAU,UAIhBhH,EAAS,OAAQkF,EAAW,aAAc6B,EAAS,SAAU9E,EAAKC,EAAKC,GACpE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI6C,IAAK5C,MAOxB3C,KAAKoF,WAAa,SAAUqC,EAAU/G,EAAMgH,EAAM9G,GAC/C,GAAID,IACDgH,UAAWF,EACXJ,OAEM3G,KAAMA,EACNkH,KAAM,SACNlE,KAAM,OACN6B,IAAKmC,IAKdlH,GAAS,OAAQkF,EAAW,aAAc/E,EAAM,SAAU8B,EAAKC,EAAKC,GACjE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI6C,IAAK5C,MAQxB3C,KAAK6H,SAAW,SAAUR,EAAMzG,GAC7BJ,EAAS,OAAQkF,EAAW,cACzB2B,KAAMA,GACN,SAAU5E,EAAKC,EAAKC,GACpB,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI6C,IAAK5C,MAQxB3C,KAAK8H,OAAS,SAAUC,EAAQV,EAAMW,EAASpH,GAC5C,GAAIiF,GAAO,GAAInG,GAAO6D,IAEtBsC,GAAKpB,KAAK,KAAM,SAAUhC,EAAKwF,GAC5B,GAAIxF,EACD,MAAO7B,GAAG6B,EAGb,IAAI9B,IACDqH,QAASA,EACTE,QACGtC,KAAMvF,EAAQwF,KACdsC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT7G,GAAS,OAAQkF,EAAW,eAAgB/E,EAAM,SAAU8B,EAAKC,EAAKC,GACnE,MAAIF,GACM7B,EAAG6B,IAGb6C,EAAYC,IAAM7C,EAAI6C,QAEtB3E,GAAG,KAAM8B,EAAI6C,IAAK5C,SAQ3B3C,KAAKqI,WAAa,SAAU9B,EAAMuB,EAAQlH,GACvCJ,EAAS,QAASkF,EAAW,mBAAqBa,GAC/ChB,IAAKuC,GACLlH,IAMNZ,KAAKyE,KAAO,SAAU7D,GACnBJ,EAAS,MAAOkF,EAAU,KAAM9E,IAMnCZ,KAAKsI,aAAe,SAAU1H,EAAI2H,GAC/BA,EAAQA,GAAS,GACjB,IAAI/C,GAAOxF,IAEXQ,GAAS,MAAOkF,EAAW,sBAAuB,KAAM,SAAUjD,EAAK9B,EAAMgC,GAC1E,MAAIF,GACM7B,EAAG6B,QAGM,MAAfE,EAAIP,OACLoG,WACG,WACGhD,EAAK8C,aAAa1H,EAAI2H,IAEzBA,GAGH3H,EAAG6B,EAAK9B,EAAMgC,OAQvB3C,KAAKyI,SAAW,SAAU1C,EAAKrF,EAAME,GAClCF,EAAOgI,UAAUhI,GACjBF,EAAS,MAAOkF,EAAW,aAAehF,EAAO,IAAMA,EAAO,KAC3DqF,IAAKA,GACLnF,IAMNZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQkF,EAAW,SAAU,KAAM9E,IAM/CZ,KAAK4I,UAAY,SAAUhI,GACxBJ,EAAS,MAAOkF,EAAW,SAAU,KAAM9E,IAM9CZ,KAAKqF,OAAS,SAAUwD,EAAWC,EAAWlI,GAClB,IAArBmI,UAAUvE,QAAwC,kBAAjBuE,WAAU,KAC5CnI,EAAKkI,EACLA,EAAYD,EACZA,EAAY,UAGf7I,KAAKyF,OAAO,SAAWoD,EAAW,SAAUpG,EAAKsD,GAC9C,MAAItD,IAAO7B,EACDA,EAAG6B,OAGb+C,GAAKS,WACFF,IAAK,cAAgB+C,EACrBvD,IAAKQ,GACLnF,MAOTZ,KAAKgJ,kBAAoB,SAAU3I,EAASO,GACzCJ,EAAS,OAAQkF,EAAW,SAAUrF,EAASO,IAMlDZ,KAAKiJ,UAAY,SAAUrI,GACxBJ,EAAS,MAAOkF,EAAW,SAAU,KAAM9E,IAM9CZ,KAAKkJ,QAAU,SAAUC,EAAIvI,GAC1BJ,EAAS,MAAOkF,EAAW,UAAYyD,EAAI,KAAMvI,IAMpDZ,KAAKoJ,WAAa,SAAU/I,EAASO,GAClCJ,EAAS,OAAQkF,EAAW,SAAUrF,EAASO,IAMlDZ,KAAKqJ,SAAW,SAAUF,EAAI9I,EAASO,GACpCJ,EAAS,QAASkF,EAAW,UAAYyD,EAAI9I,EAASO,IAMzDZ,KAAKsJ,WAAa,SAAUH,EAAIvI,GAC7BJ,EAAS,SAAUkF,EAAW,UAAYyD,EAAI,KAAMvI,IAMvDZ,KAAKuJ,KAAO,SAAUlE,EAAQ3E,EAAME,GACjCJ,EAAS,MAAOkF,EAAW,aAAegD,UAAUhI,IAAS2E,EAAS,QAAUA,EAAS,IACtF,KAAMzE,GAAI,IAMhBZ,KAAKwJ,OAAS,SAAUnE,EAAQ3E,EAAME,GACnC4E,EAAKyB,OAAO5B,EAAQ3E,EAAM,SAAU+B,EAAK8C,GACtC,MAAI9C,GACM7B,EAAG6B,OAGbjC,GAAS,SAAUkF,EAAW,aAAehF,GAC1CsH,QAAStH,EAAO,cAChB6E,IAAKA,EACLF,OAAQA,GACRzE,MAMTZ,KAAAA,UAAcA,KAAKwJ,OAKnBxJ,KAAKyJ,KAAO,SAAUpE,EAAQ3E,EAAMgJ,EAAS9I,GAC1CwE,EAAWC,EAAQ,SAAU5C,EAAKkH,GAC/BnE,EAAK4B,QAAQuC,EAAe,kBAAmB,SAAUlH,EAAK4E,GAE3DA,EAAKuC,QAAQ,SAAU7D,GAChBA,EAAIrF,OAASA,IACdqF,EAAIrF,KAAOgJ,GAGG,SAAb3D,EAAIrC,YACEqC,GAAIR,MAIjBC,EAAKqC,SAASR,EAAM,SAAU5E,EAAKoH,GAChCrE,EAAKsC,OAAO6B,EAAcE,EAAU,WAAanJ,EAAM,SAAU+B,EAAKqF,GACnEtC,EAAK6C,WAAWhD,EAAQyC,EAAQlH,YAU/CZ,KAAK8J,MAAQ,SAAUzE,EAAQ3E,EAAM6G,EAASS,EAAS3H,EAASO,GACtC,kBAAZP,KACRO,EAAKP,EACLA,MAGHmF,EAAKyB,OAAO5B,EAAQqD,UAAUhI,GAAO,SAAU+B,EAAK8C,GACjD,GAAIwE,IACD/B,QAASA,EACTT,QAAmC,mBAAnBlH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUsH,GAAWA,EACxFlC,OAAQA,EACR2E,UAAW3J,GAAWA,EAAQ2J,UAAY3J,EAAQ2J,UAAYC,OAC9D/B,OAAQ7H,GAAWA,EAAQ6H,OAAS7H,EAAQ6H,OAAS+B,OAIlDxH,IAAqB,MAAdA,EAAIJ,QACd0H,EAAaxE,IAAMA,GAGtB/E,EAAS,MAAOkF,EAAW,aAAegD,UAAUhI,GAAOqJ,EAAcnJ,MAY/EZ,KAAKkK,WAAa,SAAU7J,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM2E,EAAW,WACjBjC,IAcJ,IAZIpD,EAAQkF,KACT9B,EAAOZ,KAAK,OAASzB,mBAAmBf,EAAQkF,MAG/ClF,EAAQK,MACT+C,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQK,OAGhDL,EAAQ6H,QACTzE,EAAOZ,KAAK,UAAYzB,mBAAmBf,EAAQ6H,SAGlD7H,EAAQ+D,MAAO,CAChB,GAAIA,GAAQ/D,EAAQ+D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOZ,KAAK,SAAWzB,mBAAmBgD,IAG7C,GAAI/D,EAAQ8J,MAAO,CAChB,GAAIA,GAAQ9J,EAAQ8J,KAEhBA,GAAM9F,cAAgB9C,OACvB4I,EAAQA,EAAM7F,eAGjBb,EAAOZ,KAAK,SAAWzB,mBAAmB+I,IAGzC9J,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUxC,EAAQwD,MAG7BxD,EAAQ+J,SACT3G,EAAOZ,KAAK,YAAcxC,EAAQ+J,SAGjC3G,EAAOe,OAAS,IACjBzD,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKqK,UAAY,SAASC,EAAOC,EAAY3J,GAC1CJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKwK,KAAO,SAASF,EAAOC,EAAY3J,GACrCJ,EAAS,MAAO,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMtEZ,KAAKyK,OAAS,SAASH,EAAOC,EAAY3J,GACvCJ,EAAS,SAAU,iBAAmB8J,EAAQ,IAAMC,EAAY,KAAM3J,IAMzEZ,KAAK0K,cAAgB,SAASrK,EAASO,GACpCJ,EAAS,OAAQkF,EAAW,YAAarF,EAASO,IAMrDZ,KAAK2K,YAAc,SAASxB,EAAI9I,EAASO,GACtCJ,EAAS,QAASkF,EAAW,aAAeyD,EAAI9I,EAASO,IAM5DZ,KAAK4K,WAAa,SAASzB,EAAIvI,GAC5BJ,EAAS,MAAOkF,EAAW,aAAeyD,EAAI,KAAMvI,IAMvDZ,KAAK6K,cAAgB,SAAS1B,EAAIvI,GAC/BJ,EAAS,SAAUkF,EAAW,aAAeyD,EAAI,KAAMvI,KAO7DlB,EAAOoL,KAAO,SAAUzK,GACrB,GAAI8I,GAAK9I,EAAQ8I,GACb4B,EAAW,UAAY5B,CAK3BnJ,MAAKuJ,KAAO,SAAU3I,GACnBJ,EAAS,MAAOuK,EAAU,KAAMnK,IAenCZ,KAAKgL,OAAS,SAAU3K,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAUuK,EAAU,KAAMnK,IAMtCZ,KAAK2I,KAAO,SAAU/H,GACnBJ,EAAS,OAAQuK,EAAW,QAAS,KAAMnK,IAM9CZ,KAAKiL,OAAS,SAAU5K,EAASO,GAC9BJ,EAAS,QAASuK,EAAU1K,EAASO,IAMxCZ,KAAKwK,KAAO,SAAU5J,GACnBJ,EAAS,MAAOuK,EAAW,QAAS,KAAMnK,IAM7CZ,KAAKyK,OAAS,SAAU7J,GACrBJ,EAAS,SAAUuK,EAAW,QAAS,KAAMnK,IAMhDZ,KAAKqK,UAAY,SAAUzJ,GACxBJ,EAAS,MAAOuK,EAAW,QAAS,KAAMnK,KAOhDlB,EAAOwL,MAAQ,SAAU7K,GACtB,GAAIK,GAAO,UAAYL,EAAQwF,KAAO,IAAMxF,EAAQsF,KAAO,SAE3D3F,MAAKgL,OAAS,SAAS3K,EAASO,GAC7BJ,EAAS,OAAQE,EAAML,EAASO,IAGnCZ,KAAKmL,KAAO,SAAU9K,EAASO,GAC5B,GAAIwK,KAEJ,KAAI,GAAIC,KAAOhL,GACRA,EAAQc,eAAekK,IACxBD,EAAMvI,KAAKzB,mBAAmBiK,GAAO,IAAMjK,mBAAmBf,EAAQgL,IAI5E/I,GAAiB5B,EAAO,IAAM0K,EAAMtH,KAAK,KAAMlD,IAGlDZ,KAAKsL,QAAU,SAAUC,EAAOD,EAAS1K,GACtCJ,EAAS,OAAQ+K,EAAMC,cACpBC,KAAMH,GACN1K,IAGNZ,KAAK0L,KAAO,SAAUH,EAAOlL,EAASO,GACnCJ,EAAS,QAASE,EAAO,IAAM6K,EAAOlL,EAASO,IAGlDZ,KAAK2L,IAAM,SAAUJ,EAAO3K,GACzBJ,EAAS,MAAOE,EAAO,IAAM6K,EAAO,KAAM3K,KAOhDlB,EAAOkM,OAAS,SAAUvL,GACvB,GAAIK,GAAO,WACP0K,EAAQ,MAAQ/K,EAAQ+K,KAE5BpL,MAAK6L,aAAe,SAAUxL,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiB0K,EAAO/K,EAASO,IAG3DZ,KAAK8L,KAAO,SAAUzL,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAAS0K,EAAO/K,EAASO,IAGnDZ,KAAK+L,OAAS,SAAU1L,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAW0K,EAAO/K,EAASO,IAGrDZ,KAAKgM,MAAQ,SAAU3L,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAU0K,EAAO/K,EAASO,KAOvDlB,EAAOuM,UAAY,WAChBjM,KAAKkM,aAAe,SAAStL,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EA8CV,OAxCAA,GAAOyM,UAAY,SAAUtG,EAAMF,GAChC,MAAO,IAAIjG,GAAOwL,OACfrF,KAAMA,EACNF,KAAMA,KAIZjG,EAAO0M,QAAU,SAAUvG,EAAMF,GAC9B,MAAKA,GAKK,GAAIjG,GAAOyF,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIjG,GAAOyF,YACfW,SAAUD,KAUnBnG,EAAO2M,QAAU,WACd,MAAO,IAAI3M,GAAO6D,MAGrB7D,EAAO4M,QAAU,SAAUnD,GACxB,MAAO,IAAIzJ,GAAOoL,MACf3B,GAAIA,KAIVzJ,EAAO6M,UAAY,SAAUnB,GAC1B,MAAO,IAAI1L,GAAOkM,QACfR,MAAOA,KAIb1L,EAAOwM,aAAe,WACnB,MAAO,IAAIxM,GAAOuM,WAGdvM","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index cb6546a5..dd4da081 100644 --- a/src/github.js +++ b/src/github.js @@ -927,6 +927,34 @@ this.unstar = function(owner, repository, cb) { _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); }; + + // Create a new release + // -------- + + this.createRelease = function(options, cb) { + _request('POST', repoPath + '/releases', options, cb); + }; + + // Edit a release + // -------- + + this.editRelease = function(id, options, cb) { + _request('PATCH', repoPath + '/releases/' + id, options, cb); + }; + + // Get a single release + // -------- + + this.getRelease = function(id, cb) { + _request('GET', repoPath + '/releases/' + id, null, cb); + }; + + // Remove a release + // -------- + + this.deleteRelease = function(id, cb) { + _request('DELETE', repoPath + '/releases/' + id, null, cb); + }; }; // Gists API diff --git a/test/test.repo.js b/test/test.repo.js index bb405cdc..16a72982 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -2,7 +2,11 @@ var Github = require('../src/github.js'); var testUser = require('./user.json'); -var github, repo, user, imageB64, imageBlob; +var RELEASE_TAG = 'foo'; +var RELEASE_NAME = 'My awesome release'; +var RELEASE_BODY = 'Foo bar bazzy baz'; +var STATUS_URL = 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; +var github, repo, user, imageB64, imageBlob, sha, releaseId; if (typeof window === 'undefined') { // We're in NodeJS var fs = require('fs'); @@ -33,6 +37,7 @@ if (typeof window === 'undefined') { // We're in NodeJS // jscs:disable imageB64 = 'iVBORw0KGgoAAAANSUhEUgAAACsAAAAmCAAAAAB4qD3CAAABgElEQVQ4y9XUsUocURQGYN/pAyMWBhGtrEIMiFiooGuVIoYsSBAsRSQvYGFWC4uFhUBYsilXLERQsDA20YAguIbo5PQp3F3inVFTheSvZoavGO79z+mJP0/Pv2nPtlfLpfLq9tljNquO62S8mj1kmy/8nrHm/Xaz1930bt5n1+SzVmyrilItsod9ON0td1V59xR9hwV2HsMRsbfROLo4amzsRcQw5vO2CZPJEU5CM2cXYTCxg7CY2mwIVhK7AkNZYg9g4CqxVwNwkNg6zOTKMQP1xFZgKWeXoJLYdSjl7BysJ7YBIzk7Ap8TewLOE3oOTtIz6y/64bfQn55ZTIAPd2gNTOTurcbzp7z50v1y/Pq2Q7Wczca8vFjG6LvbMo92hiPL96xO+eYVPkVExMdONetFXZ+l+eP9cuV7RER8a9PZwrloTXv2tfv285ZOt4rnrTXlydxCu9sZmGrdN8eXC3ATERHXsHD5wC7ZL3HdsaX9R3bUzlb7YWvn/9ipf93+An8cHsx3W3WHAAAAAElFTkSuQmCC'; imageBlob = new Blob(); + // jscs:enable } } @@ -207,7 +212,7 @@ describe('Github.Repository', function() { xhr.should.be.instanceof(XMLHttpRequest); statuses.length.should.equal(6); statuses.every(function(status) { - return status.url === 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; + return status.url === STATUS_URL; }).should.equal(true); done(); @@ -534,6 +539,7 @@ describe('Creating new Github.Repository', function() { }, function(err, res, xhr) { should.not.exist(err); xhr.should.be.instanceof(XMLHttpRequest); + sha = res.commit.sha; done(); }); @@ -578,6 +584,54 @@ describe('Creating new Github.Repository', function() { }); }); }); + + it('should create a release', function(done) { + var options = { + tag_name: RELEASE_TAG, + target_commitish: sha + }; + + repo.createRelease(options, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + + releaseId = res.id; + done(); + }); + }); + + it('should edit a release', function(done) { + var options = { + name: RELEASE_NAME, + body: RELEASE_BODY + }; + + repo.editRelease(releaseId, options, function(err, res, xhr) { + should.not.exist(err); + res.name.should.equal(RELEASE_NAME); + res.body.should.equal(RELEASE_BODY); + xhr.should.be.instanceof(XMLHttpRequest); + + done(); + }); + }); + + it('should read a release', function(done) { + repo.getRelease(releaseId, function(err, res, xhr) { + should.not.exist(err); + res.name.should.equal(RELEASE_NAME); + xhr.should.be.instanceof(XMLHttpRequest); + done(); + }); + }); + + it('should delete a release', function(done) { + repo.deleteRelease(releaseId, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + done(); + }); + }); }); describe('deleting a Github.Repository', function() { From ade2bf6df5e820d424e43c5538b9f1552cef6b10 Mon Sep 17 00:00:00 2001 From: marcosomma Date: Wed, 24 Feb 2016 12:29:36 +0100 Subject: [PATCH 081/217] Added Organization API Closes gh-296 --- README.md | 26 ++++++++++++++++++++--- dist/github.bundle.min.js | 4 ++-- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 12 +++++++++++ test/test.org.js | 39 +++++++++++++++++++++++++++++++++++ test/user.json | 5 +++-- 8 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 test/test.org.js diff --git a/README.md b/README.md index 045a66bf..b957557c 100644 --- a/README.md +++ b/README.md @@ -22,12 +22,12 @@ bower install github-api [![Sauce Test Status](https://saucelabs.com/browser-matrix/githubjs.svg)](https://saucelabs.com/u/githubjs) -**Note**: Starting from version 0.10.8, Github.js supports **Internet Explorer 9**. However, the underlying +**Note**: Starting from version 0.10.8, Github.js supports **Internet Explorer 9**. However, the underlying methodology used under the hood to perform CORS requests (the `XDomainRequest` object), [has limitations](http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx). -In particular, requests must be targeted to the same scheme as the hosting page. This means that if a page is at +In particular, requests must be targeted to the same scheme as the hosting page. This means that if a page is at http://example.com, your target URL must also begin with HTTP. Similarly, if your page is at https://example.com, then -your target URL must also begin with HTTPS. For this reason, if your requests are sent to the GitHub API (the default), +your target URL must also begin with HTTPS. For this reason, if your requests are sent to the GitHub API (the default), which are served via HTTPS, your page must use HTTPS too. ## GitHub Tools @@ -264,6 +264,26 @@ Unstar a repository. repo.unstar(owner, repository, function(err) {}); ``` +## Organization API + + +```js +var organization = github.getOrg(); +``` + +Create a new organization repository for the authenticated user + +```js +var repo = { + orgname: 'github-api-tests', + name: 'test' +}; + +organization.createRepo(repo, function(err, res) {}); +``` + +The repository description, homepage, private/public can also be set. [For a full list of options see the documentation](https://developer.github.com/v3/repos/#create). + ## User API diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 56b02112..3324f17c 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){z(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else j(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function R(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function _(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):j(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?_(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?R(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),I(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(I,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(I,e)}function I(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)j(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&H(),this instanceof F?D(this,e):B())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var X;X=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,V,J,K=X,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new O,ce=new O,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},R=T.hasOwnProperty;for(var _ in E)R.call(E,_)&&(d[_]=E[_])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)},this.createRelease=function(e,t){n("POST",r+"/releases",e,t)},this.editRelease=function(e,t,o){n("PATCH",r+"/releases/"+e,t,o)},this.getRelease=function(e,t){n("GET",r+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",r+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,r){n("POST",t,e,r)},this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)},this.edit=function(e,r,o){n("PATCH",t+"/"+e,r,o)},this.get=function(e,r){n("GET",t+"/"+e,null,r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){ -return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;u.global!==u&&u.window!==u||(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){X(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return X=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else O(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function R(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function _(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):O(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?_(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?R(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),j(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(j,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)O(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&H(),this instanceof F?D(this,e):B())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(e.Promise=de)}var z;z=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var X,V,J,K=z,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new I,ce=new I,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;g.global!==g&&g.window!==g||(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},R=T.hasOwnProperty;for(var _ in E)R.call(E,_)&&(d[_]=E[_])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)},this.createRelease=function(e,t){n("POST",r+"/releases",e,t)},this.editRelease=function(e,t,o){n("PATCH",r+"/releases/"+e,t,o)},this.getRelease=function(e,t){n("GET",r+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",r+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,r){n("POST",t,e,r)},this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)},this.edit=function(e,r,o){n("PATCH",t+"/"+e,r,o)},this.get=function(e,r){n("GET",t+"/"+e,null,r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e); +}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 7580a0bd..9914cbb4 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index e178e5da..bb12d87c 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"function"==typeof r&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)},this.createRelease=function(e,t){n("POST",o+"/releases",e,t)},this.editRelease=function(e,t,s){n("PATCH",o+"/releases/"+e,t,s)},this.getRelease=function(e,t){n("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",o+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,o){n("POST",t,e,o)},this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"function"==typeof r&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)},this.createRelease=function(e,t){n("POST",o+"/releases",e,t)},this.editRelease=function(e,t,s){n("PATCH",o+"/releases/"+e,t,s)},this.getRelease=function(e,t){n("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",o+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,o){n("POST",t,e,o)},this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index 920d463b..feb92daf 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index dd4da081..d098bd35 100644 --- a/src/github.js +++ b/src/github.js @@ -317,6 +317,14 @@ }; }; + Github.Organization = function () { + // Create an Organization repo + // ------- + this.createRepo = function (options, cb) { + _request('POST', '/orgs/' + options.orgname + '/repos', options, cb); + }; + }; + // Repository API // ======= @@ -1130,6 +1138,10 @@ return new Github.User(); }; + Github.getOrg = function () { + return new Github.Organization(); + }; + Github.getGist = function (id) { return new Github.Gist({ id: id diff --git a/test/test.org.js b/test/test.org.js new file mode 100644 index 00000000..1c7b1a3a --- /dev/null +++ b/test/test.org.js @@ -0,0 +1,39 @@ +'use strict'; + +var Github = require('../src/github.js'); +var testUser = require('./user.json'); +var github, organization; + +describe('Github.Organization', function() { + before(function() { + github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' + }); + organization = github.getOrg(); + }); + + it('should create an organisation repo', function(done) { + var repoTest = Math.floor(Math.random() * 100000); + var options = { + orgname: testUser.ORGANIZATION, + name: repoTest, + description: 'test create organization repo', + homepage: 'https://github.com/', + private: false, + has_issues: true, + has_wiki: true, + has_downloads: true + }; + + organization.createRepo(options, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.name.should.equal(repoTest.toString()); + res.full_name.should.equal(testUser.ORGANIZATION + '/' + repoTest.toString()); + + done(); + }); + }); +}); diff --git a/test/user.json b/test/user.json index 5fdc8e86..33479bef 100644 --- a/test/user.json +++ b/test/user.json @@ -1,5 +1,6 @@ { "USERNAME": "mikedeboertest", "PASSWORD": "test1324", - "REPO": "github" -} \ No newline at end of file + "REPO": "github", + "ORGANIZATION": "github-api-tests" +} From 849e0588978519c80e01ee9704be515956a06d7c Mon Sep 17 00:00:00 2001 From: timwis Date: Fri, 18 Mar 2016 14:12:17 -0400 Subject: [PATCH 082/217] Added repo.collaborators and repo.isCollaborator Closes gh-304 --- README.md | 12 ++++++++++++ dist/github.bundle.min.js | 4 ++-- dist/github.bundle.min.js.map | 2 +- dist/github.min.js | 2 +- dist/github.min.js.map | 2 +- src/github.js | 14 ++++++++++++++ test/test.repo.js | 24 ++++++++++++++++++++++++ 7 files changed, 55 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b957557c..12101c09 100644 --- a/README.md +++ b/README.md @@ -246,6 +246,18 @@ Get contributors list with additions, deletions, and commit counts. repo.contributors(function(err, data) {}); ``` +Get collaborators list. + +```js +repo.collaborators(function(err, data) {}); +``` + +Check if user is a collaborator on the repository. + +```js +repo.isCollaborator(username, function(err) {}); +``` + Check if a repository is starred. ```js diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js index 3324f17c..bfa94879 100644 --- a/dist/github.bundle.min.js +++ b/dist/github.bundle.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;u.global!==u&&u.window!==u||(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){X(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return X=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else O(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function R(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function _(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):O(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?_(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?R(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),j(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(j,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)O(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&H(),this instanceof F?D(this,e):B())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(e.Promise=de)}var z;z=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var X,V,J,K=z,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new I,ce=new I,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;g.global!==g&&g.window!==g||(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},R=T.hasOwnProperty;for(var _ in E)R.call(E,_)&&(d[_]=E[_])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)},this.createRelease=function(e,t){n("POST",r+"/releases",e,t)},this.editRelease=function(e,t,o){n("PATCH",r+"/releases/"+e,t,o)},this.getRelease=function(e,t){n("GET",r+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",r+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,r){n("POST",t,e,r)},this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)},this.edit=function(e,r,o){n("PATCH",t+"/"+e,r,o)},this.get=function(e,r){n("GET",t+"/"+e,null,r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o)},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e); -}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){X(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return X=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else O(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function R(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function _(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):O(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?_(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?R(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),j(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(j,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)O(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&H(),this instanceof F?D(this,e):B())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var z;z=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var X,V,J,K=z,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new I,ce=new I,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},R=T.hasOwnProperty;for(var _ in E)R.call(E,_)&&(d[_]=E[_])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.collaborators=function(e){n("GET",r+"/collaborators",null,e)},this.isCollaborator=function(e,t){n("GET",r+"/collaborators/"+e,null,t)},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)},this.createRelease=function(e,t){n("POST",r+"/releases",e,t)},this.editRelease=function(e,t,o){n("PATCH",r+"/releases/"+e,t,o)},this.getRelease=function(e,t){n("GET",r+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",r+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,r){n("POST",t,e,r)},this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)},this.edit=function(e,r,o){n("PATCH",t+"/"+e,r,o)},this.get=function(e,r){n("GET",t+"/"+e,null,r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o); +},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); //# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map index 9914cbb4..8064cd34 100644 --- a/dist/github.bundle.min.js.map +++ b/dist/github.bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","collaborators","isCollaborator","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Show repository collaborators\r\n // -------\r\n\r\n this.collaborators = function (cb) {\r\n _request('GET', repoPath + '/collaborators', null, cb);\r\n };\r\n\r\n // Check whether user is a collaborator on the repository\r\n // -------\r\n\r\n this.isCollaborator = function (username, cb) {\r\n _request('GET', repoPath + '/collaborators/' + username, null, cb);\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Show repository collaborators\r\n // -------\r\n\r\n this.collaborators = function (cb) {\r\n _request('GET', repoPath + '/collaborators', null, cb);\r\n };\r\n\r\n // Check whether user is a collaborator on the repository\r\n // -------\r\n\r\n this.isCollaborator = function (username, cb) {\r\n _request('GET', repoPath + '/collaborators/' + username, null, cb);\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js index bb12d87c..300e78a4 100644 --- a/dist/github.min.js +++ b/dist/github.min.js @@ -1,2 +1,2 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,u,r,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",u&&"object"==typeof u&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in u)u.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(u[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:u?u:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){r(null,e.data||!0,e.request)},function(e){304===e.status?r(null,e.data||!0,e.request):r({path:i,request:e.request,error:e.status})})},u=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,u){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var r=(u.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();r?(e=r,s()):t(n,o,u)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),u(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),s.push("before="+encodeURIComponent(u))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),u(o,n)},this.userStarred=function(e,t){u("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){u("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,u=e.name,r=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+r+"/"+u;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,u,r){var a=new i.User;a.show(null,function(i,a){if(i)return r(i);var c={message:u,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,u){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,u){u.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(u,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,u,r,a){"function"==typeof r&&(a=r,r={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:u,content:"undefined"==typeof r.encode||r.encode?s(i):i,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)},this.createRelease=function(e,t){n("POST",o+"/releases",e,t)},this.editRelease=function(e,t,s){n("PATCH",o+"/releases/"+e,t,s)},this.getRelease=function(e,t){n("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",o+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,o){n("POST",t,e,o)},this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));u(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); +"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,r,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",r&&"object"==typeof r&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in r)r.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(r[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:r?r:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},r=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,r){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var u=(r.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,s()):t(n,o,r)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),r(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var r=e.before;r.constructor===Date&&(r=r.toISOString()),s.push("before="+encodeURIComponent(r))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),r(o,n)},this.userStarred=function(e,t){r("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){r("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,r=e.name,u=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+u+"/"+r;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var r={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",r,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,r,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:r,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?u(e):(l.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.collaborators=function(e){n("GET",o+"/collaborators",null,e)},this.isCollaborator=function(e,t){n("GET",o+"/collaborators/"+e,null,t)},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,r){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:r,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,r){r.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(r,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,r,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:r,content:"undefined"==typeof u.encode||u.encode?s(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var r=e.since;r.constructor===Date&&(r=r.toISOString()),i.push("since="+encodeURIComponent(r))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)},this.createRelease=function(e,t){n("POST",o+"/releases",e,t)},this.editRelease=function(e,t,s){n("PATCH",o+"/releases/"+e,t,s)},this.getRelease=function(e,t){n("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",o+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,o){n("POST",t,e,o)},this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));r(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); //# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map index feb92daf..2fa295f5 100644 --- a/dist/github.min.js.map +++ b/dist/github.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","collaborators","isCollaborator","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Show repository collaborators\r\n // -------\r\n\r\n this.collaborators = function (cb) {\r\n _request('GET', repoPath + '/collaborators', null, cb);\r\n };\r\n\r\n // Check whether user is a collaborator on the repository\r\n // -------\r\n\r\n this.isCollaborator = function (username, cb) {\r\n _request('GET', repoPath + '/collaborators/' + username, null, cb);\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/src/github.js b/src/github.js index d098bd35..6fdd370e 100644 --- a/src/github.js +++ b/src/github.js @@ -685,6 +685,20 @@ }); }; + // Show repository collaborators + // ------- + + this.collaborators = function (cb) { + _request('GET', repoPath + '/collaborators', null, cb); + }; + + // Check whether user is a collaborator on the repository + // ------- + + this.isCollaborator = function (username, cb) { + _request('GET', repoPath + '/collaborators/' + username, null, cb); + }; + // Get contents // -------- diff --git a/test/test.repo.js b/test/test.repo.js index 16a72982..dc99f85d 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -276,6 +276,30 @@ describe('Creating new Github.Repository', function() { }); }); + it('should show repo collaborators', function(done) { + repo.collaborators(function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + res.should.be.instanceof(Array); + res.should.have.length(1); + res[0].login.should.equal(testUser.USERNAME); + should.exist(res[0].id); + should.exist(res[0].permissions); + + done(); + }); + }); + + it('should test whether user is collaborator', function(done) { + repo.isCollaborator(testUser.USERNAME, function(err, res, xhr) { + should.not.exist(err); + xhr.should.be.instanceof(XMLHttpRequest); + xhr.status.should.equal(204); + + done(); + }); + }); + it('should write to repo', function(done) { repo.write('master', 'TEST.md', 'THIS IS A TEST', 'Creating test', function(err) { should.not.exist(err); From 826d982ee6c90510ab456df765799f1ef194c0c6 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Sun, 21 Feb 2016 11:45:11 -0600 Subject: [PATCH 083/217] Use Babel's UMD wrapper * Will work the same as the current UMD wrapper after Babel 6.6.0 --- .babelrc | 10 + .gitignore | 5 +- dist/github.bundle.min.js | 3 - dist/github.bundle.min.js.map | 1 - dist/github.min.js | 2 - dist/github.min.js.map | 1 - gulpfile.js | 26 +- karma.conf.js | 75 -- package.json | 4 + src/github.js | 1742 ++++++++++++++++----------------- 10 files changed, 903 insertions(+), 966 deletions(-) create mode 100644 .babelrc delete mode 100644 dist/github.bundle.min.js delete mode 100644 dist/github.bundle.min.js.map delete mode 100644 dist/github.min.js delete mode 100644 dist/github.min.js.map delete mode 100644 karma.conf.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..cb4b32ad --- /dev/null +++ b/.babelrc @@ -0,0 +1,10 @@ +{ + "presets": ["es2015"], + "plugins": [ + ["transform-es2015-modules-umd", { + "globals": { + "es6-promise": "Promise" + } + }] + ] +} diff --git a/.gitignore b/.gitignore index 8bcfe81d..1aacec2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ .DS_Store .idea node_modules/ -npm-debug.log coverage/ +dist/*.js +dist/*.map + +npm-debug.log sauce.json diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js deleted file mode 100644 index bfa94879..00000000 --- a/dist/github.bundle.min.js +++ /dev/null @@ -1,3 +0,0 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Github=e()}}(function(){var e;return function t(e,n,r){function o(s,u){if(!n[s]){if(!e[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};e[s][0].call(f.exports,function(t){var n=e[s][1][t];return o(n?n:t)},f,f.exports,t,e,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in p)&&o.responseText?t:n)(o),p=null}},p.onerror=function(){n(new Error("Network Error")),p=null},r.isStandardBrowserEnv()){var m=e("./../helpers/cookies"),g=c.withCredentials||u(c.url)?m.read(c.xsrfCookieName):void 0;g&&(l[c.xsrfHeaderName]=g)}if("setRequestHeader"in p&&r.forEach(l,function(e,t){"undefined"==typeof f&&"content-type"===t.toLowerCase()?delete l[t]:p.setRequestHeader(t,e)}),c.withCredentials&&(p.withCredentials=!0),c.responseType)try{p.responseType=c.responseType}catch(v){if("json"!==p.responseType)throw v}r.isArrayBuffer(f)&&(f=new DataView(f)),p.send(f)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(e,t,n){"use strict";function r(e){this.defaults=i.merge({},e),this.interceptors={request:new u,response:new u}}var o=e("./defaults"),i=e("./utils"),s=e("./core/dispatchRequest"),u=e("./core/InterceptorManager"),a=e("./helpers/isAbsoluteURL"),c=e("./helpers/combineURLs"),f=e("./helpers/bind"),l=e("./helpers/transformData");r.prototype.request=function(e){"string"==typeof e&&(e=i.merge({url:arguments[0]},arguments[1])),e=i.merge(o,this.defaults,{method:"get"},e),e.baseURL&&!a(e.url)&&(e.url=c(e.baseURL,e.url)),e.withCredentials=e.withCredentials||this.defaults.withCredentials,e.data=l(e.data,e.headers,e.transformRequest),e.headers=i.merge(e.headers.common||{},e.headers[e.method]||{},e.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(t){delete e.headers[t]});var t=[s,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n};var p=new r(o),h=t.exports=f(r.prototype.request,p);h.create=function(e){return new r(e)},h.defaults=p.defaults,h.all=function(e){return Promise.all(e)},h.spread=e("./helpers/spread"),h.interceptors=p.interceptors,i.forEach(["delete","get","head"],function(e){r.prototype[e]=function(t,n){return this.request(i.merge(n||{},{method:e,url:t}))},h[e]=f(r.prototype[e],p)}),i.forEach(["post","put","patch"],function(e){r.prototype[e]=function(t,n,r){return this.request(i.merge(r||{},{method:e,url:t,data:n}))},h[e]=f(r.prototype[e],p)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(e,t,n){"use strict";function r(){this.handlers=[]}var o=e("./../utils");r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){o.forEach(this.handlers,function(t){null!==t&&e(t)})},t.exports=r},{"./../utils":17}],5:[function(e,t,n){(function(n){"use strict";t.exports=function(t){return new Promise(function(r,o){try{var i;"function"==typeof t.adapter?i=t.adapter:"undefined"!=typeof XMLHttpRequest?i=e("../adapters/xhr"):"undefined"!=typeof n&&(i=e("../adapters/http")),"function"==typeof i&&i(r,o,t)}catch(s){o(s)}})}}).call(this,e("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:20}],6:[function(e,t,n){"use strict";var r=e("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};t.exports={transformRequest:[function(e,t){return r.isFormData(e)?e:r.isArrayBuffer(e)?e:r.isArrayBufferView(e)?e.buffer:!r.isObject(e)||r.isFile(e)||r.isBlob(e)?e:(r.isUndefined(t)||(r.forEach(t,function(e,n){"content-type"===n.toLowerCase()&&(t["Content-Type"]=e)}),r.isUndefined(t["Content-Type"])&&(t["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(e))}],transformResponse:[function(e){if("string"==typeof e){e=e.replace(o,"");try{e=JSON.parse(e)}catch(t){}}return e}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(e,t,n){"use strict";t.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");t=t<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=o},{}],9:[function(e,t,n){"use strict";function r(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=e("./../utils");t.exports=function(e,t,n){if(!t)return e;var i;if(n)i=n(t);else{var s=[];o.forEach(t,function(e,t){null!==e&&"undefined"!=typeof e&&(o.isArray(e)&&(t+="[]"),o.isArray(e)||(e=[e]),o.forEach(e,function(e){o.isDate(e)?e=e.toISOString():o.isObject(e)&&(e=JSON.stringify(e)),s.push(r(t)+"="+r(e))}))}),i=s.join("&")}return i&&(e+=(-1===e.indexOf("?")?"?":"&")+i),e}},{"./../utils":17}],10:[function(e,t,n){"use strict";t.exports=function(e,t){return e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"")}},{}],11:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,i,s){var u=[];u.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(e,t,n){"use strict";t.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},{}],13:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e){var t,n,o,i={};return e?(r.forEach(e.split("\n"),function(e){o=e.indexOf(":"),t=r.trim(e.substr(0,o)).toLowerCase(),n=r.trim(e.substr(o+1)),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(e,t,n){"use strict";t.exports=function(e){return function(t){return e.apply(null,t)}}},{}],16:[function(e,t,n){"use strict";var r=e("./../utils");t.exports=function(e,t,n){return r.forEach(n,function(n){e=n(e,t)}),e}},{"./../utils":17}],17:[function(e,t,n){"use strict";function r(e){return"[object Array]"===y.call(e)}function o(e){return"[object ArrayBuffer]"===y.call(e)}function i(e){return"[object FormData]"===y.call(e)}function s(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function u(e){return"string"==typeof e}function a(e){return"number"==typeof e}function c(e){return"undefined"==typeof e}function f(e){return null!==e&&"object"==typeof e}function l(e){return"[object Date]"===y.call(e)}function p(e){return"[object File]"===y.call(e)}function h(e){return"[object Blob]"===y.call(e)}function d(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function m(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function g(e,t){if(null!==e&&"undefined"!=typeof e)if("object"==typeof e||r(e)||(e=[e]),r(e))for(var n=0,o=e.length;o>n;n++)t.call(null,e[n],n,e);else for(var i in e)e.hasOwnProperty(i)&&t.call(null,e[i],i,e)}function v(){function e(e,n){"object"==typeof t[n]&&"object"==typeof e?t[n]=v(t[n],e):t[n]=e}for(var t={},n=0,r=arguments.length;r>n;n++)g(arguments[n],e);return t}var y=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:f,isUndefined:c,isDate:l,isFile:p,isBlob:h,isStandardBrowserEnv:m,forEach:g,merge:v,trim:d}},{}],18:[function(t,n,r){(function(t){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof t&&t;(u.global===u||u.window===u)&&(o=u);var a=function(e){this.message=e};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var c=function(e){throw new a(e)},f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,p=function(e){e=String(e).replace(l,"");var t=e.length;t%4==0&&(e=e.replace(/==?$/,""),t=e.length),(t%4==1||/[^+a-zA-Z0-9\/]/.test(e))&&c("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},h=function(e){e=String(e),/[^\0-\xFF]/.test(e)&&c("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,r,o,i=e.length%3,s="",u=-1,a=e.length-i;++u>18&63)+f.charAt(o>>12&63)+f.charAt(o>>6&63)+f.charAt(63&o);return 2==i?(t=e.charCodeAt(u)<<8,n=e.charCodeAt(++u),o=t+n,s+=f.charAt(o>>10)+f.charAt(o>>4&63)+f.charAt(o<<2&63)+"="):1==i&&(o=e.charCodeAt(u),s+=f.charAt(o>>2)+f.charAt(o<<4&63)+"=="),s},d={encode:h,decode:p,version:"0.1.0"};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var m in d)d.hasOwnProperty(m)&&(i[m]=d[m]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function s(e){return"function"==typeof e}function u(e){V=e}function a(e){$=e}function c(){return function(){r.nextTick(d)}}function f(){return function(){X(d)}}function l(){var e=0,t=new Q(d),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;Y>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}Y=0}function m(){try{var e=t,n=e("vertx");return X=n.runOnLoop||n.runOnContext,f()}catch(r){return h()}}function g(e,t){var n=this,r=n._state;if(r===se&&!e||r===ue&&!t)return this;var o=new this.constructor(y),i=n._result;if(r){var s=arguments[r-1];$(function(){P(r,o,s,i)})}else O(n,o,e,t);return o}function v(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(y);return C(n,e),n}function y(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(e){try{return e.then}catch(t){return ae.error=t,ae}}function T(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function R(e,t,n){$(function(e){var r=!1,o=T(n,t,function(n){r||(r=!0,t!==n?C(e,n):S(e,n))},function(t){r||(r=!0,U(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,U(e,o))},e)}function _(e,t){t._state===se?S(e,t._result):t._state===ue?U(e,t._result):O(t,void 0,function(t){C(e,t)},function(t){U(e,t)})}function A(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?_(e,t):n===ae?U(e,ae.error):void 0===n?S(e,t):s(n)?R(e,t,n):S(e,t)}function C(e,t){e===t?U(e,w()):i(t)?A(e,t,E(t)):S(e,t)}function x(e){e._onerror&&e._onerror(e._result),j(e)}function S(e,t){e._state===ie&&(e._result=t,e._state=se,0!==e._subscribers.length&&$(j,e))}function U(e,t){e._state===ie&&(e._state=ue,e._result=t,$(x,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+se]=n,o[i+ue]=r,0===i&&e._state&&$(j,e)}function j(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)O(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this,n=new t(y);return U(n,e),n}function H(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function B(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],y!==e&&("function"!=typeof e&&H(),this instanceof F?D(this,e):B())}function N(e,t){this._instanceConstructor=e,this.promise=new e(y),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?S(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&S(this.promise,this._result))):U(this.promise,this._validationError())}function M(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=de)}var z;z=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var X,V,J,K=z,Y=0,$=function(e,t){ne[Y]=e,ne[Y+1]=t,Y+=2,2===Y&&(V?V(d):J())},W="undefined"!=typeof window?window:void 0,Z=W||{},Q=Z.MutationObserver||Z.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);J=ee?c():Q?l():te?p():void 0===W&&"function"==typeof t?m():h();var re=g,oe=v,ie=void 0,se=1,ue=2,ae=new I,ce=new I,fe=L,le=k,pe=q,he=0,de=F;F.all=fe,F.race=le,F.resolve=oe,F.reject=pe,F._setScheduler=u,F._setAsap=a,F._asap=$,F.prototype={constructor:F,then:re,"catch":function(e){return this.then(null,e)}};var me=N;N.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},N.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},N.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=E(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===de){var i=new n(y);A(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},N.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===ue?U(r,n):this._result[t]=n),0===this._remaining&&S(r,this._result)},N.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(se,t,e)},function(e){n._settledAt(ue,t,e)})};var ge=M,ve={Promise:de,polyfill:ge};"function"==typeof e&&e.amd?e(function(){return ve}):"undefined"!=typeof n&&n.exports?n.exports=ve:"undefined"!=typeof this&&(this.ES6Promise=ve),ge()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:20}],20:[function(e,t,n){function r(){f=!1,u.length?c=u.concat(c):l=-1,c.length&&o()}function o(){if(!f){var e=setTimeout(r);f=!0;for(var t=c.length;t;){for(u=c,c=[];++l1)for(var n=1;no;)t=e.charCodeAt(o++),t>=55296&&56319>=t&&i>o?(n=e.charCodeAt(o++),56320==(64512&n)?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--)):r.push(t);return r}function s(e){for(var t,n=e.length,r=-1,o="";++r65535&&(t-=65536,o+=b(t>>>10&1023|55296),t=56320|1023&t),o+=b(t);return o}function u(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function a(e,t){return b(e>>t&63|128)}function c(e){if(0==(4294967168&e))return b(e);var t="";return 0==(4294965248&e)?t=b(e>>6&31|192):0==(4294901760&e)?(u(e),t=b(e>>12&15|224),t+=a(e,6)):0==(4292870144&e)&&(t=b(e>>18&7|240),t+=a(e,12),t+=a(e,6)),t+=b(63&e|128)}function f(e){for(var t,n=i(e),r=n.length,o=-1,s="";++o=y)throw Error("Invalid byte index");var e=255&v[w];if(w++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function p(){var e,t,n,r,o;if(w>y)throw Error("Invalid byte index");if(w==y)return!1;if(e=255&v[w],w++,0==(128&e))return e;if(192==(224&e)){var t=l();if(o=(31&e)<<6|t,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=l(),n=l(),o=(15&e)<<12|t<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=l(),n=l(),r=l(),o=(15&e)<<18|t<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(e){v=i(e),y=v.length,w=0;for(var t,n=[];(t=p())!==!1;)n.push(t);return s(n)}var d="object"==typeof r&&r,m="object"==typeof n&&n&&n.exports==d&&n,g="object"==typeof t&&t;(g.global===g||g.window===g)&&(o=g);var v,y,w,b=String.fromCharCode,E={version:"2.0.0",encode:f,decode:h};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return E});else if(d&&!d.nodeType)if(m)m.exports=E;else{var T={},R=T.hasOwnProperty;for(var _ in E)R.call(E,_)&&(d[_]=E[_])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],22:[function(t,n,r){"use strict";!function(r,o){"function"==typeof e&&e.amd?e(["es6-promise","base-64","utf8","axios"],function(e,t,n,i){return r.Github=o(e,t,n,i)}):"object"==typeof n&&n.exports?n.exports=o(t("es6-promise"),t("base-64"),t("utf8"),t("axios")):r.Github=o(r.Promise,r.base64,r.utf8,r.axios)}(this,function(e,t,n,r){function o(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,s,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",s&&"object"==typeof s&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var r in s)s.hasOwnProperty(r)&&(e+="&"+encodeURIComponent(r)+"="+encodeURIComponent(s[r]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var f={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:s?s:{},url:c()};return(e.token||e.username&&e.password)&&(f.headers.Authorization=e.token?"token "+e.token:"Basic "+o(e.username+":"+e.password)),r(f).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},s=i._requestAllPages=function(e,t){var r=[];!function o(){n("GET",e,null,function(n,i,s){if(n)return t(n);i instanceof Array||(i=[i]),r.push.apply(r,i);var u=(s.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,o()):t(n,r,s)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(e.type||"all")),r.push("sort="+encodeURIComponent(e.sort||"updated")),r.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&r.push("page="+encodeURIComponent(e.page)),n+="?"+r.join("&"),s(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var r="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var s=e.before;s.constructor===Date&&(s=s.toISOString()),o.push("before="+encodeURIComponent(s))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(r+="?"+o.join("&")),n("GET",r,null,t)},this.show=function(e,t){var r=e?"/users/"+e:"/user";n("GET",r,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var r="/users/"+e+"/repos",o=[];o.push("type="+encodeURIComponent(t.type||"all")),o.push("sort="+encodeURIComponent(t.sort||"updated")),o.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&o.push("page="+encodeURIComponent(t.page)),r+="?"+o.join("&"),s(r,n)},this.userStarred=function(e,t){s("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){s("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===f.branch&&f.sha?t(null,f.sha):void c.getRef("heads/"+e,function(n,r){f.branch=e,f.sha=r,t(n,r)})}var r,s=e.name,u=e.user,a=e.fullname,c=this;r=a?"/repos/"+a:"/repos/"+u+"/"+s;var f={branch:null,sha:null};this.getRef=function(e,t){n("GET",r+"/git/refs/"+e,null,function(e,n,r){return e?t(e):void t(null,n.object.sha,r)})},this.createRef=function(e,t){n("POST",r+"/git/refs",e,t)},this.deleteRef=function(t,o){n("DELETE",r+"/git/refs/"+t,e,o)},this.deleteRepo=function(t){n("DELETE",r,e,t)},this.listTags=function(e){n("GET",r+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var o=r+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.getPull=function(e,t){n("GET",r+"/pulls/"+e,null,t)},this.compare=function(e,t,o){n("GET",r+"/compare/"+e+"..."+t,null,o)},this.listBranches=function(e){n("GET",r+"/git/refs/heads",null,function(t,n,r){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,r))})},this.getBlob=function(e,t){n("GET",r+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,o){n("GET",r+"/git/commits/"+t,null,o)},this.getSha=function(e,t,o){return t&&""!==t?void n("GET",r+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?o(e):void o(null,t.sha,n)}):c.getRef("heads/"+e,o)},this.getStatuses=function(e,t){n("GET",r+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",r+"/git/trees/"+e,null,function(e,n,r){return e?t(e):void t(null,n.tree,r)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:o(e),encoding:"base64"},n("POST",r+"/git/blobs",e,function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.updateTree=function(e,t,o,i){var s={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:o}]};n("POST",r+"/git/trees",s,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",r+"/git/trees",{tree:e},function(e,n,r){return e?t(e):void t(null,n.sha,r)})},this.commit=function(t,o,s,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:s,author:{name:e.user,email:a.email},parents:[t],tree:o};n("POST",r+"/git/commits",c,function(e,t,n){return e?u(e):(f.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,o){n("PATCH",r+"/git/refs/heads/"+e,{sha:t},o)},this.show=function(e){n("GET",r,null,e)},this.contributors=function(e,t){t=t||1e3;var o=this;n("GET",r+"/stats/contributors",null,function(n,r,i){return n?e(n):void(202===i.status?setTimeout(function(){o.contributors(e,t)},t):e(n,r,i))})},this.collaborators=function(e){n("GET",r+"/collaborators",null,e)},this.isCollaborator=function(e,t){n("GET",r+"/collaborators/"+e,null,t)},this.contents=function(e,t,o){t=encodeURI(t),n("GET",r+"/contents"+(t?"/"+t:""),{ref:e},o)},this.fork=function(e){n("POST",r+"/forks",null,e)},this.listForks=function(e){n("GET",r+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,r){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:r},n)})},this.createPullRequest=function(e,t){n("POST",r+"/pulls",e,t)},this.listHooks=function(e){n("GET",r+"/hooks",null,e)},this.getHook=function(e,t){n("GET",r+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",r+"/hooks",e,t)},this.editHook=function(e,t,o){n("PATCH",r+"/hooks/"+e,t,o)},this.deleteHook=function(e,t){n("DELETE",r+"/hooks/"+e,null,t)},this.read=function(e,t,o){n("GET",r+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,o,!0)},this.remove=function(e,t,o){c.getSha(e,t,function(i,s){return i?o(i):void n("DELETE",r+"/contents/"+t,{message:t+" is removed",sha:s,branch:e},o)})},this["delete"]=this.remove,this.move=function(e,n,r,o){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,s){s.forEach(function(e){e.path===n&&(e.path=r),"tree"===e.type&&delete e.sha}),c.postTree(s,function(t,r){c.commit(i,r,"Deleted "+n,function(t,n){c.updateHead(e,n,o)})})})})},this.write=function(e,t,i,s,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,f){var l={message:s,content:"undefined"==typeof u.encode||u.encode?o(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(l.sha=f),n("PUT",r+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var o=r+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var s=e.since;s.constructor===Date&&(s=s.toISOString()),i.push("since="+encodeURIComponent(s))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(o+="?"+i.join("&")),n("GET",o,null,t)},this.isStarred=function(e,t,r){n("GET","/user/starred/"+e+"/"+t,null,r)},this.star=function(e,t,r){n("PUT","/user/starred/"+e+"/"+t,null,r)},this.unstar=function(e,t,r){n("DELETE","/user/starred/"+e+"/"+t,null,r)},this.createRelease=function(e,t){n("POST",r+"/releases",e,t)},this.editRelease=function(e,t,o){n("PATCH",r+"/releases/"+e,t,o)},this.getRelease=function(e,t){n("GET",r+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",r+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,r="/gists/"+t;this.read=function(e){n("GET",r,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",r,null,e)},this.fork=function(e){n("POST",r+"/fork",null,e)},this.update=function(e,t){n("PATCH",r,e,t)},this.star=function(e){n("PUT",r+"/star",null,e)},this.unstar=function(e){n("DELETE",r+"/star",null,e)},this.isStarred=function(e){n("GET",r+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,r){n("POST",t,e,r)},this.list=function(e,n){var r=[];for(var o in e)e.hasOwnProperty(o)&&r.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));s(t+"?"+r.join("&"),n)},this.comment=function(e,t,r){n("POST",e.comments_url,{body:t},r)},this.edit=function(e,r,o){n("PATCH",t+"/"+e,r,o)},this.get=function(e,r){n("GET",t+"/"+e,null,r)}},i.Search=function(e){var t="/search/",r="?q="+e.query;this.repositories=function(e,o){n("GET",t+"repositories"+r,e,o)},this.code=function(e,o){n("GET",t+"code"+r,e,o)},this.issues=function(e,o){n("GET",t+"issues"+r,e,o); -},this.users=function(e,o){n("GET",t+"users"+r,e,o)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i})},{axios:1,"base-64":18,"es6-promise":19,utf8:21}]},{},[22])(22)}); -//# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map deleted file mode 100644 index 8064cd34..00000000 --- a/dist/github.bundle.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","arg","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",20,"cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","clearTimeout","Item","fun","array","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",21,"ucs2decode","string","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","codePoint","createByte","encodeCodePoint","symbol","utf8encode","codePoints","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","byteArray","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","tmp","utf8",22,"factory","Base64","Utf8","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","param","getTime","token","_requestAllPages","results","iterate","err","res","xhr","next","getResponseHeader","filter","link","exec","pop","User","repos","type","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","collaborators","isCollaborator","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","list","query","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":20}],6:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n\n},{}],8:[function(require,module,exports){\n'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n\n},{}],9:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n\n},{}],11:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n\n},{}],13:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n\n},{}],16:[function(require,module,exports){\n'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":20}],20:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],21:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],22:[function(require,module,exports){\n/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Show repository collaborators\r\n // -------\r\n\r\n this.collaborators = function (cb) {\r\n _request('GET', repoPath + '/collaborators', null, cb);\r\n };\r\n\r\n // Check whether user is a collaborator on the repository\r\n // -------\r\n\r\n this.isCollaborator = function (username, cb) {\r\n _request('GET', repoPath + '/collaborators/' + username, null, cb);\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n\n},{\"axios\":1,\"base-64\":18,\"es6-promise\":19,\"utf8\":21}]},{},[22])(22)\n});\n\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\nvar buildURL = require('./../helpers/buildURL');\r\nvar parseHeaders = require('./../helpers/parseHeaders');\r\nvar transformData = require('./../helpers/transformData');\r\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\r\nvar btoa = window.btoa || require('./../helpers/btoa');\r\n\r\nmodule.exports = function xhrAdapter(resolve, reject, config) {\r\n var requestData = config.data;\r\n var requestHeaders = config.headers;\r\n\r\n if (utils.isFormData(requestData)) {\r\n delete requestHeaders['Content-Type']; // Let the browser set it\r\n }\r\n\r\n var request = new XMLHttpRequest();\r\n\r\n // For IE 8/9 CORS support\r\n // Only supports POST and GET calls and doesn't returns the response headers.\r\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\r\n request = new window.XDomainRequest();\r\n }\r\n\r\n // HTTP basic authentication\r\n if (config.auth) {\r\n var username = config.auth.username || '';\r\n var password = config.auth.password || '';\r\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\r\n }\r\n\r\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\r\n\r\n // Set the request timeout in MS\r\n request.timeout = config.timeout;\r\n\r\n // Listen for ready state\r\n request.onload = function handleLoad() {\r\n if (!request) {\r\n return;\r\n }\r\n // Prepare the response\r\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\r\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\r\n var response = {\r\n data: transformData(\r\n responseData,\r\n responseHeaders,\r\n config.transformResponse\r\n ),\r\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\r\n status: request.status === 1223 ? 204 : request.status,\r\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\r\n headers: responseHeaders,\r\n config: config,\r\n request: request\r\n };\r\n\r\n // Resolve or reject the Promise based on the status\r\n ((response.status >= 200 && response.status < 300) ||\r\n (!('status' in request) && response.responseText) ?\r\n resolve :\r\n reject)(response);\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Handle low level network errors\r\n request.onerror = function handleError() {\r\n // Real errors are hidden from us by the browser\r\n // onerror should only fire if it's a network error\r\n reject(new Error('Network Error'));\r\n\r\n // Clean up request\r\n request = null;\r\n };\r\n\r\n // Add xsrf header\r\n // This is only done if running in a standard browser environment.\r\n // Specifically not if we're in a web worker, or react-native.\r\n if (utils.isStandardBrowserEnv()) {\r\n var cookies = require('./../helpers/cookies');\r\n\r\n // Add xsrf header\r\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\r\n cookies.read(config.xsrfCookieName) :\r\n undefined;\r\n\r\n if (xsrfValue) {\r\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\r\n }\r\n }\r\n\r\n // Add headers to the request\r\n if ('setRequestHeader' in request) {\r\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\r\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\r\n // Remove Content-Type if data is undefined\r\n delete requestHeaders[key];\r\n } else {\r\n // Otherwise add header to the request\r\n request.setRequestHeader(key, val);\r\n }\r\n });\r\n }\r\n\r\n // Add withCredentials to request if needed\r\n if (config.withCredentials) {\r\n request.withCredentials = true;\r\n }\r\n\r\n // Add responseType to request if needed\r\n if (config.responseType) {\r\n try {\r\n request.responseType = config.responseType;\r\n } catch (e) {\r\n if (request.responseType !== 'json') {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n if (utils.isArrayBuffer(requestData)) {\r\n requestData = new DataView(requestData);\r\n }\r\n\r\n // Send the request\r\n request.send(requestData);\r\n};\r\n","'use strict';\r\n\r\nvar defaults = require('./defaults');\r\nvar utils = require('./utils');\r\nvar dispatchRequest = require('./core/dispatchRequest');\r\nvar InterceptorManager = require('./core/InterceptorManager');\r\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\r\nvar combineURLs = require('./helpers/combineURLs');\r\nvar bind = require('./helpers/bind');\r\nvar transformData = require('./helpers/transformData');\r\n\r\nfunction Axios(defaultConfig) {\r\n this.defaults = utils.merge({}, defaultConfig);\r\n this.interceptors = {\r\n request: new InterceptorManager(),\r\n response: new InterceptorManager()\r\n };\r\n}\r\n\r\nAxios.prototype.request = function request(config) {\r\n /*eslint no-param-reassign:0*/\r\n // Allow for axios('example/url'[, config]) a la fetch API\r\n if (typeof config === 'string') {\r\n config = utils.merge({\r\n url: arguments[0]\r\n }, arguments[1]);\r\n }\r\n\r\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\r\n\r\n // Support baseURL config\r\n if (config.baseURL && !isAbsoluteURL(config.url)) {\r\n config.url = combineURLs(config.baseURL, config.url);\r\n }\r\n\r\n // Don't allow overriding defaults.withCredentials\r\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\r\n\r\n // Transform request data\r\n config.data = transformData(\r\n config.data,\r\n config.headers,\r\n config.transformRequest\r\n );\r\n\r\n // Flatten headers\r\n config.headers = utils.merge(\r\n config.headers.common || {},\r\n config.headers[config.method] || {},\r\n config.headers || {}\r\n );\r\n\r\n utils.forEach(\r\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\r\n function cleanHeaderConfig(method) {\r\n delete config.headers[method];\r\n }\r\n );\r\n\r\n // Hook up interceptors middleware\r\n var chain = [dispatchRequest, undefined];\r\n var promise = Promise.resolve(config);\r\n\r\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\r\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\r\n chain.push(interceptor.fulfilled, interceptor.rejected);\r\n });\r\n\r\n while (chain.length) {\r\n promise = promise.then(chain.shift(), chain.shift());\r\n }\r\n\r\n return promise;\r\n};\r\n\r\nvar defaultInstance = new Axios(defaults);\r\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\r\n\r\naxios.create = function create(defaultConfig) {\r\n return new Axios(defaultConfig);\r\n};\r\n\r\n// Expose defaults\r\naxios.defaults = defaultInstance.defaults;\r\n\r\n// Expose all/spread\r\naxios.all = function all(promises) {\r\n return Promise.all(promises);\r\n};\r\naxios.spread = require('./helpers/spread');\r\n\r\n// Expose interceptors\r\naxios.interceptors = defaultInstance.interceptors;\r\n\r\n// Provide aliases for supported request methods\r\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n\r\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\r\n /*eslint func-names:0*/\r\n Axios.prototype[method] = function(url, data, config) {\r\n return this.request(utils.merge(config || {}, {\r\n method: method,\r\n url: url,\r\n data: data\r\n }));\r\n };\r\n axios[method] = bind(Axios.prototype[method], defaultInstance);\r\n});\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction InterceptorManager() {\r\n this.handlers = [];\r\n}\r\n\r\n/**\r\n * Add a new interceptor to the stack\r\n *\r\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\r\n * @param {Function} rejected The function to handle `reject` for a `Promise`\r\n *\r\n * @return {Number} An ID used to remove interceptor later\r\n */\r\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\r\n this.handlers.push({\r\n fulfilled: fulfilled,\r\n rejected: rejected\r\n });\r\n return this.handlers.length - 1;\r\n};\r\n\r\n/**\r\n * Remove an interceptor from the stack\r\n *\r\n * @param {Number} id The ID that was returned by `use`\r\n */\r\nInterceptorManager.prototype.eject = function eject(id) {\r\n if (this.handlers[id]) {\r\n this.handlers[id] = null;\r\n }\r\n};\r\n\r\n/**\r\n * Iterate over all the registered interceptors\r\n *\r\n * This method is particularly useful for skipping over any\r\n * interceptors that may have become `null` calling `eject`.\r\n *\r\n * @param {Function} fn The function to call for each interceptor\r\n */\r\nInterceptorManager.prototype.forEach = function forEach(fn) {\r\n utils.forEach(this.handlers, function forEachHandler(h) {\r\n if (h !== null) {\r\n fn(h);\r\n }\r\n });\r\n};\r\n\r\nmodule.exports = InterceptorManager;\r\n","'use strict';\r\n\r\n/**\r\n * Dispatch a request to the server using whichever adapter\r\n * is supported by the current environment.\r\n *\r\n * @param {object} config The config that is to be used for the request\r\n * @returns {Promise} The Promise to be fulfilled\r\n */\r\nmodule.exports = function dispatchRequest(config) {\r\n return new Promise(function executor(resolve, reject) {\r\n try {\r\n var adapter;\r\n\r\n if (typeof config.adapter === 'function') {\r\n // For custom adapter support\r\n adapter = config.adapter;\r\n } else if (typeof XMLHttpRequest !== 'undefined') {\r\n // For browsers use XHR adapter\r\n adapter = require('../adapters/xhr');\r\n } else if (typeof process !== 'undefined') {\r\n // For node use HTTP adapter\r\n adapter = require('../adapters/http');\r\n }\r\n\r\n if (typeof adapter === 'function') {\r\n adapter(resolve, reject, config);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n};\r\n\r\n","'use strict';\r\n\r\nvar utils = require('./utils');\r\n\r\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\r\nvar DEFAULT_CONTENT_TYPE = {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n};\r\n\r\nmodule.exports = {\r\n transformRequest: [function transformResponseJSON(data, headers) {\r\n if (utils.isFormData(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBuffer(data)) {\r\n return data;\r\n }\r\n if (utils.isArrayBufferView(data)) {\r\n return data.buffer;\r\n }\r\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\r\n // Set application/json if no Content-Type has been specified\r\n if (!utils.isUndefined(headers)) {\r\n utils.forEach(headers, function processContentTypeHeader(val, key) {\r\n if (key.toLowerCase() === 'content-type') {\r\n headers['Content-Type'] = val;\r\n }\r\n });\r\n\r\n if (utils.isUndefined(headers['Content-Type'])) {\r\n headers['Content-Type'] = 'application/json;charset=utf-8';\r\n }\r\n }\r\n return JSON.stringify(data);\r\n }\r\n return data;\r\n }],\r\n\r\n transformResponse: [function transformResponseJSON(data) {\r\n /*eslint no-param-reassign:0*/\r\n if (typeof data === 'string') {\r\n data = data.replace(PROTECTION_PREFIX, '');\r\n try {\r\n data = JSON.parse(data);\r\n } catch (e) { /* Ignore */ }\r\n }\r\n return data;\r\n }],\r\n\r\n headers: {\r\n common: {\r\n 'Accept': 'application/json, text/plain, */*'\r\n },\r\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\r\n post: utils.merge(DEFAULT_CONTENT_TYPE),\r\n put: utils.merge(DEFAULT_CONTENT_TYPE)\r\n },\r\n\r\n timeout: 0,\r\n\r\n xsrfCookieName: 'XSRF-TOKEN',\r\n xsrfHeaderName: 'X-XSRF-TOKEN'\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function bind(fn, thisArg) {\r\n return function wrap() {\r\n var args = new Array(arguments.length);\r\n for (var i = 0; i < args.length; i++) {\r\n args[i] = arguments[i];\r\n }\r\n return fn.apply(thisArg, args);\r\n };\r\n};\r\n","'use strict';\r\n\r\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\r\n\r\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n\r\nfunction InvalidCharacterError(message) {\r\n this.message = message;\r\n}\r\nInvalidCharacterError.prototype = new Error;\r\nInvalidCharacterError.prototype.code = 5;\r\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\r\n\r\nfunction btoa(input) {\r\n var str = String(input);\r\n var output = '';\r\n for (\r\n // initialize result and counter\r\n var block, charCode, idx = 0, map = chars;\r\n // if the next str index does not exist:\r\n // change the mapping table to \"=\"\r\n // check if d has no fractional digits\r\n str.charAt(idx | 0) || (map = '=', idx % 1);\r\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\r\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\r\n ) {\r\n charCode = str.charCodeAt(idx += 3 / 4);\r\n if (charCode > 0xFF) {\r\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\r\n }\r\n block = block << 8 | charCode;\r\n }\r\n return output;\r\n}\r\n\r\nmodule.exports = btoa;\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nfunction encode(val) {\r\n return encodeURIComponent(val).\r\n replace(/%40/gi, '@').\r\n replace(/%3A/gi, ':').\r\n replace(/%24/g, '$').\r\n replace(/%2C/gi, ',').\r\n replace(/%20/g, '+').\r\n replace(/%5B/gi, '[').\r\n replace(/%5D/gi, ']');\r\n}\r\n\r\n/**\r\n * Build a URL by appending params to the end\r\n *\r\n * @param {string} url The base of the url (e.g., http://www.google.com)\r\n * @param {object} [params] The params to be appended\r\n * @returns {string} The formatted url\r\n */\r\nmodule.exports = function buildURL(url, params, paramsSerializer) {\r\n /*eslint no-param-reassign:0*/\r\n if (!params) {\r\n return url;\r\n }\r\n\r\n var serializedParams;\r\n if (paramsSerializer) {\r\n serializedParams = paramsSerializer(params);\r\n } else {\r\n var parts = [];\r\n\r\n utils.forEach(params, function serialize(val, key) {\r\n if (val === null || typeof val === 'undefined') {\r\n return;\r\n }\r\n\r\n if (utils.isArray(val)) {\r\n key = key + '[]';\r\n }\r\n\r\n if (!utils.isArray(val)) {\r\n val = [val];\r\n }\r\n\r\n utils.forEach(val, function parseValue(v) {\r\n if (utils.isDate(v)) {\r\n v = v.toISOString();\r\n } else if (utils.isObject(v)) {\r\n v = JSON.stringify(v);\r\n }\r\n parts.push(encode(key) + '=' + encode(v));\r\n });\r\n });\r\n\r\n serializedParams = parts.join('&');\r\n }\r\n\r\n if (serializedParams) {\r\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\r\n }\r\n\r\n return url;\r\n};\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Creates a new URL by combining the specified URLs\r\n *\r\n * @param {string} baseURL The base URL\r\n * @param {string} relativeURL The relative URL\r\n * @returns {string} The combined URL\r\n */\r\nmodule.exports = function combineURLs(baseURL, relativeURL) {\r\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs support document.cookie\r\n (function standardBrowserEnv() {\r\n return {\r\n write: function write(name, value, expires, path, domain, secure) {\r\n var cookie = [];\r\n cookie.push(name + '=' + encodeURIComponent(value));\r\n\r\n if (utils.isNumber(expires)) {\r\n cookie.push('expires=' + new Date(expires).toGMTString());\r\n }\r\n\r\n if (utils.isString(path)) {\r\n cookie.push('path=' + path);\r\n }\r\n\r\n if (utils.isString(domain)) {\r\n cookie.push('domain=' + domain);\r\n }\r\n\r\n if (secure === true) {\r\n cookie.push('secure');\r\n }\r\n\r\n document.cookie = cookie.join('; ');\r\n },\r\n\r\n read: function read(name) {\r\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\r\n return (match ? decodeURIComponent(match[3]) : null);\r\n },\r\n\r\n remove: function remove(name) {\r\n this.write(name, '', Date.now() - 86400000);\r\n }\r\n };\r\n })() :\r\n\r\n // Non standard browser env (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return {\r\n write: function write() {},\r\n read: function read() { return null; },\r\n remove: function remove() {}\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\n/**\r\n * Determines whether the specified URL is absolute\r\n *\r\n * @param {string} url The URL to test\r\n * @returns {boolean} True if the specified URL is absolute, otherwise false\r\n */\r\nmodule.exports = function isAbsoluteURL(url) {\r\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\r\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\r\n // by any combination of letters, digits, plus, period, or hyphen.\r\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\nmodule.exports = (\r\n utils.isStandardBrowserEnv() ?\r\n\r\n // Standard browser envs have full support of the APIs needed to test\r\n // whether the request URL is of the same origin as current location.\r\n (function standardBrowserEnv() {\r\n var msie = /(msie|trident)/i.test(navigator.userAgent);\r\n var urlParsingNode = document.createElement('a');\r\n var originURL;\r\n\r\n /**\r\n * Parse a URL to discover it's components\r\n *\r\n * @param {String} url The URL to be parsed\r\n * @returns {Object}\r\n */\r\n function resolveURL(url) {\r\n var href = url;\r\n\r\n if (msie) {\r\n // IE needs attribute set twice to normalize properties\r\n urlParsingNode.setAttribute('href', href);\r\n href = urlParsingNode.href;\r\n }\r\n\r\n urlParsingNode.setAttribute('href', href);\r\n\r\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\r\n return {\r\n href: urlParsingNode.href,\r\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\r\n host: urlParsingNode.host,\r\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\r\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\r\n hostname: urlParsingNode.hostname,\r\n port: urlParsingNode.port,\r\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\r\n urlParsingNode.pathname :\r\n '/' + urlParsingNode.pathname\r\n };\r\n }\r\n\r\n originURL = resolveURL(window.location.href);\r\n\r\n /**\r\n * Determine if a URL shares the same origin as the current location\r\n *\r\n * @param {String} requestURL The URL to test\r\n * @returns {boolean} True if URL shares the same origin, otherwise false\r\n */\r\n return function isURLSameOrigin(requestURL) {\r\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\r\n return (parsed.protocol === originURL.protocol &&\r\n parsed.host === originURL.host);\r\n };\r\n })() :\r\n\r\n // Non standard browser envs (web workers, react-native) lack needed support.\r\n (function nonStandardBrowserEnv() {\r\n return function isURLSameOrigin() {\r\n return true;\r\n };\r\n })()\r\n);\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Parse headers into an object\r\n *\r\n * ```\r\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\r\n * Content-Type: application/json\r\n * Connection: keep-alive\r\n * Transfer-Encoding: chunked\r\n * ```\r\n *\r\n * @param {String} headers Headers needing to be parsed\r\n * @returns {Object} Headers parsed into an object\r\n */\r\nmodule.exports = function parseHeaders(headers) {\r\n var parsed = {};\r\n var key;\r\n var val;\r\n var i;\r\n\r\n if (!headers) { return parsed; }\r\n\r\n utils.forEach(headers.split('\\n'), function parser(line) {\r\n i = line.indexOf(':');\r\n key = utils.trim(line.substr(0, i)).toLowerCase();\r\n val = utils.trim(line.substr(i + 1));\r\n\r\n if (key) {\r\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n }\r\n });\r\n\r\n return parsed;\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Syntactic sugar for invoking a function and expanding an array for arguments.\r\n *\r\n * Common use case would be to use `Function.prototype.apply`.\r\n *\r\n * ```js\r\n * function f(x, y, z) {}\r\n * var args = [1, 2, 3];\r\n * f.apply(null, args);\r\n * ```\r\n *\r\n * With `spread` this example can be re-written.\r\n *\r\n * ```js\r\n * spread(function(x, y, z) {})([1, 2, 3]);\r\n * ```\r\n *\r\n * @param {Function} callback\r\n * @returns {Function}\r\n */\r\nmodule.exports = function spread(callback) {\r\n return function wrap(arr) {\r\n return callback.apply(null, arr);\r\n };\r\n};\r\n","'use strict';\r\n\r\nvar utils = require('./../utils');\r\n\r\n/**\r\n * Transform the data for a request or a response\r\n *\r\n * @param {Object|String} data The data to be transformed\r\n * @param {Array} headers The headers for the request or response\r\n * @param {Array|Function} fns A single function or Array of functions\r\n * @returns {*} The resulting transformed data\r\n */\r\nmodule.exports = function transformData(data, headers, fns) {\r\n /*eslint no-param-reassign:0*/\r\n utils.forEach(fns, function transform(fn) {\r\n data = fn(data, headers);\r\n });\r\n\r\n return data;\r\n};\r\n","'use strict';\r\n\r\n/*global toString:true*/\r\n\r\n// utils is a library of generic helper functions non-specific to axios\r\n\r\nvar toString = Object.prototype.toString;\r\n\r\n/**\r\n * Determine if a value is an Array\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Array, otherwise false\r\n */\r\nfunction isArray(val) {\r\n return toString.call(val) === '[object Array]';\r\n}\r\n\r\n/**\r\n * Determine if a value is an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBuffer(val) {\r\n return toString.call(val) === '[object ArrayBuffer]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a FormData\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an FormData, otherwise false\r\n */\r\nfunction isFormData(val) {\r\n return toString.call(val) === '[object FormData]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a view on an ArrayBuffer\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\r\n */\r\nfunction isArrayBufferView(val) {\r\n var result;\r\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\r\n result = ArrayBuffer.isView(val);\r\n } else {\r\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Determine if a value is a String\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a String, otherwise false\r\n */\r\nfunction isString(val) {\r\n return typeof val === 'string';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Number\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Number, otherwise false\r\n */\r\nfunction isNumber(val) {\r\n return typeof val === 'number';\r\n}\r\n\r\n/**\r\n * Determine if a value is undefined\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if the value is undefined, otherwise false\r\n */\r\nfunction isUndefined(val) {\r\n return typeof val === 'undefined';\r\n}\r\n\r\n/**\r\n * Determine if a value is an Object\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is an Object, otherwise false\r\n */\r\nfunction isObject(val) {\r\n return val !== null && typeof val === 'object';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Date\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Date, otherwise false\r\n */\r\nfunction isDate(val) {\r\n return toString.call(val) === '[object Date]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a File\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a File, otherwise false\r\n */\r\nfunction isFile(val) {\r\n return toString.call(val) === '[object File]';\r\n}\r\n\r\n/**\r\n * Determine if a value is a Blob\r\n *\r\n * @param {Object} val The value to test\r\n * @returns {boolean} True if value is a Blob, otherwise false\r\n */\r\nfunction isBlob(val) {\r\n return toString.call(val) === '[object Blob]';\r\n}\r\n\r\n/**\r\n * Trim excess whitespace off the beginning and end of a string\r\n *\r\n * @param {String} str The String to trim\r\n * @returns {String} The String freed of excess whitespace\r\n */\r\nfunction trim(str) {\r\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\r\n}\r\n\r\n/**\r\n * Determine if we're running in a standard browser environment\r\n *\r\n * This allows axios to run in a web worker, and react-native.\r\n * Both environments support XMLHttpRequest, but not fully standard globals.\r\n *\r\n * web workers:\r\n * typeof window -> undefined\r\n * typeof document -> undefined\r\n *\r\n * react-native:\r\n * typeof document.createElement -> undefined\r\n */\r\nfunction isStandardBrowserEnv() {\r\n return (\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n typeof document.createElement === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Iterate over an Array or an Object invoking a function for each item.\r\n *\r\n * If `obj` is an Array callback will be called passing\r\n * the value, index, and complete array for each item.\r\n *\r\n * If 'obj' is an Object callback will be called passing\r\n * the value, key, and complete object for each property.\r\n *\r\n * @param {Object|Array} obj The object to iterate\r\n * @param {Function} fn The callback to invoke for each item\r\n */\r\nfunction forEach(obj, fn) {\r\n // Don't bother if no value provided\r\n if (obj === null || typeof obj === 'undefined') {\r\n return;\r\n }\r\n\r\n // Force an array if not already something iterable\r\n if (typeof obj !== 'object' && !isArray(obj)) {\r\n /*eslint no-param-reassign:0*/\r\n obj = [obj];\r\n }\r\n\r\n if (isArray(obj)) {\r\n // Iterate over array values\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n fn.call(null, obj[i], i, obj);\r\n }\r\n } else {\r\n // Iterate over object keys\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn.call(null, obj[key], key, obj);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Accepts varargs expecting each argument to be an object, then\r\n * immutably merges the properties of each object and returns result.\r\n *\r\n * When multiple objects contain the same key the later object in\r\n * the arguments list will take precedence.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * var result = merge({foo: 123}, {foo: 456});\r\n * console.log(result.foo); // outputs 456\r\n * ```\r\n *\r\n * @param {Object} obj1 Object to merge\r\n * @returns {Object} Result of all merge properties\r\n */\r\nfunction merge(/* obj1, obj2, obj3, ... */) {\r\n var result = {};\r\n function assignValue(val, key) {\r\n if (typeof result[key] === 'object' && typeof val === 'object') {\r\n result[key] = merge(result[key], val);\r\n } else {\r\n result[key] = val;\r\n }\r\n }\r\n\r\n for (var i = 0, l = arguments.length; i < l; i++) {\r\n forEach(arguments[i], assignValue);\r\n }\r\n return result;\r\n}\r\n\r\nmodule.exports = {\r\n isArray: isArray,\r\n isArrayBuffer: isArrayBuffer,\r\n isFormData: isFormData,\r\n isArrayBufferView: isArrayBufferView,\r\n isString: isString,\r\n isNumber: isNumber,\r\n isObject: isObject,\r\n isUndefined: isUndefined,\r\n isDate: isDate,\r\n isFile: isFile,\r\n isBlob: isBlob,\r\n isStandardBrowserEnv: isStandardBrowserEnv,\r\n forEach: forEach,\r\n merge: merge,\r\n trim: trim\r\n};\r\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Show repository collaborators\r\n // -------\r\n\r\n this.collaborators = function (cb) {\r\n _request('GET', repoPath + '/collaborators', null, cb);\r\n };\r\n\r\n // Check whether user is a collaborator on the repository\r\n // -------\r\n\r\n this.isCollaborator = function (username, cb) {\r\n _request('GET', repoPath + '/collaborators/' + username, null, cb);\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js deleted file mode 100644 index 300e78a4..00000000 --- a/dist/github.min.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";!function(e,t){"function"==typeof define&&define.amd?define(["es6-promise","base-64","utf8","axios"],function(n,o,s,i){return e.Github=t(n,o,s,i)}):"object"==typeof module&&module.exports?module.exports=t(require("es6-promise"),require("base-64"),require("utf8"),require("axios")):e.Github=t(e.Promise,e.base64,e.utf8,e.axios)}(this,function(e,t,n,o){function s(e){return t.encode(n.encode(e))}e.polyfill&&e.polyfill();var i=function(e){e=e||{};var t=e.apiUrl||"https://api.github.com",n=i._request=function(n,i,r,u,a){function c(){var e=i.indexOf("//")>=0?i:t+i;if(e+=/\?/.test(e)?"&":"?",r&&"object"==typeof r&&["GET","HEAD","DELETE"].indexOf(n)>-1)for(var o in r)r.hasOwnProperty(o)&&(e+="&"+encodeURIComponent(o)+"="+encodeURIComponent(r[o]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:a?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:n,data:r?r:{},url:c()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+s(e.username+":"+e.password)),o(l).then(function(e){u(null,e.data||!0,e.request)},function(e){304===e.status?u(null,e.data||!0,e.request):u({path:i,request:e.request,error:e.status})})},r=i._requestAllPages=function(e,t){var o=[];!function s(){n("GET",e,null,function(n,i,r){if(n)return t(n);i instanceof Array||(i=[i]),o.push.apply(o,i);var u=(r.getResponseHeader("link")||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();u?(e=u,s()):t(n,o,r)})}()};return i.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),r(n,t)},this.orgs=function(e){n("GET","/user/orgs",null,e)},this.gists=function(e){n("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var o="/notifications",s=[];if(e.all&&s.push("all=true"),e.participating&&s.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),s.push("since="+encodeURIComponent(i))}if(e.before){var r=e.before;r.constructor===Date&&(r=r.toISOString()),s.push("before="+encodeURIComponent(r))}e.page&&s.push("page="+encodeURIComponent(e.page)),s.length>0&&(o+="?"+s.join("&")),n("GET",o,null,t)},this.show=function(e,t){var o=e?"/users/"+e:"/user";n("GET",o,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),r(o,n)},this.userStarred=function(e,t){r("/users/"+e+"/starred?type=all&per_page=100",t)},this.userGists=function(e,t){n("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){r("/orgs/"+e+"/repos?type=all&&page_num=1000&sort=updated&direction=desc",t)},this.follow=function(e,t){n("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){n("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){n("POST","/user/repos",e,t)}},i.Organization=function(){this.createRepo=function(e,t){n("POST","/orgs/"+e.orgname+"/repos",e,t)}},i.Repository=function(e){function t(e,t){return e===l.branch&&l.sha?t(null,l.sha):void c.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,r=e.name,u=e.user,a=e.fullname,c=this;o=a?"/repos/"+a:"/repos/"+u+"/"+r;var l={branch:null,sha:null};this.getRef=function(e,t){n("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){n("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,s){n("DELETE",o+"/git/refs/"+t,e,s)},this.deleteRepo=function(t){n("DELETE",o,e,t)},this.listTags=function(e){n("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var s=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.getPull=function(e,t){n("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,s){n("GET",o+"/compare/"+e+"..."+t,null,s)},this.listBranches=function(e){n("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){n("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,s){n("GET",o+"/git/commits/"+t,null,s)},this.getSha=function(e,t,s){return t&&""!==t?void n("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,n){return e?s(e):void s(null,t.sha,n)}):c.getRef("heads/"+e,s)},this.getStatuses=function(e,t){n("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){n("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,t){e="string"==typeof e?{content:e,encoding:"utf-8"}:{content:s(e),encoding:"base64"},n("POST",o+"/git/blobs",e,function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.updateTree=function(e,t,s,i){var r={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:s}]};n("POST",o+"/git/trees",r,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){n("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,s,r,u){var a=new i.User;a.show(null,function(i,a){if(i)return u(i);var c={message:r,author:{name:e.user,email:a.email},parents:[t],tree:s};n("POST",o+"/git/commits",c,function(e,t,n){return e?u(e):(l.sha=t.sha,void u(null,t.sha,n))})})},this.updateHead=function(e,t,s){n("PATCH",o+"/git/refs/heads/"+e,{sha:t},s)},this.show=function(e){n("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var s=this;n("GET",o+"/stats/contributors",null,function(n,o,i){return n?e(n):void(202===i.status?setTimeout(function(){s.contributors(e,t)},t):e(n,o,i))})},this.collaborators=function(e){n("GET",o+"/collaborators",null,e)},this.isCollaborator=function(e,t){n("GET",o+"/collaborators/"+e,null,t)},this.contents=function(e,t,s){t=encodeURI(t),n("GET",o+"/contents"+(t?"/"+t:""),{ref:e},s)},this.fork=function(e){n("POST",o+"/forks",null,e)},this.listForks=function(e){n("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void c.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){n("POST",o+"/pulls",e,t)},this.listHooks=function(e){n("GET",o+"/hooks",null,e)},this.getHook=function(e,t){n("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){n("POST",o+"/hooks",e,t)},this.editHook=function(e,t,s){n("PATCH",o+"/hooks/"+e,t,s)},this.deleteHook=function(e,t){n("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,s){n("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,s,!0)},this.remove=function(e,t,s){c.getSha(e,t,function(i,r){return i?s(i):void n("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:r,branch:e},s)})},this["delete"]=this.remove,this.move=function(e,n,o,s){t(e,function(t,i){c.getTree(i+"?recursive=true",function(t,r){r.forEach(function(e){e.path===n&&(e.path=o),"tree"===e.type&&delete e.sha}),c.postTree(r,function(t,o){c.commit(i,o,"Deleted "+n,function(t,n){c.updateHead(e,n,s)})})})})},this.write=function(e,t,i,r,u,a){"function"==typeof u&&(a=u,u={}),c.getSha(e,encodeURI(t),function(c,l){var f={message:r,content:"undefined"==typeof u.encode||u.encode?s(i):i,branch:e,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};c&&404!==c.error||(f.sha=l),n("PUT",o+"/contents/"+encodeURI(t),f,a)})},this.getCommits=function(e,t){e=e||{};var s=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var r=e.since;r.constructor===Date&&(r=r.toISOString()),i.push("since="+encodeURIComponent(r))}if(e.until){var u=e.until;u.constructor===Date&&(u=u.toISOString()),i.push("until="+encodeURIComponent(u))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(s+="?"+i.join("&")),n("GET",s,null,t)},this.isStarred=function(e,t,o){n("GET","/user/starred/"+e+"/"+t,null,o)},this.star=function(e,t,o){n("PUT","/user/starred/"+e+"/"+t,null,o)},this.unstar=function(e,t,o){n("DELETE","/user/starred/"+e+"/"+t,null,o)},this.createRelease=function(e,t){n("POST",o+"/releases",e,t)},this.editRelease=function(e,t,s){n("PATCH",o+"/releases/"+e,t,s)},this.getRelease=function(e,t){n("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){n("DELETE",o+"/releases/"+e,null,t)}},i.Gist=function(e){var t=e.id,o="/gists/"+t;this.read=function(e){n("GET",o,null,e)},this.create=function(e,t){n("POST","/gists",e,t)},this["delete"]=function(e){n("DELETE",o,null,e)},this.fork=function(e){n("POST",o+"/fork",null,e)},this.update=function(e,t){n("PATCH",o,e,t)},this.star=function(e){n("PUT",o+"/star",null,e)},this.unstar=function(e){n("DELETE",o+"/star",null,e)},this.isStarred=function(e){n("GET",o+"/star",null,e)}},i.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,o){n("POST",t,e,o)},this.list=function(e,n){var o=[];for(var s in e)e.hasOwnProperty(s)&&o.push(encodeURIComponent(s)+"="+encodeURIComponent(e[s]));r(t+"?"+o.join("&"),n)},this.comment=function(e,t,o){n("POST",e.comments_url,{body:t},o)},this.edit=function(e,o,s){n("PATCH",t+"/"+e,o,s)},this.get=function(e,o){n("GET",t+"/"+e,null,o)}},i.Search=function(e){var t="/search/",o="?q="+e.query;this.repositories=function(e,s){n("GET",t+"repositories"+o,e,s)},this.code=function(e,s){n("GET",t+"code"+o,e,s)},this.issues=function(e,s){n("GET",t+"issues"+o,e,s)},this.users=function(e,s){n("GET",t+"users"+o,e,s)}},i.RateLimit=function(){this.getRateLimit=function(e){n("GET","/rate_limit",null,e)}},i};return i.getIssues=function(e,t){return new i.Issue({user:e,repo:t})},i.getRepo=function(e,t){return t?new i.Repository({user:e,name:t}):new i.Repository({fullname:e})},i.getUser=function(){return new i.User},i.getOrg=function(){return new i.Organization},i.getGist=function(e){return new i.Gist({id:e})},i.getSearch=function(e){return new i.Search({query:e})},i.getRateLimit=function(){return new i.RateLimit},i}); -//# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map deleted file mode 100644 index 2fa295f5..00000000 --- a/dist/github.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["github.min.js"],"names":["root","factory","define","amd","Promise","Base64","Utf8","axios","Github","module","exports","require","base64","utf8","this","b64encode","string","encode","polyfill","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","username","password","Authorization","token","then","response","request","status","error","_requestAllPages","results","iterate","err","res","xhr","Array","push","apply","next","getResponseHeader","split","filter","link","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Organization","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","collaborators","isCollaborator","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","key","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","getIssues","getRepo","getUser","getOrg","getGist","getSearch"],"mappings":"AAWA,cAEC,SAAUA,EAAMC,GAEQ,kBAAXC,SAAyBA,OAAOC,IACxCD,QAEM,cACA,UACA,OACA,SAEH,SAAUE,EAASC,EAAQC,EAAMC,GAC9B,MAAQP,GAAKQ,OAASP,EAAQG,EAASC,EAAQC,EAAMC,KAGjC,gBAAXE,SAAuBA,OAAOC,QAC7CD,OAAOC,QAAUT,EAAQU,QAAQ,eAAgBA,QAAQ,WAAYA,QAAQ,QAASA,QAAQ,UAE9FX,EAAKQ,OAASP,EAAQD,EAAKI,QAASJ,EAAKY,OAAQZ,EAAKa,KAAMb,EAAKO,QAErEO,KAAM,SAASV,EAASC,EAAQC,EAAMC,GACrC,QAASQ,GAAUC,GAChB,MAAOX,GAAOY,OAAOX,EAAKW,OAAOD,IAGhCZ,EAAQc,UACTd,EAAQc,UAMX,IAAIV,GAAS,SAAUW,GACpBA,EAAUA,KAEV,IAAIC,GAAUD,EAAQE,QAAU,yBAO5BC,EAAWd,EAAOc,SAAW,SAAkBC,EAAQC,EAAMC,EAAMC,EAAIC,GACxE,QAASC,KACN,GAAIC,GAAML,EAAKM,QAAQ,OAAS,EAAIN,EAAOJ,EAAUI,CAIrD,IAFAK,GAAQ,KAAOE,KAAKF,GAAO,IAAM,IAE7BJ,GAAwB,gBAATA,KAAsB,MAAO,OAAQ,UAAUK,QAAQP,GAAU,GACjF,IAAI,GAAIS,KAASP,GACVA,EAAKQ,eAAeD,KACrBH,GAAO,IAAMK,mBAAmBF,GAAS,IAAME,mBAAmBT,EAAKO,IAKhF,OAAOH,GAAIM,QAAQ,mBAAoB,KACjB,mBAAXC,QAAyB,eAAgB,GAAIC,OAAOC,UAAY,IAG9E,GAAIC,IACDC,SACGC,OAAQd,EAAM,qCAAuC,iCACrDe,eAAgB,kCAEnBnB,OAAQA,EACRE,KAAMA,EAAOA,KACbI,IAAKD,IASR,QANKT,EAAa,OAAMA,EAAQwB,UAAYxB,EAAQyB,YACjDL,EAAOC,QAAQK,cAAgB1B,EAAQ2B,MACvC,SAAW3B,EAAQ2B,MACnB,SAAW/B,EAAUI,EAAQwB,SAAW,IAAMxB,EAAQyB,WAGlDrC,EAAMgC,GACTQ,KAAK,SAAUC,GACbtB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,UAEZ,SAAUD,GACc,MAApBA,EAASE,OACVxB,EACG,KACAsB,EAASvB,OAAQ,EACjBuB,EAASC,SAGZvB,GACGF,KAAMA,EACNyB,QAASD,EAASC,QAClBE,MAAOH,EAASE,YAM3BE,EAAmB5C,EAAO4C,iBAAmB,SAA0B5B,EAAME,GAC9E,GAAI2B,OAEJ,QAAUC,KACPhC,EAAS,MAAOE,EAAM,KAAM,SAAU+B,EAAKC,EAAKC,GAC7C,GAAIF,EACD,MAAO7B,GAAG6B,EAGPC,aAAeE,SAClBF,GAAOA,IAGVH,EAAQM,KAAKC,MAAMP,EAASG,EAE5B,IAAIK,IAAQJ,EAAIK,kBAAkB,SAAW,IACzCC,MAAM,KACNC,OAAO,SAASC,GACd,MAAO,aAAalC,KAAKkC,KAE3BC,IAAI,SAASD,GACX,OAAQ,SAASE,KAAKF,QAAa,KAErCG,KAECP,IAGFrC,EAAOqC,EACPP,KAHA5B,EAAG6B,EAAKF,EAASI,QA09B7B,OA98BAjD,GAAO6D,KAAO,WACXvD,KAAKwD,MAAQ,SAAUnD,EAASO,GACN,kBAAZP,KACRO,EAAKP,EACLA,MAGHA,EAAUA,KAEV,IAAIU,GAAM,cACN0C,IAEJA,GAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQqD,MAAQ,QACzDD,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQsD,MAAQ,YACzDF,EAAOZ,KAAK,YAAczB,mBAAmBf,EAAQuD,UAAY,QAE7DvD,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGpD9C,GAAO,IAAM0C,EAAOK,KAAK,KAEzBxB,EAAiBvB,EAAKH,IAMzBZ,KAAK+D,KAAO,SAAUnD,GACnBJ,EAAS,MAAO,aAAc,KAAMI,IAMvCZ,KAAKgE,MAAQ,SAAUpD,GACpBJ,EAAS,MAAO,SAAU,KAAMI,IAMnCZ,KAAKiE,cAAgB,SAAU5D,EAASO,GACd,kBAAZP,KACRO,EAAKP,EACLA,MAGHA,EAAUA,KACV,IAAIU,GAAM,iBACN0C,IAUJ,IARIpD,EAAQ6D,KACTT,EAAOZ,KAAK,YAGXxC,EAAQ8D,eACTV,EAAOZ,KAAK,sBAGXxC,EAAQ+D,MAAO,CAChB,GAAIA,GAAQ/D,EAAQ+D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOZ,KAAK,SAAWzB,mBAAmBgD,IAG7C,GAAI/D,EAAQkE,OAAQ,CACjB,GAAIA,GAASlE,EAAQkE,MAEjBA,GAAOF,cAAgB9C,OACxBgD,EAASA,EAAOD,eAGnBb,EAAOZ,KAAK,UAAYzB,mBAAmBmD,IAG1ClE,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGhDJ,EAAOe,OAAS,IACjBzD,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKyE,KAAO,SAAU5C,EAAUjB,GAC7B,GAAI8D,GAAU7C,EAAW,UAAYA,EAAW,OAEhDrB,GAAS,MAAOkE,EAAS,KAAM9D,IAMlCZ,KAAK2E,UAAY,SAAU9C,EAAUxB,EAASO,GACpB,kBAAZP,KACRO,EAAKP,EACLA,KAGH,IAAIU,GAAM,UAAYc,EAAW,SAC7B4B,IAEJA,GAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQqD,MAAQ,QACzDD,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQsD,MAAQ,YACzDF,EAAOZ,KAAK,YAAczB,mBAAmBf,EAAQuD,UAAY,QAE7DvD,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQwD,OAGpD9C,GAAO,IAAM0C,EAAOK,KAAK,KAEzBxB,EAAiBvB,EAAKH,IAMzBZ,KAAK4E,YAAc,SAAU/C,EAAUjB,GAEpC0B,EAAiB,UAAYT,EAAW,iCAAkCjB,IAM7EZ,KAAK6E,UAAY,SAAUhD,EAAUjB,GAClCJ,EAAS,MAAO,UAAYqB,EAAW,SAAU,KAAMjB,IAM1DZ,KAAK8E,SAAW,SAAUC,EAASnE,GAEhC0B,EAAiB,SAAWyC,EAAU,6DAA8DnE,IAMvGZ,KAAKgF,OAAS,SAAUnD,EAAUjB,GAC/BJ,EAAS,MAAO,mBAAqBqB,EAAU,KAAMjB,IAMxDZ,KAAKiF,SAAW,SAAUpD,EAAUjB,GACjCJ,EAAS,SAAU,mBAAqBqB,EAAU,KAAMjB,IAK3DZ,KAAKkF,WAAa,SAAU7E,EAASO,GAClCJ,EAAS,OAAQ,cAAeH,EAASO,KAI/ClB,EAAOyF,aAAe,WAGnBnF,KAAKkF,WAAa,SAAU7E,EAASO,GAClCJ,EAAS,OAAQ,SAAWH,EAAQ0E,QAAU,SAAU1E,EAASO,KAOvElB,EAAO0F,WAAa,SAAU/E,GAsB3B,QAASgF,GAAWC,EAAQ1E,GACzB,MAAI0E,KAAWC,EAAYD,QAAUC,EAAYC,IACvC5E,EAAG,KAAM2E,EAAYC,SAG/BC,GAAKC,OAAO,SAAWJ,EAAQ,SAAU7C,EAAK+C,GAC3CD,EAAYD,OAASA,EACrBC,EAAYC,IAAMA,EAClB5E,EAAG6B,EAAK+C,KA7Bd,GAKIG,GALAC,EAAOvF,EAAQwF,KACfC,EAAOzF,EAAQyF,KACfC,EAAW1F,EAAQ0F,SAEnBN,EAAOzF,IAIR2F,GADCI,EACU,UAAYA,EAEZ,UAAYD,EAAO,IAAMF,CAGvC,IAAIL,IACDD,OAAQ,KACRE,IAAK,KAqBRxF,MAAK0F,OAAS,SAAUM,EAAKpF,GAC1BJ,EAAS,MAAOmF,EAAW,aAAeK,EAAK,KAAM,SAAUvD,EAAKC,EAAKC,GACtE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAIuD,OAAOT,IAAK7C,MAY/B3C,KAAKkG,UAAY,SAAU7F,EAASO,GACjCJ,EAAS,OAAQmF,EAAW,YAAatF,EAASO,IASrDZ,KAAKmG,UAAY,SAAUH,EAAKpF,GAC7BJ,EAAS,SAAUmF,EAAW,aAAeK,EAAK3F,EAASO,IAM9DZ,KAAKoG,WAAa,SAAUxF,GACzBJ,EAAS,SAAUmF,EAAUtF,EAASO,IAMzCZ,KAAKqG,SAAW,SAAUzF,GACvBJ,EAAS,MAAOmF,EAAW,QAAS,KAAM/E,IAM7CZ,KAAKsG,UAAY,SAAUjG,EAASO,GACjCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,SACjBlC,IAEmB,iBAAZpD,GAERoD,EAAOZ,KAAK,SAAWxC,IAEnBA,EAAQkG,OACT9C,EAAOZ,KAAK,SAAWzB,mBAAmBf,EAAQkG,QAGjDlG,EAAQmG,MACT/C,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQmG,OAGhDnG,EAAQoG,MACThD,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQoG,OAGhDpG,EAAQsD,MACTF,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQsD,OAGhDtD,EAAQqG,WACTjD,EAAOZ,KAAK,aAAezB,mBAAmBf,EAAQqG,YAGrDrG,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUxC,EAAQwD,MAG7BxD,EAAQuD,UACTH,EAAOZ,KAAK,YAAcxC,EAAQuD,WAIpCH,EAAOe,OAAS,IACjBzD,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAK2G,QAAU,SAAUC,EAAQhG,GAC9BJ,EAAS,MAAOmF,EAAW,UAAYiB,EAAQ,KAAMhG,IAMxDZ,KAAK6G,QAAU,SAAUJ,EAAMD,EAAM5F,GAClCJ,EAAS,MAAOmF,EAAW,YAAcc,EAAO,MAAQD,EAAM,KAAM5F,IAMvEZ,KAAK8G,aAAe,SAAUlG,GAC3BJ,EAAS,MAAOmF,EAAW,kBAAmB,KAAM,SAAUlD,EAAKsE,EAAOpE,GACvE,MAAIF,GACM7B,EAAG6B,IAGbsE,EAAQA,EAAM3D,IAAI,SAAUoD,GACzB,MAAOA,GAAKR,IAAI3E,QAAQ,iBAAkB,UAG7CT,GAAG,KAAMmG,EAAOpE,OAOtB3C,KAAKgH,QAAU,SAAUxB,EAAK5E,GAC3BJ,EAAS,MAAOmF,EAAW,cAAgBH,EAAK,KAAM5E,EAAI,QAM7DZ,KAAKiH,UAAY,SAAU3B,EAAQE,EAAK5E,GACrCJ,EAAS,MAAOmF,EAAW,gBAAkBH,EAAK,KAAM5E,IAM3DZ,KAAKkH,OAAS,SAAU5B,EAAQ5E,EAAME,GACnC,MAAKF,IAAiB,KAATA,MAIbF,GAAS,MAAOmF,EAAW,aAAejF,GAAQ4E,EAAS,QAAUA,EAAS,IAC3E,KAAM,SAAU7C,EAAK0E,EAAaxE,GAC/B,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAMuG,EAAY3B,IAAK7C,KATtB8C,EAAKC,OAAO,SAAWJ,EAAQ1E,IAgB5CZ,KAAKoH,YAAc,SAAU5B,EAAK5E,GAC/BJ,EAAS,MAAOmF,EAAW,aAAeH,EAAK,KAAM5E,IAMxDZ,KAAKqH,QAAU,SAAUC,EAAM1G,GAC5BJ,EAAS,MAAOmF,EAAW,cAAgB2B,EAAM,KAAM,SAAU7E,EAAKC,EAAKC,GACxE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI4E,KAAM3E,MAOzB3C,KAAKuH,SAAW,SAAUC,EAAS5G,GAE7B4G,EADoB,gBAAZA,IAELA,QAASA,EACTC,SAAU,UAIVD,QAASvH,EAAUuH,GACnBC,SAAU,UAIhBjH,EAAS,OAAQmF,EAAW,aAAc6B,EAAS,SAAU/E,EAAKC,EAAKC,GACpE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAOxB3C,KAAKqF,WAAa,SAAUqC,EAAUhH,EAAMiH,EAAM/G,GAC/C,GAAID,IACDiH,UAAWF,EACXJ,OAEM5G,KAAMA,EACNmH,KAAM,SACNnE,KAAM,OACN8B,IAAKmC,IAKdnH,GAAS,OAAQmF,EAAW,aAAchF,EAAM,SAAU8B,EAAKC,EAAKC,GACjE,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK8H,SAAW,SAAUR,EAAM1G,GAC7BJ,EAAS,OAAQmF,EAAW,cACzB2B,KAAMA,GACN,SAAU7E,EAAKC,EAAKC,GACpB,MAAIF,GACM7B,EAAG6B,OAGb7B,GAAG,KAAM8B,EAAI8C,IAAK7C,MAQxB3C,KAAK+H,OAAS,SAAUC,EAAQV,EAAMW,EAASrH,GAC5C,GAAIkF,GAAO,GAAIpG,GAAO6D,IAEtBuC,GAAKrB,KAAK,KAAM,SAAUhC,EAAKyF,GAC5B,GAAIzF,EACD,MAAO7B,GAAG6B,EAGb,IAAI9B,IACDsH,QAASA,EACTE,QACGtC,KAAMxF,EAAQyF,KACdsC,MAAOF,EAASE,OAEnBC,SACGL,GAEHV,KAAMA,EAGT9G,GAAS,OAAQmF,EAAW,eAAgBhF,EAAM,SAAU8B,EAAKC,EAAKC,GACnE,MAAIF,GACM7B,EAAG6B,IAGb8C,EAAYC,IAAM9C,EAAI8C,QAEtB5E,GAAG,KAAM8B,EAAI8C,IAAK7C,SAQ3B3C,KAAKsI,WAAa,SAAU9B,EAAMuB,EAAQnH,GACvCJ,EAAS,QAASmF,EAAW,mBAAqBa,GAC/ChB,IAAKuC,GACLnH,IAMNZ,KAAKyE,KAAO,SAAU7D,GACnBJ,EAAS,MAAOmF,EAAU,KAAM/E,IAMnCZ,KAAKuI,aAAe,SAAU3H,EAAI4H,GAC/BA,EAAQA,GAAS,GACjB,IAAI/C,GAAOzF,IAEXQ,GAAS,MAAOmF,EAAW,sBAAuB,KAAM,SAAUlD,EAAK9B,EAAMgC,GAC1E,MAAIF,GACM7B,EAAG6B,QAGM,MAAfE,EAAIP,OACLqG,WACG,WACGhD,EAAK8C,aAAa3H,EAAI4H,IAEzBA,GAGH5H,EAAG6B,EAAK9B,EAAMgC,OAQvB3C,KAAK0I,cAAgB,SAAU9H,GAC5BJ,EAAS,MAAOmF,EAAW,iBAAkB,KAAM/E,IAMtDZ,KAAK2I,eAAiB,SAAU9G,EAAUjB,GACvCJ,EAAS,MAAOmF,EAAW,kBAAoB9D,EAAU,KAAMjB,IAMlEZ,KAAK4I,SAAW,SAAU5C,EAAKtF,EAAME,GAClCF,EAAOmI,UAAUnI,GACjBF,EAAS,MAAOmF,EAAW,aAAejF,EAAO,IAAMA,EAAO,KAC3DsF,IAAKA,GACLpF,IAMNZ,KAAK8I,KAAO,SAAUlI,GACnBJ,EAAS,OAAQmF,EAAW,SAAU,KAAM/E,IAM/CZ,KAAK+I,UAAY,SAAUnI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKsF,OAAS,SAAU0D,EAAWC,EAAWrI,GAClB,IAArBsI,UAAU1E,QAAwC,kBAAjB0E,WAAU,KAC5CtI,EAAKqI,EACLA,EAAYD,EACZA,EAAY,UAGfhJ,KAAK0F,OAAO,SAAWsD,EAAW,SAAUvG,EAAKuD,GAC9C,MAAIvD,IAAO7B,EACDA,EAAG6B,OAGbgD,GAAKS,WACFF,IAAK,cAAgBiD,EACrBzD,IAAKQ,GACLpF,MAOTZ,KAAKmJ,kBAAoB,SAAU9I,EAASO,GACzCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKoJ,UAAY,SAAUxI,GACxBJ,EAAS,MAAOmF,EAAW,SAAU,KAAM/E,IAM9CZ,KAAKqJ,QAAU,SAAUC,EAAI1I,GAC1BJ,EAAS,MAAOmF,EAAW,UAAY2D,EAAI,KAAM1I,IAMpDZ,KAAKuJ,WAAa,SAAUlJ,EAASO,GAClCJ,EAAS,OAAQmF,EAAW,SAAUtF,EAASO,IAMlDZ,KAAKwJ,SAAW,SAAUF,EAAIjJ,EAASO,GACpCJ,EAAS,QAASmF,EAAW,UAAY2D,EAAIjJ,EAASO,IAMzDZ,KAAKyJ,WAAa,SAAUH,EAAI1I,GAC7BJ,EAAS,SAAUmF,EAAW,UAAY2D,EAAI,KAAM1I,IAMvDZ,KAAK0J,KAAO,SAAUpE,EAAQ5E,EAAME,GACjCJ,EAAS,MAAOmF,EAAW,aAAekD,UAAUnI,IAAS4E,EAAS,QAAUA,EAAS,IACtF,KAAM1E,GAAI,IAMhBZ,KAAK2J,OAAS,SAAUrE,EAAQ5E,EAAME,GACnC6E,EAAKyB,OAAO5B,EAAQ5E,EAAM,SAAU+B,EAAK+C,GACtC,MAAI/C,GACM7B,EAAG6B,OAGbjC,GAAS,SAAUmF,EAAW,aAAejF,GAC1CuH,QAASvH,EAAO,cAChB8E,IAAKA,EACLF,OAAQA,GACR1E,MAMTZ,KAAAA,UAAcA,KAAK2J,OAKnB3J,KAAK4J,KAAO,SAAUtE,EAAQ5E,EAAMmJ,EAASjJ,GAC1CyE,EAAWC,EAAQ,SAAU7C,EAAKqH,GAC/BrE,EAAK4B,QAAQyC,EAAe,kBAAmB,SAAUrH,EAAK6E,GAE3DA,EAAKyC,QAAQ,SAAU/D,GAChBA,EAAItF,OAASA,IACdsF,EAAItF,KAAOmJ,GAGG,SAAb7D,EAAItC,YACEsC,GAAIR,MAIjBC,EAAKqC,SAASR,EAAM,SAAU7E,EAAKuH,GAChCvE,EAAKsC,OAAO+B,EAAcE,EAAU,WAAatJ,EAAM,SAAU+B,EAAKsF,GACnEtC,EAAK6C,WAAWhD,EAAQyC,EAAQnH,YAU/CZ,KAAKiK,MAAQ,SAAU3E,EAAQ5E,EAAM8G,EAASS,EAAS5H,EAASO,GACtC,kBAAZP,KACRO,EAAKP,EACLA,MAGHoF,EAAKyB,OAAO5B,EAAQuD,UAAUnI,GAAO,SAAU+B,EAAK+C,GACjD,GAAI0E,IACDjC,QAASA,EACTT,QAAmC,mBAAnBnH,GAAQF,QAA0BE,EAAQF,OAASF,EAAUuH,GAAWA,EACxFlC,OAAQA,EACR6E,UAAW9J,GAAWA,EAAQ8J,UAAY9J,EAAQ8J,UAAYC,OAC9DjC,OAAQ9H,GAAWA,EAAQ8H,OAAS9H,EAAQ8H,OAASiC,OAIlD3H,IAAqB,MAAdA,EAAIJ,QACd6H,EAAa1E,IAAMA,GAGtBhF,EAAS,MAAOmF,EAAW,aAAekD,UAAUnI,GAAOwJ,EAActJ,MAY/EZ,KAAKqK,WAAa,SAAUhK,EAASO,GAClCP,EAAUA,KACV,IAAIU,GAAM4E,EAAW,WACjBlC,IAcJ,IAZIpD,EAAQmF,KACT/B,EAAOZ,KAAK,OAASzB,mBAAmBf,EAAQmF,MAG/CnF,EAAQK,MACT+C,EAAOZ,KAAK,QAAUzB,mBAAmBf,EAAQK,OAGhDL,EAAQ8H,QACT1E,EAAOZ,KAAK,UAAYzB,mBAAmBf,EAAQ8H,SAGlD9H,EAAQ+D,MAAO,CAChB,GAAIA,GAAQ/D,EAAQ+D,KAEhBA,GAAMC,cAAgB9C,OACvB6C,EAAQA,EAAME,eAGjBb,EAAOZ,KAAK,SAAWzB,mBAAmBgD,IAG7C,GAAI/D,EAAQiK,MAAO,CAChB,GAAIA,GAAQjK,EAAQiK,KAEhBA,GAAMjG,cAAgB9C,OACvB+I,EAAQA,EAAMhG,eAGjBb,EAAOZ,KAAK,SAAWzB,mBAAmBkJ,IAGzCjK,EAAQwD,MACTJ,EAAOZ,KAAK,QAAUxC,EAAQwD,MAG7BxD,EAAQkK,SACT9G,EAAOZ,KAAK,YAAcxC,EAAQkK,SAGjC9G,EAAOe,OAAS,IACjBzD,GAAO,IAAM0C,EAAOK,KAAK,MAG5BtD,EAAS,MAAOO,EAAK,KAAMH,IAM9BZ,KAAKwK,UAAY,SAASC,EAAOC,EAAY9J,GAC1CJ,EAAS,MAAO,iBAAmBiK,EAAQ,IAAMC,EAAY,KAAM9J,IAMtEZ,KAAK2K,KAAO,SAASF,EAAOC,EAAY9J,GACrCJ,EAAS,MAAO,iBAAmBiK,EAAQ,IAAMC,EAAY,KAAM9J,IAMtEZ,KAAK4K,OAAS,SAASH,EAAOC,EAAY9J,GACvCJ,EAAS,SAAU,iBAAmBiK,EAAQ,IAAMC,EAAY,KAAM9J,IAMzEZ,KAAK6K,cAAgB,SAASxK,EAASO,GACpCJ,EAAS,OAAQmF,EAAW,YAAatF,EAASO,IAMrDZ,KAAK8K,YAAc,SAASxB,EAAIjJ,EAASO,GACtCJ,EAAS,QAASmF,EAAW,aAAe2D,EAAIjJ,EAASO,IAM5DZ,KAAK+K,WAAa,SAASzB,EAAI1I,GAC5BJ,EAAS,MAAOmF,EAAW,aAAe2D,EAAI,KAAM1I,IAMvDZ,KAAKgL,cAAgB,SAAS1B,EAAI1I,GAC/BJ,EAAS,SAAUmF,EAAW,aAAe2D,EAAI,KAAM1I,KAO7DlB,EAAOuL,KAAO,SAAU5K,GACrB,GAAIiJ,GAAKjJ,EAAQiJ,GACb4B,EAAW,UAAY5B,CAK3BtJ,MAAK0J,KAAO,SAAU9I,GACnBJ,EAAS,MAAO0K,EAAU,KAAMtK,IAenCZ,KAAKmL,OAAS,SAAU9K,EAASO,GAC9BJ,EAAS,OAAQ,SAAUH,EAASO,IAMvCZ,KAAAA,UAAc,SAAUY,GACrBJ,EAAS,SAAU0K,EAAU,KAAMtK,IAMtCZ,KAAK8I,KAAO,SAAUlI,GACnBJ,EAAS,OAAQ0K,EAAW,QAAS,KAAMtK,IAM9CZ,KAAKoL,OAAS,SAAU/K,EAASO,GAC9BJ,EAAS,QAAS0K,EAAU7K,EAASO,IAMxCZ,KAAK2K,KAAO,SAAU/J,GACnBJ,EAAS,MAAO0K,EAAW,QAAS,KAAMtK,IAM7CZ,KAAK4K,OAAS,SAAUhK,GACrBJ,EAAS,SAAU0K,EAAW,QAAS,KAAMtK,IAMhDZ,KAAKwK,UAAY,SAAU5J,GACxBJ,EAAS,MAAO0K,EAAW,QAAS,KAAMtK,KAOhDlB,EAAO2L,MAAQ,SAAUhL,GACtB,GAAIK,GAAO,UAAYL,EAAQyF,KAAO,IAAMzF,EAAQuF,KAAO,SAE3D5F,MAAKmL,OAAS,SAAS9K,EAASO,GAC7BJ,EAAS,OAAQE,EAAML,EAASO,IAGnCZ,KAAKsL,KAAO,SAAUjL,EAASO,GAC5B,GAAI2K,KAEJ,KAAI,GAAIC,KAAOnL,GACRA,EAAQc,eAAeqK,IACxBD,EAAM1I,KAAKzB,mBAAmBoK,GAAO,IAAMpK,mBAAmBf,EAAQmL,IAI5ElJ,GAAiB5B,EAAO,IAAM6K,EAAMzH,KAAK,KAAMlD,IAGlDZ,KAAKyL,QAAU,SAAUC,EAAOD,EAAS7K,GACtCJ,EAAS,OAAQkL,EAAMC,cACpBC,KAAMH,GACN7K,IAGNZ,KAAK6L,KAAO,SAAUH,EAAOrL,EAASO,GACnCJ,EAAS,QAASE,EAAO,IAAMgL,EAAOrL,EAASO,IAGlDZ,KAAK8L,IAAM,SAAUJ,EAAO9K,GACzBJ,EAAS,MAAOE,EAAO,IAAMgL,EAAO,KAAM9K,KAOhDlB,EAAOqM,OAAS,SAAU1L,GACvB,GAAIK,GAAO,WACP6K,EAAQ,MAAQlL,EAAQkL,KAE5BvL,MAAKgM,aAAe,SAAU3L,EAASO,GACpCJ,EAAS,MAAOE,EAAO,eAAiB6K,EAAOlL,EAASO,IAG3DZ,KAAKiM,KAAO,SAAU5L,EAASO,GAC5BJ,EAAS,MAAOE,EAAO,OAAS6K,EAAOlL,EAASO,IAGnDZ,KAAKkM,OAAS,SAAU7L,EAASO,GAC9BJ,EAAS,MAAOE,EAAO,SAAW6K,EAAOlL,EAASO,IAGrDZ,KAAKmM,MAAQ,SAAU9L,EAASO,GAC7BJ,EAAS,MAAOE,EAAO,QAAU6K,EAAOlL,EAASO,KAOvDlB,EAAO0M,UAAY,WAChBpM,KAAKqM,aAAe,SAASzL,GAC1BJ,EAAS,MAAO,cAAe,KAAMI,KAIpClB,EAkDV,OA5CAA,GAAO4M,UAAY,SAAUxG,EAAMF,GAChC,MAAO,IAAIlG,GAAO2L,OACfvF,KAAMA,EACNF,KAAMA,KAIZlG,EAAO6M,QAAU,SAAUzG,EAAMF,GAC9B,MAAKA,GAKK,GAAIlG,GAAO0F,YACfU,KAAMA,EACND,KAAMD,IANF,GAAIlG,GAAO0F,YACfW,SAAUD,KAUnBpG,EAAO8M,QAAU,WACd,MAAO,IAAI9M,GAAO6D,MAGrB7D,EAAO+M,OAAS,WACb,MAAO,IAAI/M,GAAOyF,cAGrBzF,EAAOgN,QAAU,SAAUpD,GACxB,MAAO,IAAI5J,GAAOuL,MACf3B,GAAIA,KAIV5J,EAAOiN,UAAY,SAAUpB,GAC1B,MAAO,IAAI7L,GAAOqM,QACfR,MAAOA,KAIb7L,EAAO2M,aAAe,WACnB,MAAO,IAAI3M,GAAO0M,WAGd1M","file":"github.min.js","sourcesContent":["/*!\r\n * @overview Github.js\r\n *\r\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\r\n * Github.js is freely distributable.\r\n *\r\n * @license Licensed under BSD-3-Clause-Clear\r\n *\r\n * For all details and documentation:\r\n * http://substance.io/michael/github\r\n */\r\n'use strict';\r\n\r\n(function (root, factory) {\r\n /* istanbul ignore next */\r\n if (typeof define === 'function' && define.amd) {\r\n define(\r\n [\r\n 'es6-promise',\r\n 'base-64',\r\n 'utf8',\r\n 'axios'\r\n ],\r\n function (Promise, Base64, Utf8, axios) {\r\n return (root.Github = factory(Promise, Base64, Utf8, axios));\r\n }\r\n );\r\n } else if (typeof module === 'object' && module.exports) {\r\n module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios'));\r\n } else {\r\n root.Github = factory(root.Promise, root.base64, root.utf8, root.axios);\r\n }\r\n}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line\r\n function b64encode(string) {\r\n return Base64.encode(Utf8.encode(string));\r\n }\r\n\r\n if (Promise.polyfill) {\r\n Promise.polyfill();\r\n }\r\n\r\n // Initial Setup\r\n // -------------\r\n\r\n var Github = function (options) {\r\n options = options || {};\r\n\r\n var API_URL = options.apiUrl || 'https://api.github.com';\r\n\r\n // HTTP Request Abstraction\r\n // =======\r\n //\r\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\r\n\r\n var _request = Github._request = function _request(method, path, data, cb, raw) {\r\n function getURL() {\r\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\r\n\r\n url += ((/\\?/).test(url) ? '&' : '?');\r\n\r\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\r\n for(var param in data) {\r\n if (data.hasOwnProperty(param)) {\r\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\r\n }\r\n }\r\n }\r\n\r\n return url.replace(/(×tamp=\\d+)/, '') +\r\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\r\n }\r\n\r\n var config = {\r\n headers: {\r\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\r\n 'Content-Type': 'application/json;charset=UTF-8'\r\n },\r\n method: method,\r\n data: data ? data : {},\r\n url: getURL()\r\n };\r\n\r\n if ((options.token) || (options.username && options.password)) {\r\n config.headers.Authorization = options.token ?\r\n 'token ' + options.token :\r\n 'Basic ' + b64encode(options.username + ':' + options.password);\r\n }\r\n\r\n return axios(config)\r\n .then(function (response) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n }, function (response) {\r\n if (response.status === 304) {\r\n cb(\r\n null,\r\n response.data || true,\r\n response.request\r\n );\r\n } else {\r\n cb({\r\n path: path,\r\n request: response.request,\r\n error: response.status\r\n });\r\n }\r\n });\r\n };\r\n\r\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) {\r\n var results = [];\r\n\r\n (function iterate() {\r\n _request('GET', path, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (!(res instanceof Array)) {\r\n res = [res];\r\n }\r\n\r\n results.push.apply(results, res);\r\n\r\n var next = (xhr.getResponseHeader('link') || '')\r\n .split(',')\r\n .filter(function(link) {\r\n return /rel=\"next\"/.test(link);\r\n })\r\n .map(function(link) {\r\n return (/<(.*)>/.exec(link) || [])[1];\r\n })\r\n .pop();\r\n\r\n if (!next) {\r\n cb(err, results, xhr);\r\n } else {\r\n path = next;\r\n iterate();\r\n }\r\n });\r\n })();\r\n };\r\n\r\n // User API\r\n // =======\r\n\r\n Github.User = function () {\r\n this.repos = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n\r\n var url = '/user/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user organizations\r\n // -------\r\n\r\n this.orgs = function (cb) {\r\n _request('GET', '/user/orgs', null, cb);\r\n };\r\n\r\n // List authenticated user's gists\r\n // -------\r\n\r\n this.gists = function (cb) {\r\n _request('GET', '/gists', null, cb);\r\n };\r\n\r\n // List authenticated user's unread notifications\r\n // -------\r\n\r\n this.notifications = function (options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n options = options || {};\r\n var url = '/notifications';\r\n var params = [];\r\n\r\n if (options.all) {\r\n params.push('all=true');\r\n }\r\n\r\n if (options.participating) {\r\n params.push('participating=true');\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.before) {\r\n var before = options.before;\r\n\r\n if (before.constructor === Date) {\r\n before = before.toISOString();\r\n }\r\n\r\n params.push('before=' + encodeURIComponent(before));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Show user information\r\n // -------\r\n\r\n this.show = function (username, cb) {\r\n var command = username ? '/users/' + username : '/user';\r\n\r\n _request('GET', command, null, cb);\r\n };\r\n\r\n // List user repositories\r\n // -------\r\n\r\n this.userRepos = function (username, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n var url = '/users/' + username + '/repos';\r\n var params = [];\r\n\r\n params.push('type=' + encodeURIComponent(options.type || 'all'));\r\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\r\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\r\n\r\n if (options.page) {\r\n params.push('page=' + encodeURIComponent(options.page));\r\n }\r\n\r\n url += '?' + params.join('&');\r\n\r\n _requestAllPages(url, cb);\r\n };\r\n\r\n // List user starred repositories\r\n // -------\r\n\r\n this.userStarred = function (username, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb);\r\n };\r\n\r\n // List a user's gists\r\n // -------\r\n\r\n this.userGists = function (username, cb) {\r\n _request('GET', '/users/' + username + '/gists', null, cb);\r\n };\r\n\r\n // List organization repositories\r\n // -------\r\n\r\n this.orgRepos = function (orgname, cb) {\r\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\r\n _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb);\r\n };\r\n\r\n // Follow user\r\n // -------\r\n\r\n this.follow = function (username, cb) {\r\n _request('PUT', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Unfollow user\r\n // -------\r\n\r\n this.unfollow = function (username, cb) {\r\n _request('DELETE', '/user/following/' + username, null, cb);\r\n };\r\n\r\n // Create a repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/user/repos', options, cb);\r\n };\r\n };\r\n\r\n Github.Organization = function () {\r\n // Create an Organization repo\r\n // -------\r\n this.createRepo = function (options, cb) {\r\n _request('POST', '/orgs/' + options.orgname + '/repos', options, cb);\r\n };\r\n };\r\n\r\n // Repository API\r\n // =======\r\n\r\n Github.Repository = function (options) {\r\n var repo = options.name;\r\n var user = options.user;\r\n var fullname = options.fullname;\r\n\r\n var that = this;\r\n var repoPath;\r\n\r\n if (fullname) {\r\n repoPath = '/repos/' + fullname;\r\n } else {\r\n repoPath = '/repos/' + user + '/' + repo;\r\n }\r\n\r\n var currentTree = {\r\n branch: null,\r\n sha: null\r\n };\r\n\r\n // Uses the cache if branch has not been changed\r\n // -------\r\n\r\n function updateTree(branch, cb) {\r\n if (branch === currentTree.branch && currentTree.sha) {\r\n return cb(null, currentTree.sha);\r\n }\r\n\r\n that.getRef('heads/' + branch, function (err, sha) {\r\n currentTree.branch = branch;\r\n currentTree.sha = sha;\r\n cb(err, sha);\r\n });\r\n }\r\n\r\n // Get a particular reference\r\n // -------\r\n\r\n this.getRef = function (ref, cb) {\r\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.object.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new reference\r\n // --------\r\n //\r\n // {\r\n // \"ref\": \"refs/heads/my-new-branch-name\",\r\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\r\n // }\r\n\r\n this.createRef = function (options, cb) {\r\n _request('POST', repoPath + '/git/refs', options, cb);\r\n };\r\n\r\n // Delete a reference\r\n // --------\r\n //\r\n // Repo.deleteRef('heads/gh-pages')\r\n // repo.deleteRef('tags/v1.0')\r\n\r\n this.deleteRef = function (ref, cb) {\r\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\r\n };\r\n\r\n // Delete a repo\r\n // --------\r\n\r\n this.deleteRepo = function (cb) {\r\n _request('DELETE', repoPath, options, cb);\r\n };\r\n\r\n // List all tags of a repository\r\n // -------\r\n\r\n this.listTags = function (cb) {\r\n _request('GET', repoPath + '/tags', null, cb);\r\n };\r\n\r\n // List all pull requests of a respository\r\n // -------\r\n\r\n this.listPulls = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/pulls';\r\n var params = [];\r\n\r\n if (typeof options === 'string') {\r\n // Backward compatibility\r\n params.push('state=' + options);\r\n } else {\r\n if (options.state) {\r\n params.push('state=' + encodeURIComponent(options.state));\r\n }\r\n\r\n if (options.head) {\r\n params.push('head=' + encodeURIComponent(options.head));\r\n }\r\n\r\n if (options.base) {\r\n params.push('base=' + encodeURIComponent(options.base));\r\n }\r\n\r\n if (options.sort) {\r\n params.push('sort=' + encodeURIComponent(options.sort));\r\n }\r\n\r\n if (options.direction) {\r\n params.push('direction=' + encodeURIComponent(options.direction));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.per_page) {\r\n params.push('per_page=' + options.per_page);\r\n }\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Gets details for a specific pull request\r\n // -------\r\n\r\n this.getPull = function (number, cb) {\r\n _request('GET', repoPath + '/pulls/' + number, null, cb);\r\n };\r\n\r\n // Retrieve the changes made between base and head\r\n // -------\r\n\r\n this.compare = function (base, head, cb) {\r\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\r\n };\r\n\r\n // List all branches of a repository\r\n // -------\r\n\r\n this.listBranches = function (cb) {\r\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n heads = heads.map(function (head) {\r\n return head.ref.replace(/^refs\\/heads\\//, '');\r\n });\r\n\r\n cb(null, heads, xhr);\r\n });\r\n };\r\n\r\n // Retrieve the contents of a blob\r\n // -------\r\n\r\n this.getBlob = function (sha, cb) {\r\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getCommit = function (branch, sha, cb) {\r\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\r\n };\r\n\r\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\r\n // -------\r\n\r\n this.getSha = function (branch, path, cb) {\r\n if (!path || path === '') {\r\n return that.getRef('heads/' + branch, cb);\r\n }\r\n\r\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\r\n null, function (err, pathContent, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, pathContent.sha, xhr);\r\n });\r\n };\r\n\r\n // Get the statuses for a particular SHA\r\n // -------\r\n\r\n this.getStatuses = function (sha, cb) {\r\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\r\n };\r\n\r\n // Retrieve the tree a commit points to\r\n // -------\r\n\r\n this.getTree = function (tree, cb) {\r\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.tree, xhr);\r\n });\r\n };\r\n\r\n // Post a new blob object, getting a blob SHA back\r\n // -------\r\n\r\n this.postBlob = function (content, cb) {\r\n if (typeof content === 'string') {\r\n content = {\r\n content: content,\r\n encoding: 'utf-8'\r\n };\r\n } else {\r\n content = {\r\n content: b64encode(content),\r\n encoding: 'base64'\r\n };\r\n }\r\n\r\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Update an existing tree adding a new blob object getting a tree SHA back\r\n // -------\r\n\r\n this.updateTree = function (baseTree, path, blob, cb) {\r\n var data = {\r\n base_tree: baseTree,\r\n tree: [\r\n {\r\n path: path,\r\n mode: '100644',\r\n type: 'blob',\r\n sha: blob\r\n }\r\n ]\r\n };\r\n\r\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Post a new tree object having a file path pointer replaced\r\n // with a new blob SHA getting a tree SHA back\r\n // -------\r\n\r\n this.postTree = function (tree, cb) {\r\n _request('POST', repoPath + '/git/trees', {\r\n tree: tree\r\n }, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n };\r\n\r\n // Create a new commit object with the current commit SHA as the parent\r\n // and the new tree SHA, getting a commit SHA back\r\n // -------\r\n\r\n this.commit = function (parent, tree, message, cb) {\r\n var user = new Github.User();\r\n\r\n user.show(null, function (err, userData) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n var data = {\r\n message: message,\r\n author: {\r\n name: options.user,\r\n email: userData.email\r\n },\r\n parents: [\r\n parent\r\n ],\r\n tree: tree\r\n };\r\n\r\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n currentTree.sha = res.sha; // Update latest commit\r\n\r\n cb(null, res.sha, xhr);\r\n });\r\n });\r\n };\r\n\r\n // Update the reference of your head to point to the new commit SHA\r\n // -------\r\n\r\n this.updateHead = function (head, commit, cb) {\r\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\r\n sha: commit\r\n }, cb);\r\n };\r\n\r\n // Show repository information\r\n // -------\r\n\r\n this.show = function (cb) {\r\n _request('GET', repoPath, null, cb);\r\n };\r\n\r\n // Show repository contributors\r\n // -------\r\n\r\n this.contributors = function (cb, retry) {\r\n retry = retry || 1000;\r\n var that = this;\r\n\r\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n if (xhr.status === 202) {\r\n setTimeout(\r\n function () {\r\n that.contributors(cb, retry);\r\n },\r\n retry\r\n );\r\n } else {\r\n cb(err, data, xhr);\r\n }\r\n });\r\n };\r\n\r\n // Show repository collaborators\r\n // -------\r\n\r\n this.collaborators = function (cb) {\r\n _request('GET', repoPath + '/collaborators', null, cb);\r\n };\r\n\r\n // Check whether user is a collaborator on the repository\r\n // -------\r\n\r\n this.isCollaborator = function (username, cb) {\r\n _request('GET', repoPath + '/collaborators/' + username, null, cb);\r\n };\r\n\r\n // Get contents\r\n // --------\r\n\r\n this.contents = function (ref, path, cb) {\r\n path = encodeURI(path);\r\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\r\n ref: ref\r\n }, cb);\r\n };\r\n\r\n // Fork repository\r\n // -------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // List forks\r\n // --------\r\n\r\n this.listForks = function (cb) {\r\n _request('GET', repoPath + '/forks', null, cb);\r\n };\r\n\r\n // Branch repository\r\n // --------\r\n\r\n this.branch = function (oldBranch, newBranch, cb) {\r\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\r\n cb = newBranch;\r\n newBranch = oldBranch;\r\n oldBranch = 'master';\r\n }\r\n\r\n this.getRef('heads/' + oldBranch, function (err, ref) {\r\n if (err && cb) {\r\n return cb(err);\r\n }\r\n\r\n that.createRef({\r\n ref: 'refs/heads/' + newBranch,\r\n sha: ref\r\n }, cb);\r\n });\r\n };\r\n\r\n // Create pull request\r\n // --------\r\n\r\n this.createPullRequest = function (options, cb) {\r\n _request('POST', repoPath + '/pulls', options, cb);\r\n };\r\n\r\n // List hooks\r\n // --------\r\n\r\n this.listHooks = function (cb) {\r\n _request('GET', repoPath + '/hooks', null, cb);\r\n };\r\n\r\n // Get a hook\r\n // --------\r\n\r\n this.getHook = function (id, cb) {\r\n _request('GET', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Create a hook\r\n // --------\r\n\r\n this.createHook = function (options, cb) {\r\n _request('POST', repoPath + '/hooks', options, cb);\r\n };\r\n\r\n // Edit a hook\r\n // --------\r\n\r\n this.editHook = function (id, options, cb) {\r\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\r\n };\r\n\r\n // Delete a hook\r\n // --------\r\n\r\n this.deleteHook = function (id, cb) {\r\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\r\n };\r\n\r\n // Read file at given path\r\n // -------\r\n\r\n this.read = function (branch, path, cb) {\r\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\r\n null, cb, true);\r\n };\r\n\r\n // Remove a file\r\n // -------\r\n\r\n this.remove = function (branch, path, cb) {\r\n that.getSha(branch, path, function (err, sha) {\r\n if (err) {\r\n return cb(err);\r\n }\r\n\r\n _request('DELETE', repoPath + '/contents/' + path, {\r\n message: path + ' is removed',\r\n sha: sha,\r\n branch: branch\r\n }, cb);\r\n });\r\n };\r\n\r\n // Alias for repo.remove for backwards comapt.\r\n // -------\r\n this.delete = this.remove;\r\n\r\n // Move a file to a new location\r\n // -------\r\n\r\n this.move = function (branch, path, newPath, cb) {\r\n updateTree(branch, function (err, latestCommit) {\r\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\r\n // Update Tree\r\n tree.forEach(function (ref) {\r\n if (ref.path === path) {\r\n ref.path = newPath;\r\n }\r\n\r\n if (ref.type === 'tree') {\r\n delete ref.sha;\r\n }\r\n });\r\n\r\n that.postTree(tree, function (err, rootTree) {\r\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\r\n that.updateHead(branch, commit, cb);\r\n });\r\n });\r\n });\r\n });\r\n };\r\n\r\n // Write file contents to a given branch and path\r\n // -------\r\n\r\n this.write = function (branch, path, content, message, options, cb) {\r\n if (typeof options === 'function') {\r\n cb = options;\r\n options = {};\r\n }\r\n\r\n that.getSha(branch, encodeURI(path), function (err, sha) {\r\n var writeOptions = {\r\n message: message,\r\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\r\n branch: branch,\r\n committer: options && options.committer ? options.committer : undefined,\r\n author: options && options.author ? options.author : undefined\r\n };\r\n\r\n // If no error, we set the sha to overwrite an existing file\r\n if (!(err && err.error !== 404)) {\r\n writeOptions.sha = sha;\r\n }\r\n\r\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\r\n });\r\n };\r\n\r\n // List commits on a repository. Takes an object of optional parameters:\r\n // sha: SHA or branch to start listing commits from\r\n // path: Only commits containing this file path will be returned\r\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\r\n // since: ISO 8601 date - only commits after this date will be returned\r\n // until: ISO 8601 date - only commits before this date will be returned\r\n // -------\r\n\r\n this.getCommits = function (options, cb) {\r\n options = options || {};\r\n var url = repoPath + '/commits';\r\n var params = [];\r\n\r\n if (options.sha) {\r\n params.push('sha=' + encodeURIComponent(options.sha));\r\n }\r\n\r\n if (options.path) {\r\n params.push('path=' + encodeURIComponent(options.path));\r\n }\r\n\r\n if (options.author) {\r\n params.push('author=' + encodeURIComponent(options.author));\r\n }\r\n\r\n if (options.since) {\r\n var since = options.since;\r\n\r\n if (since.constructor === Date) {\r\n since = since.toISOString();\r\n }\r\n\r\n params.push('since=' + encodeURIComponent(since));\r\n }\r\n\r\n if (options.until) {\r\n var until = options.until;\r\n\r\n if (until.constructor === Date) {\r\n until = until.toISOString();\r\n }\r\n\r\n params.push('until=' + encodeURIComponent(until));\r\n }\r\n\r\n if (options.page) {\r\n params.push('page=' + options.page);\r\n }\r\n\r\n if (options.perpage) {\r\n params.push('per_page=' + options.perpage);\r\n }\r\n\r\n if (params.length > 0) {\r\n url += '?' + params.join('&');\r\n }\r\n\r\n _request('GET', url, null, cb);\r\n };\r\n\r\n // Check if a repository is starred.\r\n // --------\r\n\r\n this.isStarred = function(owner, repository, cb) {\r\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Star a repository.\r\n // --------\r\n\r\n this.star = function(owner, repository, cb) {\r\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Unstar a repository.\r\n // --------\r\n\r\n this.unstar = function(owner, repository, cb) {\r\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\r\n };\r\n\r\n // Create a new release\r\n // --------\r\n\r\n this.createRelease = function(options, cb) {\r\n _request('POST', repoPath + '/releases', options, cb);\r\n };\r\n\r\n // Edit a release\r\n // --------\r\n\r\n this.editRelease = function(id, options, cb) {\r\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\r\n };\r\n\r\n // Get a single release\r\n // --------\r\n\r\n this.getRelease = function(id, cb) {\r\n _request('GET', repoPath + '/releases/' + id, null, cb);\r\n };\r\n\r\n // Remove a release\r\n // --------\r\n\r\n this.deleteRelease = function(id, cb) {\r\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\r\n };\r\n };\r\n\r\n // Gists API\r\n // =======\r\n\r\n Github.Gist = function (options) {\r\n var id = options.id;\r\n var gistPath = '/gists/' + id;\r\n\r\n // Read the gist\r\n // --------\r\n\r\n this.read = function (cb) {\r\n _request('GET', gistPath, null, cb);\r\n };\r\n\r\n // Create the gist\r\n // --------\r\n // {\r\n // \"description\": \"the description for this gist\",\r\n // \"public\": true,\r\n // \"files\": {\r\n // \"file1.txt\": {\r\n // \"content\": \"String file contents\"\r\n // }\r\n // }\r\n // }\r\n\r\n this.create = function (options, cb) {\r\n _request('POST', '/gists', options, cb);\r\n };\r\n\r\n // Delete the gist\r\n // --------\r\n\r\n this.delete = function (cb) {\r\n _request('DELETE', gistPath, null, cb);\r\n };\r\n\r\n // Fork a gist\r\n // --------\r\n\r\n this.fork = function (cb) {\r\n _request('POST', gistPath + '/fork', null, cb);\r\n };\r\n\r\n // Update a gist with the new stuff\r\n // --------\r\n\r\n this.update = function (options, cb) {\r\n _request('PATCH', gistPath, options, cb);\r\n };\r\n\r\n // Star a gist\r\n // --------\r\n\r\n this.star = function (cb) {\r\n _request('PUT', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Untar a gist\r\n // --------\r\n\r\n this.unstar = function (cb) {\r\n _request('DELETE', gistPath + '/star', null, cb);\r\n };\r\n\r\n // Check if a gist is starred\r\n // --------\r\n\r\n this.isStarred = function (cb) {\r\n _request('GET', gistPath + '/star', null, cb);\r\n };\r\n };\r\n\r\n // Issues API\r\n // ==========\r\n\r\n Github.Issue = function (options) {\r\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\r\n\r\n this.create = function(options, cb) {\r\n _request('POST', path, options, cb);\r\n };\r\n\r\n this.list = function (options, cb) {\r\n var query = [];\r\n\r\n for(var key in options) {\r\n if (options.hasOwnProperty(key)) {\r\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key]));\r\n }\r\n }\r\n\r\n _requestAllPages(path + '?' + query.join('&'), cb);\r\n };\r\n\r\n this.comment = function (issue, comment, cb) {\r\n _request('POST', issue.comments_url, {\r\n body: comment\r\n }, cb);\r\n };\r\n\r\n this.edit = function (issue, options, cb) {\r\n _request('PATCH', path + '/' + issue, options, cb);\r\n };\r\n\r\n this.get = function (issue, cb) {\r\n _request('GET', path + '/' + issue, null, cb);\r\n };\r\n };\r\n\r\n // Search API\r\n // ==========\r\n\r\n Github.Search = function (options) {\r\n var path = '/search/';\r\n var query = '?q=' + options.query;\r\n\r\n this.repositories = function (options, cb) {\r\n _request('GET', path + 'repositories' + query, options, cb);\r\n };\r\n\r\n this.code = function (options, cb) {\r\n _request('GET', path + 'code' + query, options, cb);\r\n };\r\n\r\n this.issues = function (options, cb) {\r\n _request('GET', path + 'issues' + query, options, cb);\r\n };\r\n\r\n this.users = function (options, cb) {\r\n _request('GET', path + 'users' + query, options, cb);\r\n };\r\n };\r\n\r\n // Rate Limit API\r\n // ==========\r\n\r\n Github.RateLimit = function() {\r\n this.getRateLimit = function(cb) {\r\n _request('GET', '/rate_limit', null, cb);\r\n };\r\n };\r\n\r\n return Github;\r\n };\r\n\r\n // Top Level API\r\n // -------\r\n\r\n Github.getIssues = function (user, repo) {\r\n return new Github.Issue({\r\n user: user,\r\n repo: repo\r\n });\r\n };\r\n\r\n Github.getRepo = function (user, repo) {\r\n if (!repo) {\r\n return new Github.Repository({\r\n fullname: user\r\n });\r\n } else {\r\n return new Github.Repository({\r\n user: user,\r\n name: repo\r\n });\r\n }\r\n };\r\n\r\n Github.getUser = function () {\r\n return new Github.User();\r\n };\r\n\r\n Github.getOrg = function () {\r\n return new Github.Organization();\r\n };\r\n\r\n Github.getGist = function (id) {\r\n return new Github.Gist({\r\n id: id\r\n });\r\n };\r\n\r\n Github.getSearch = function (query) {\r\n return new Github.Search({\r\n query: query\r\n });\r\n };\r\n\r\n Github.getRateLimit = function() {\r\n return new Github.RateLimit();\r\n };\r\n\r\n return Github;\r\n}));\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index cd693819..4da37a2b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -13,6 +13,7 @@ var del = require('del'); var stylish = require('gulp-jscs-stylish'); var path = require('path'); var karma = require('karma'); +var babel = require('gulp-babel'); function runTests(singleRun, isCI, done) { var reporters = ['mocha']; @@ -107,34 +108,47 @@ gulp.task('clean', function () { }); gulp.task('build', function() { - var browserifyInstance = browserify({ + var bundler = browserify({ debug: true, entries: 'src/github.js', standalone: 'Github' }); - browserifyInstance + bundler + .transform('babelify') .bundle() .pipe(source('github.js')) .pipe(buffer()) .pipe(sourcemaps.init({ loadMaps: true })) - .pipe(uglify()) + .pipe(uglify()) .pipe(rename({ extname: '.bundle.min.js' })) .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')); + .pipe(gulp.dest('dist')) + ; + + var babeled = gulp.src('src/github.js') + .pipe(babel()) + ; + + babeled + .pipe(sourcemaps.init()) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist')) + ; - return gulp.src('src/github.js') + return babeled .pipe(sourcemaps.init()) .pipe(rename({ extname: '.min.js' })) .pipe(uglify()) .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')); + .pipe(gulp.dest('dist')) + ; }); gulp.task('default', ['clean'], function() { diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 17cec5a6..00000000 --- a/karma.conf.js +++ /dev/null @@ -1,75 +0,0 @@ -module.exports = function (config) { - 'use strict'; - - var configuration = { - browserNoActivityTimeout: 30000, - - client: { - captureConsole: true, - mocha: { - timeout: 30000, - ui: 'bdd' - } - }, - - concurrency: 2, - - singleRun: true, - - autoWatch: false, - - frameworks: [ - 'browserify', - 'mocha', - 'chai' - ], - - browsers: ['PhantomJS'], - - browserify: { - debug: true, - transform: ['browserify-istanbul'] - }, - - phantomjsLauncher: { - debug: true, - options: { - settings: { - webSecurityEnabled: false - } - } - }, - - coverageReporter: { - reporters: [ - { - type: 'lcov' - }, - { - type: 'text-summary' - } - ], - instrumenterOptions: { - istanbul: { - noCompact: true - } - } - } - }; - - // This block is needed to execute Chrome on Travis - // If you ever plan to use Chrome and Travis, you can keep it - // If not, you can safely remove it - // https://github.com/karma-runner/karma/issues/1144#issuecomment-53633076 - if (configuration.browsers[0] === 'Chrome' && process.env.TRAVIS) { - configuration.customLaunchers = { - 'chrome-travis-ci': { - base: 'Chrome', - flags: ['--no-sandbox'] - } - }; - configuration.browsers = ['chrome-travis-ci']; - } - - config.set(configuration); -}; diff --git a/package.json b/package.json index 15501508..f5fdb956 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,16 @@ "utf8": "^2.1.1" }, "devDependencies": { + "babel-plugin-transform-es2015-modules-umd": "^6.5.0", + "babel-preset-es2015": "^6.5.0", + "babelify": "^7.2.0", "browserify": "^13.0.0", "browserify-istanbul": "^0.2.1", "chai": "^3.4.1", "codecov": "^1.0.1", "del": "^2.2.0", "gulp": "^3.9.0", + "gulp-babel": "^6.1.2", "gulp-jscs": "^3.0.2", "gulp-jscs-stylish": "^1.3.0", "gulp-jshint": "^2.0.0", diff --git a/src/github.js b/src/github.js index 6fdd370e..d8d57f26 100644 --- a/src/github.js +++ b/src/github.js @@ -11,1166 +11,1154 @@ */ 'use strict'; -(function (root, factory) { - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define( - [ - 'es6-promise', - 'base-64', - 'utf8', - 'axios' - ], - function (Promise, Base64, Utf8, axios) { - return (root.Github = factory(Promise, Base64, Utf8, axios)); - } - ); - } else if (typeof module === 'object' && module.exports) { - module.exports = factory(require('es6-promise'), require('base-64'), require('utf8'), require('axios')); - } else { - root.Github = factory(root.Promise, root.base64, root.utf8, root.axios); - } -}(this, function(Promise, Base64, Utf8, axios) { // jshint ignore:line - function b64encode(string) { - return Base64.encode(Utf8.encode(string)); - } +var Utf8 = require('utf8'); +var axios = require('axios'); +var Base64 = require('base-64'); +var Promise = require('es6-promise'); - if (Promise.polyfill) { - Promise.polyfill(); - } +function b64encode(string) { + return Base64.encode(Utf8.encode(string)); +} - // Initial Setup - // ------------- +if (Promise.polyfill) { + Promise.polyfill(); +} - var Github = function (options) { - options = options || {}; +// Initial Setup +// ------------- - var API_URL = options.apiUrl || 'https://api.github.com'; +function Github(options) { + options = options || {}; - // HTTP Request Abstraction - // ======= - // - // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec. + var API_URL = options.apiUrl || 'https://api.github.com'; - var _request = Github._request = function _request(method, path, data, cb, raw) { - function getURL() { - var url = path.indexOf('//') >= 0 ? path : API_URL + path; + var _request = Github._request = function _request(method, path, data, cb, raw) { + function getURL() { + var url = path.indexOf('//') >= 0 ? path : API_URL + path; - url += ((/\?/).test(url) ? '&' : '?'); + url += ((/\?/).test(url) ? '&' : '?'); - if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { - for(var param in data) { - if (data.hasOwnProperty(param)) { - url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); - } + if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { + for(var param in data) { + if (data.hasOwnProperty(param)) { + url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); } } - - return url.replace(/(×tamp=\d+)/, '') + - (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); } - var config = { - headers: { - Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - method: method, - data: data ? data : {}, - url: getURL() - }; + return url.replace(/(×tamp=\d+)/, '') + + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); + } - if ((options.token) || (options.username && options.password)) { - config.headers.Authorization = options.token ? - 'token ' + options.token : - 'Basic ' + b64encode(options.username + ':' + options.password); - } + var config = { + headers: { + Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', + 'Content-Type': 'application/json;charset=UTF-8' + }, + method: method, + data: data ? data : {}, + url: getURL() + }; + + if ((options.token) || (options.username && options.password)) { + config.headers.Authorization = options.token ? + 'token ' + options.token : + 'Basic ' + b64encode(options.username + ':' + options.password); + } - return axios(config) - .then(function (response) { + return axios(config) + .then(function(response) { + cb( + null, + response.data || true, + response + ); + }, function(response) { + if (response.status === 304) { cb( null, response.data || true, response.request ); - }, function (response) { - if (response.status === 304) { - cb( - null, - response.data || true, - response.request - ); - } else { - cb({ - path: path, - request: response.request, - error: response.status - }); - } - }); - }; + } else { + cb({ + path: path, + request: response, + error: response.status + }); + } + }); + }; - var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, cb) { - var results = []; + var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) { + var results = []; - (function iterate() { - _request('GET', path, null, function (err, res, xhr) { - if (err) { - return cb(err); - } + (function iterate() { + _request('GET', path, null, function(err, res, xhr) { + if (err) { + return cb(err); + } - if (!(res instanceof Array)) { - res = [res]; - } + if (!(res instanceof Array)) { + res = [res]; + } - results.push.apply(results, res); - - var next = (xhr.getResponseHeader('link') || '') - .split(',') - .filter(function(link) { - return /rel="next"/.test(link); - }) - .map(function(link) { - return (/<(.*)>/.exec(link) || [])[1]; - }) - .pop(); - - if (!next) { - cb(err, results, xhr); - } else { - path = next; - iterate(); - } - }); - })(); - }; + results.push.apply(results, res); - // User API - // ======= + var next = (xhr.headers.link || '') + .split(',') + .filter(function(link) { + return /rel="next"/.test(link); + }) + .map(function(link) { + return (/<(.*)>/.exec(link) || [])[1]; + }) + .pop(); - Github.User = function () { - this.repos = function (options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; + if (!next || singlePage) { + cb(err, results, xhr); + } else { + path = next; + iterate(); } + }); + })(); + }; - options = options || {}; + // User API + // ======= - var url = '/user/repos'; - var params = []; + Github.User = function() { + this.repos = function(options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } - params.push('type=' + encodeURIComponent(options.type || 'all')); - params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore + options = options || {}; - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } + var url = '/user/repos'; + var params = []; - url += '?' + params.join('&'); + params.push('type=' + encodeURIComponent(options.type || 'all')); + params.push('sort=' + encodeURIComponent(options.sort || 'updated')); + params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore - _requestAllPages(url, cb); - }; + if (options.page) { + params.push('page=' + encodeURIComponent(options.page)); + } - // List user organizations - // ------- + url += '?' + params.join('&'); - this.orgs = function (cb) { - _request('GET', '/user/orgs', null, cb); - }; + _requestAllPages(url, !!options.page, cb); + }; - // List authenticated user's gists - // ------- + // List user organizations + // ------- - this.gists = function (cb) { - _request('GET', '/gists', null, cb); - }; + this.orgs = function(cb) { + _request('GET', '/user/orgs', null, cb); + }; - // List authenticated user's unread notifications - // ------- + // List authenticated user's gists + // ------- - this.notifications = function (options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } + this.gists = function(cb) { + _request('GET', '/gists', null, cb); + }; - options = options || {}; - var url = '/notifications'; - var params = []; + // List authenticated user's unread notifications + // ------- - if (options.all) { - params.push('all=true'); - } + this.notifications = function(options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } - if (options.participating) { - params.push('participating=true'); - } + options = options || {}; + var url = '/notifications'; + var params = []; + + if (options.all) { + params.push('all=true'); + } - if (options.since) { - var since = options.since; + if (options.participating) { + params.push('participating=true'); + } - if (since.constructor === Date) { - since = since.toISOString(); - } + if (options.since) { + var since = options.since; - params.push('since=' + encodeURIComponent(since)); + if (since.constructor === Date) { + since = since.toISOString(); } - if (options.before) { - var before = options.before; + params.push('since=' + encodeURIComponent(since)); + } - if (before.constructor === Date) { - before = before.toISOString(); - } + if (options.before) { + var before = options.before; - params.push('before=' + encodeURIComponent(before)); + if (before.constructor === Date) { + before = before.toISOString(); } - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } + params.push('before=' + encodeURIComponent(before)); + } - if (params.length > 0) { - url += '?' + params.join('&'); - } + if (options.page) { + params.push('page=' + encodeURIComponent(options.page)); + } - _request('GET', url, null, cb); - }; + if (params.length > 0) { + url += '?' + params.join('&'); + } - // Show user information - // ------- + _request('GET', url, null, cb); + }; - this.show = function (username, cb) { - var command = username ? '/users/' + username : '/user'; + // Show user information + // ------- - _request('GET', command, null, cb); - }; + this.show = function(username, cb) { + var command = username ? '/users/' + username : '/user'; - // List user repositories - // ------- + _request('GET', command, null, cb); + }; - this.userRepos = function (username, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } + // List user repositories + // ------- - var url = '/users/' + username + '/repos'; - var params = []; + this.userRepos = function(username, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } - params.push('type=' + encodeURIComponent(options.type || 'all')); - params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore + var url = '/users/' + username + '/repos'; + var params = []; - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } + params.push('type=' + encodeURIComponent(options.type || 'all')); + params.push('sort=' + encodeURIComponent(options.sort || 'updated')); + params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore - url += '?' + params.join('&'); + if (options.page) { + params.push('page=' + encodeURIComponent(options.page)); + } - _requestAllPages(url, cb); - }; + url += '?' + params.join('&'); - // List user starred repositories - // ------- + _requestAllPages(url, !!options.page, cb); + }; - this.userStarred = function (username, cb) { - // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/users/' + username + '/starred?type=all&per_page=100', cb); - }; + // List user starred repositories + // ------- - // List a user's gists - // ------- + this.userStarred = function(username, cb) { + // Github does not always honor the 1000 limit so we want to iterate over the data set. + var request = '/users/' + username + '/starred?type=all&per_page=100'; - this.userGists = function (username, cb) { - _request('GET', '/users/' + username + '/gists', null, cb); - }; + _requestAllPages(request, false, cb); + }; - // List organization repositories - // ------- + // List a user's gists + // ------- - this.orgRepos = function (orgname, cb) { - // Github does not always honor the 1000 limit so we want to iterate over the data set. - _requestAllPages('/orgs/' + orgname + '/repos?type=all&&page_num=1000&sort=updated&direction=desc', cb); - }; + this.userGists = function(username, cb) { + _request('GET', '/users/' + username + '/gists', null, cb); + }; - // Follow user - // ------- + // List organization repositories + // ------- - this.follow = function (username, cb) { - _request('PUT', '/user/following/' + username, null, cb); - }; + this.orgRepos = function(orgname, cb) { + // Github does not always honor the 1000 limit so we want to iterate over the data set. + var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc'; - // Unfollow user - // ------- + _requestAllPages(request, false, cb); + }; - this.unfollow = function (username, cb) { - _request('DELETE', '/user/following/' + username, null, cb); - }; + this.follow = function(username, cb) { + _request('PUT', '/user/following/' + username, null, cb); + }; - // Create a repo - // ------- - this.createRepo = function (options, cb) { - _request('POST', '/user/repos', options, cb); - }; + // Unfollow user + // ------- + + this.unfollow = function(username, cb) { + _request('DELETE', '/user/following/' + username, null, cb); }; - Github.Organization = function () { - // Create an Organization repo - // ------- - this.createRepo = function (options, cb) { - _request('POST', '/orgs/' + options.orgname + '/repos', options, cb); - }; + // Create a repo + // ------- + this.createRepo = function(options, cb) { + _request('POST', '/user/repos', options, cb); }; + }; - // Repository API - // ======= + Github.Organization = function() { + // Create an Organization repo + // ------- + this.createRepo = function(options, cb) { + _request('POST', '/orgs/' + options.orgname + '/repos', options, cb); + }; + }; - Github.Repository = function (options) { - var repo = options.name; - var user = options.user; - var fullname = options.fullname; + // Repository API + // ======= - var that = this; - var repoPath; + Github.Repository = function(options) { + var repo = options.name; + var user = options.user; + var fullname = options.fullname; - if (fullname) { - repoPath = '/repos/' + fullname; - } else { - repoPath = '/repos/' + user + '/' + repo; - } + var that = this; + var repoPath; - var currentTree = { - branch: null, - sha: null - }; + if (fullname) { + repoPath = '/repos/' + fullname; + } else { + repoPath = '/repos/' + user + '/' + repo; + } - // Uses the cache if branch has not been changed - // ------- + var currentTree = { + branch: null, + sha: null + }; - function updateTree(branch, cb) { - if (branch === currentTree.branch && currentTree.sha) { - return cb(null, currentTree.sha); - } + // Uses the cache if branch has not been changed + // ------- - that.getRef('heads/' + branch, function (err, sha) { - currentTree.branch = branch; - currentTree.sha = sha; - cb(err, sha); - }); + function updateTree(branch, cb) { + if (branch === currentTree.branch && currentTree.sha) { + return cb(null, currentTree.sha); } - // Get a particular reference - // ------- + that.getRef('heads/' + branch, function(err, sha) { + currentTree.branch = branch; + currentTree.sha = sha; + cb(err, sha); + }); + } - this.getRef = function (ref, cb) { - _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) { - if (err) { - return cb(err); - } + // Get a particular reference + // ------- - cb(null, res.object.sha, xhr); - }); - }; + this.getRef = function(ref, cb) { + _request('GET', repoPath + '/git/refs/' + ref, null, function(err, res, xhr) { + if (err) { + return cb(err); + } - // Create a new reference - // -------- - // - // { - // "ref": "refs/heads/my-new-branch-name", - // "sha": "827efc6d56897b048c772eb4087f854f46256132" - // } + cb(null, res.object.sha, xhr); + }); + }; - this.createRef = function (options, cb) { - _request('POST', repoPath + '/git/refs', options, cb); - }; + // Create a new reference + // -------- + // + // { + // "ref": "refs/heads/my-new-branch-name", + // "sha": "827efc6d56897b048c772eb4087f854f46256132" + // } - // Delete a reference - // -------- - // - // Repo.deleteRef('heads/gh-pages') - // repo.deleteRef('tags/v1.0') + this.createRef = function(options, cb) { + _request('POST', repoPath + '/git/refs', options, cb); + }; - this.deleteRef = function (ref, cb) { - _request('DELETE', repoPath + '/git/refs/' + ref, options, cb); - }; + // Delete a reference + // -------- + // + // Repo.deleteRef('heads/gh-pages') + // repo.deleteRef('tags/v1.0') - // Delete a repo - // -------- + this.deleteRef = function(ref, cb) { + _request('DELETE', repoPath + '/git/refs/' + ref, options, cb); + }; - this.deleteRepo = function (cb) { - _request('DELETE', repoPath, options, cb); - }; + // Delete a repo + // -------- - // List all tags of a repository - // ------- + this.deleteRepo = function(cb) { + _request('DELETE', repoPath, options, cb); + }; - this.listTags = function (cb) { - _request('GET', repoPath + '/tags', null, cb); - }; + // List all tags of a repository + // ------- - // List all pull requests of a respository - // ------- + this.listTags = function(cb) { + _request('GET', repoPath + '/tags', null, cb); + }; - this.listPulls = function (options, cb) { - options = options || {}; - var url = repoPath + '/pulls'; - var params = []; + // List all pull requests of a respository + // ------- - if (typeof options === 'string') { - // Backward compatibility - params.push('state=' + options); - } else { - if (options.state) { - params.push('state=' + encodeURIComponent(options.state)); - } + this.listPulls = function(options, cb) { + options = options || {}; + var url = repoPath + '/pulls'; + var params = []; - if (options.head) { - params.push('head=' + encodeURIComponent(options.head)); - } + if (typeof options === 'string') { + // Backward compatibility + params.push('state=' + options); + } else { + if (options.state) { + params.push('state=' + encodeURIComponent(options.state)); + } - if (options.base) { - params.push('base=' + encodeURIComponent(options.base)); - } + if (options.head) { + params.push('head=' + encodeURIComponent(options.head)); + } - if (options.sort) { - params.push('sort=' + encodeURIComponent(options.sort)); - } + if (options.base) { + params.push('base=' + encodeURIComponent(options.base)); + } - if (options.direction) { - params.push('direction=' + encodeURIComponent(options.direction)); - } + if (options.sort) { + params.push('sort=' + encodeURIComponent(options.sort)); + } - if (options.page) { - params.push('page=' + options.page); - } + if (options.direction) { + params.push('direction=' + encodeURIComponent(options.direction)); + } - if (options.per_page) { - params.push('per_page=' + options.per_page); - } + if (options.page) { + params.push('page=' + options.page); } - if (params.length > 0) { - url += '?' + params.join('&'); + if (options.per_page) { + params.push('per_page=' + options.per_page); } + } - _request('GET', url, null, cb); - }; + if (params.length > 0) { + url += '?' + params.join('&'); + } - // Gets details for a specific pull request - // ------- + _request('GET', url, null, cb); + }; - this.getPull = function (number, cb) { - _request('GET', repoPath + '/pulls/' + number, null, cb); - }; + // Gets details for a specific pull request + // ------- - // Retrieve the changes made between base and head - // ------- + this.getPull = function(number, cb) { + _request('GET', repoPath + '/pulls/' + number, null, cb); + }; - this.compare = function (base, head, cb) { - _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb); - }; + // Retrieve the changes made between base and head + // ------- - // List all branches of a repository - // ------- + this.compare = function(base, head, cb) { + _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb); + }; - this.listBranches = function (cb) { - _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) { - if (err) { - return cb(err); - } + // List all branches of a repository + // ------- - heads = heads.map(function (head) { - return head.ref.replace(/^refs\/heads\//, ''); - }); + this.listBranches = function(cb) { + _request('GET', repoPath + '/git/refs/heads', null, function(err, heads, xhr) { + if (err) { + return cb(err); + } - cb(null, heads, xhr); + heads = heads.map(function(head) { + return head.ref.replace(/^refs\/heads\//, ''); }); - }; - - // Retrieve the contents of a blob - // ------- - - this.getBlob = function (sha, cb) { - _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw'); - }; - // For a given file path, get the corresponding sha (blob for files, tree for dirs) - // ------- - - this.getCommit = function (branch, sha, cb) { - _request('GET', repoPath + '/git/commits/' + sha, null, cb); - }; - - // For a given file path, get the corresponding sha (blob for files, tree for dirs) - // ------- + cb(null, heads, xhr); + }); + }; - this.getSha = function (branch, path, cb) { - if (!path || path === '') { - return that.getRef('heads/' + branch, cb); - } + // Retrieve the contents of a blob + // ------- - _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), - null, function (err, pathContent, xhr) { - if (err) { - return cb(err); - } + this.getBlob = function(sha, cb) { + _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw'); + }; - cb(null, pathContent.sha, xhr); - }); - }; + // For a given file path, get the corresponding sha (blob for files, tree for dirs) + // ------- - // Get the statuses for a particular SHA - // ------- + this.getCommit = function(branch, sha, cb) { + _request('GET', repoPath + '/git/commits/' + sha, null, cb); + }; - this.getStatuses = function (sha, cb) { - _request('GET', repoPath + '/statuses/' + sha, null, cb); - }; + // For a given file path, get the corresponding sha (blob for files, tree for dirs) + // ------- - // Retrieve the tree a commit points to - // ------- + this.getSha = function(branch, path, cb) { + if (!path || path === '') { + return that.getRef('heads/' + branch, cb); + } - this.getTree = function (tree, cb) { - _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) { + _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), + null, function(err, pathContent, xhr) { if (err) { return cb(err); } - cb(null, res.tree, xhr); + cb(null, pathContent.sha, xhr); }); - }; + }; - // Post a new blob object, getting a blob SHA back - // ------- + // Get the statuses for a particular SHA + // ------- + + this.getStatuses = function(sha, cb) { + _request('GET', repoPath + '/statuses/' + sha, null, cb); + }; + + // Retrieve the tree a commit points to + // ------- + + this.getTree = function(tree, cb) { + _request('GET', repoPath + '/git/trees/' + tree, null, function(err, res, xhr) { + if (err) { + return cb(err); + } - this.postBlob = function (content, cb) { - if (typeof content === 'string') { + cb(null, res.tree, xhr); + }); + }; + + // Post a new blob object, getting a blob SHA back + // ------- + + this.postBlob = function(content, cb) { + if (typeof content === 'string') { + content = { + content: Utf8.encode(content), + encoding: 'utf-8' + }; + } else { + if (typeof Buffer !== 'undefined' && content instanceof Buffer) { + // When we're in Node content = { - content: content, - encoding: 'utf-8' + content: content.toString('base64'), + encoding: 'base64' }; - } else { + } else if (typeof Blob !== 'undefined' && content instanceof Blob) { content = { content: b64encode(content), encoding: 'base64' }; + } else { + throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)'); } + } - _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) { - if (err) { - return cb(err); - } + _request('POST', repoPath + '/git/blobs', content, function(err, res, xhr) { + if (err) { + return cb(err); + } - cb(null, res.sha, xhr); - }); + cb(null, res.sha, xhr); + }); + }; + + // Update an existing tree adding a new blob object getting a tree SHA back + // ------- + + this.updateTree = function(baseTree, path, blob, cb) { + var data = { + base_tree: baseTree, + tree: [ + { + path: path, + mode: '100644', + type: 'blob', + sha: blob + } + ] }; - // Update an existing tree adding a new blob object getting a tree SHA back - // ------- + _request('POST', repoPath + '/git/trees', data, function(err, res, xhr) { + if (err) { + return cb(err); + } - this.updateTree = function (baseTree, path, blob, cb) { - var data = { - base_tree: baseTree, - tree: [ - { - path: path, - mode: '100644', - type: 'blob', - sha: blob - } - ] - }; + cb(null, res.sha, xhr); + }); + }; - _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) { - if (err) { - return cb(err); - } + // Post a new tree object having a file path pointer replaced + // with a new blob SHA getting a tree SHA back + // ------- - cb(null, res.sha, xhr); - }); - }; + this.postTree = function(tree, cb) { + _request('POST', repoPath + '/git/trees', { + tree: tree + }, function(err, res, xhr) { + if (err) { + return cb(err); + } - // Post a new tree object having a file path pointer replaced - // with a new blob SHA getting a tree SHA back - // ------- + cb(null, res.sha, xhr); + }); + }; - this.postTree = function (tree, cb) { - _request('POST', repoPath + '/git/trees', { - tree: tree - }, function (err, res, xhr) { - if (err) { - return cb(err); - } + // Create a new commit object with the current commit SHA as the parent + // and the new tree SHA, getting a commit SHA back + // ------- - cb(null, res.sha, xhr); - }); - }; + this.commit = function(parent, tree, message, cb) { + var user = new Github.User(); - // Create a new commit object with the current commit SHA as the parent - // and the new tree SHA, getting a commit SHA back - // ------- + user.show(null, function(err, userData) { + if (err) { + return cb(err); + } - this.commit = function (parent, tree, message, cb) { - var user = new Github.User(); + var data = { + message: message, + author: { + name: options.user, + email: userData.email + }, + parents: [ + parent + ], + tree: tree + }; - user.show(null, function (err, userData) { + _request('POST', repoPath + '/git/commits', data, function(err, res, xhr) { if (err) { return cb(err); } - var data = { - message: message, - author: { - name: options.user, - email: userData.email - }, - parents: [ - parent - ], - tree: tree - }; - - _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) { - if (err) { - return cb(err); - } - - currentTree.sha = res.sha; // Update latest commit + currentTree.sha = res.sha; // Update latest commit - cb(null, res.sha, xhr); - }); + cb(null, res.sha, xhr); }); - }; + }); + }; - // Update the reference of your head to point to the new commit SHA - // ------- + // Update the reference of your head to point to the new commit SHA + // ------- - this.updateHead = function (head, commit, cb) { - _request('PATCH', repoPath + '/git/refs/heads/' + head, { - sha: commit - }, cb); - }; + this.updateHead = function(head, commit, cb) { + _request('PATCH', repoPath + '/git/refs/heads/' + head, { + sha: commit + }, cb); + }; - // Show repository information - // ------- + // Show repository information + // ------- - this.show = function (cb) { - _request('GET', repoPath, null, cb); - }; + this.show = function(cb) { + _request('GET', repoPath, null, cb); + }; - // Show repository contributors - // ------- + // Show repository contributors + // ------- - this.contributors = function (cb, retry) { - retry = retry || 1000; - var that = this; + this.contributors = function(cb, retry) { + retry = retry || 1000; + var that = this; - _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) { - if (err) { - return cb(err); - } + _request('GET', repoPath + '/stats/contributors', null, function(err, data, xhr) { + if (err) { + return cb(err); + } - if (xhr.status === 202) { - setTimeout( - function () { - that.contributors(cb, retry); - }, - retry - ); - } else { - cb(err, data, xhr); - } - }); - }; + if (xhr.status === 202) { + setTimeout( + function() { + that.contributors(cb, retry); + }, + retry + ); + } else { + cb(err, data, xhr); + } + }); + }; - // Show repository collaborators - // ------- + // Show repository collaborators + // ------- - this.collaborators = function (cb) { - _request('GET', repoPath + '/collaborators', null, cb); - }; + this.collaborators = function(cb) { + _request('GET', repoPath + '/collaborators', null, cb); + }; - // Check whether user is a collaborator on the repository - // ------- + // Check whether user is a collaborator on the repository + // ------- - this.isCollaborator = function (username, cb) { - _request('GET', repoPath + '/collaborators/' + username, null, cb); - }; + this.isCollaborator = function(username, cb) { + _request('GET', repoPath + '/collaborators/' + username, null, cb); + }; - // Get contents - // -------- + // Get contents + // -------- - this.contents = function (ref, path, cb) { - path = encodeURI(path); - _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), { - ref: ref - }, cb); - }; + this.contents = function(ref, path, cb) { + path = encodeURI(path); + _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), { + ref: ref + }, cb); + }; - // Fork repository - // ------- + // Fork repository + // ------- - this.fork = function (cb) { - _request('POST', repoPath + '/forks', null, cb); - }; + this.fork = function(cb) { + _request('POST', repoPath + '/forks', null, cb); + }; - // List forks - // -------- + // List forks + // -------- - this.listForks = function (cb) { - _request('GET', repoPath + '/forks', null, cb); - }; + this.listForks = function(cb) { + _request('GET', repoPath + '/forks', null, cb); + }; - // Branch repository - // -------- + // Branch repository + // -------- - this.branch = function (oldBranch, newBranch, cb) { - if (arguments.length === 2 && typeof arguments[1] === 'function') { - cb = newBranch; - newBranch = oldBranch; - oldBranch = 'master'; + this.branch = function(oldBranch, newBranch, cb) { + if (arguments.length === 2 && typeof arguments[1] === 'function') { + cb = newBranch; + newBranch = oldBranch; + oldBranch = 'master'; + } + + this.getRef('heads/' + oldBranch, function(err, ref) { + if (err && cb) { + return cb(err); } - this.getRef('heads/' + oldBranch, function (err, ref) { - if (err && cb) { - return cb(err); - } + that.createRef({ + ref: 'refs/heads/' + newBranch, + sha: ref + }, cb); + }); + }; - that.createRef({ - ref: 'refs/heads/' + newBranch, - sha: ref - }, cb); - }); - }; + // Create pull request + // -------- - // Create pull request - // -------- + this.createPullRequest = function(options, cb) { + _request('POST', repoPath + '/pulls', options, cb); + }; - this.createPullRequest = function (options, cb) { - _request('POST', repoPath + '/pulls', options, cb); - }; + // List hooks + // -------- - // List hooks - // -------- + this.listHooks = function(cb) { + _request('GET', repoPath + '/hooks', null, cb); + }; - this.listHooks = function (cb) { - _request('GET', repoPath + '/hooks', null, cb); - }; + // Get a hook + // -------- - // Get a hook - // -------- + this.getHook = function(id, cb) { + _request('GET', repoPath + '/hooks/' + id, null, cb); + }; - this.getHook = function (id, cb) { - _request('GET', repoPath + '/hooks/' + id, null, cb); - }; + // Create a hook + // -------- - // Create a hook - // -------- + this.createHook = function(options, cb) { + _request('POST', repoPath + '/hooks', options, cb); + }; - this.createHook = function (options, cb) { - _request('POST', repoPath + '/hooks', options, cb); - }; + // Edit a hook + // -------- - // Edit a hook - // -------- + this.editHook = function(id, options, cb) { + _request('PATCH', repoPath + '/hooks/' + id, options, cb); + }; - this.editHook = function (id, options, cb) { - _request('PATCH', repoPath + '/hooks/' + id, options, cb); - }; + // Delete a hook + // -------- - // Delete a hook - // -------- + this.deleteHook = function(id, cb) { + _request('DELETE', repoPath + '/hooks/' + id, null, cb); + }; - this.deleteHook = function (id, cb) { - _request('DELETE', repoPath + '/hooks/' + id, null, cb); - }; + // Read file at given path + // ------- - // Read file at given path - // ------- + this.read = function(branch, path, cb) { + _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), + null, cb, true); + }; - this.read = function (branch, path, cb) { - _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), - null, cb, true); - }; + // Remove a file + // ------- - // Remove a file - // ------- + this.remove = function(branch, path, cb) { + that.getSha(branch, path, function(err, sha) { + if (err) { + return cb(err); + } - this.remove = function (branch, path, cb) { - that.getSha(branch, path, function (err, sha) { - if (err) { - return cb(err); - } + _request('DELETE', repoPath + '/contents/' + path, { + message: path + ' is removed', + sha: sha, + branch: branch + }, cb); + }); + }; - _request('DELETE', repoPath + '/contents/' + path, { - message: path + ' is removed', - sha: sha, - branch: branch - }, cb); - }); - }; + // Alias for repo.remove for backwards comapt. + // ------- + this.delete = this.remove; - // Alias for repo.remove for backwards comapt. - // ------- - this.delete = this.remove; - - // Move a file to a new location - // ------- - - this.move = function (branch, path, newPath, cb) { - updateTree(branch, function (err, latestCommit) { - that.getTree(latestCommit + '?recursive=true', function (err, tree) { - // Update Tree - tree.forEach(function (ref) { - if (ref.path === path) { - ref.path = newPath; - } - - if (ref.type === 'tree') { - delete ref.sha; - } - }); + // Move a file to a new location + // ------- + + this.move = function(branch, path, newPath, cb) { + updateTree(branch, function(err, latestCommit) { + that.getTree(latestCommit + '?recursive=true', function(err, tree) { + // Update Tree + tree.forEach(function(ref) { + if (ref.path === path) { + ref.path = newPath; + } - that.postTree(tree, function (err, rootTree) { - that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) { - that.updateHead(branch, commit, cb); - }); + if (ref.type === 'tree') { + delete ref.sha; + } + }); + + that.postTree(tree, function(err, rootTree) { + that.commit(latestCommit, rootTree, 'Deleted ' + path, function(err, commit) { + that.updateHead(branch, commit, cb); }); }); }); - }; - - // Write file contents to a given branch and path - // ------- - - this.write = function (branch, path, content, message, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - that.getSha(branch, encodeURI(path), function (err, sha) { - var writeOptions = { - message: message, - content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content, - branch: branch, - committer: options && options.committer ? options.committer : undefined, - author: options && options.author ? options.author : undefined - }; - - // If no error, we set the sha to overwrite an existing file - if (!(err && err.error !== 404)) { - writeOptions.sha = sha; - } + }); + }; - _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb); - }); - }; + // Write file contents to a given branch and path + // ------- - // List commits on a repository. Takes an object of optional parameters: - // sha: SHA or branch to start listing commits from - // path: Only commits containing this file path will be returned - // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address - // since: ISO 8601 date - only commits after this date will be returned - // until: ISO 8601 date - only commits before this date will be returned - // ------- - - this.getCommits = function (options, cb) { - options = options || {}; - var url = repoPath + '/commits'; - var params = []; - - if (options.sha) { - params.push('sha=' + encodeURIComponent(options.sha)); - } + this.write = function(branch, path, content, message, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } - if (options.path) { - params.push('path=' + encodeURIComponent(options.path)); - } + that.getSha(branch, encodeURI(path), function(err, sha) { + var writeOptions = { + message: message, + content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content, + branch: branch, + committer: options && options.committer ? options.committer : undefined, + author: options && options.author ? options.author : undefined + }; - if (options.author) { - params.push('author=' + encodeURIComponent(options.author)); + // If no error, we set the sha to overwrite an existing file + if (!(err && err.error !== 404)) { + writeOptions.sha = sha; } - if (options.since) { - var since = options.since; + _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb); + }); + }; - if (since.constructor === Date) { - since = since.toISOString(); - } + // List commits on a repository. Takes an object of optional parameters: + // sha: SHA or branch to start listing commits from + // path: Only commits containing this file path will be returned + // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address + // since: ISO 8601 date - only commits after this date will be returned + // until: ISO 8601 date - only commits before this date will be returned + // ------- + + this.getCommits = function(options, cb) { + options = options || {}; + var url = repoPath + '/commits'; + var params = []; + + if (options.sha) { + params.push('sha=' + encodeURIComponent(options.sha)); + } - params.push('since=' + encodeURIComponent(since)); - } + if (options.path) { + params.push('path=' + encodeURIComponent(options.path)); + } - if (options.until) { - var until = options.until; + if (options.author) { + params.push('author=' + encodeURIComponent(options.author)); + } - if (until.constructor === Date) { - until = until.toISOString(); - } + if (options.since) { + var since = options.since; - params.push('until=' + encodeURIComponent(until)); + if (since.constructor === Date) { + since = since.toISOString(); } - if (options.page) { - params.push('page=' + options.page); - } + params.push('since=' + encodeURIComponent(since)); + } - if (options.perpage) { - params.push('per_page=' + options.perpage); - } + if (options.until) { + var until = options.until; - if (params.length > 0) { - url += '?' + params.join('&'); + if (until.constructor === Date) { + until = until.toISOString(); } - _request('GET', url, null, cb); - }; + params.push('until=' + encodeURIComponent(until)); + } - // Check if a repository is starred. - // -------- + if (options.page) { + params.push('page=' + options.page); + } - this.isStarred = function(owner, repository, cb) { - _request('GET', '/user/starred/' + owner + '/' + repository, null, cb); - }; + if (options.perpage) { + params.push('per_page=' + options.perpage); + } - // Star a repository. - // -------- + if (params.length > 0) { + url += '?' + params.join('&'); + } - this.star = function(owner, repository, cb) { - _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); - }; + _request('GET', url, null, cb); + }; - // Unstar a repository. - // -------- + // Check if a repository is starred. + // -------- - this.unstar = function(owner, repository, cb) { - _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); - }; + this.isStarred = function(owner, repository, cb) { + _request('GET', '/user/starred/' + owner + '/' + repository, null, cb); + }; - // Create a new release - // -------- + // Star a repository. + // -------- - this.createRelease = function(options, cb) { - _request('POST', repoPath + '/releases', options, cb); - }; + this.star = function(owner, repository, cb) { + _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); + }; - // Edit a release - // -------- + // Unstar a repository. + // -------- - this.editRelease = function(id, options, cb) { - _request('PATCH', repoPath + '/releases/' + id, options, cb); - }; + this.unstar = function(owner, repository, cb) { + _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); + }; - // Get a single release - // -------- + // Create a new release + // -------- - this.getRelease = function(id, cb) { - _request('GET', repoPath + '/releases/' + id, null, cb); - }; + this.createRelease = function(options, cb) { + _request('POST', repoPath + '/releases', options, cb); + }; - // Remove a release - // -------- + // Edit a release + // -------- - this.deleteRelease = function(id, cb) { - _request('DELETE', repoPath + '/releases/' + id, null, cb); - }; + this.editRelease = function(id, options, cb) { + _request('PATCH', repoPath + '/releases/' + id, options, cb); }; - // Gists API - // ======= + // Get a single release + // -------- - Github.Gist = function (options) { - var id = options.id; - var gistPath = '/gists/' + id; + this.getRelease = function(id, cb) { + _request('GET', repoPath + '/releases/' + id, null, cb); + }; - // Read the gist - // -------- + // Remove a release + // -------- - this.read = function (cb) { - _request('GET', gistPath, null, cb); - }; + this.deleteRelease = function(id, cb) { + _request('DELETE', repoPath + '/releases/' + id, null, cb); + }; + }; - // Create the gist - // -------- - // { - // "description": "the description for this gist", - // "public": true, - // "files": { - // "file1.txt": { - // "content": "String file contents" - // } - // } - // } - - this.create = function (options, cb) { - _request('POST', '/gists', options, cb); - }; + // Gists API + // ======= - // Delete the gist - // -------- + Github.Gist = function(options) { + var id = options.id; + var gistPath = '/gists/' + id; - this.delete = function (cb) { - _request('DELETE', gistPath, null, cb); - }; + // Read the gist + // -------- - // Fork a gist - // -------- + this.read = function(cb) { + _request('GET', gistPath, null, cb); + }; - this.fork = function (cb) { - _request('POST', gistPath + '/fork', null, cb); - }; + // Create the gist + // -------- + // { + // "description": "the description for this gist", + // "public": true, + // "files": { + // "file1.txt": { + // "content": "String file contents" + // } + // } + // } + + this.create = function(options, cb) { + _request('POST', '/gists', options, cb); + }; - // Update a gist with the new stuff - // -------- + // Delete the gist + // -------- - this.update = function (options, cb) { - _request('PATCH', gistPath, options, cb); - }; + this.delete = function(cb) { + _request('DELETE', gistPath, null, cb); + }; - // Star a gist - // -------- + // Fork a gist + // -------- - this.star = function (cb) { - _request('PUT', gistPath + '/star', null, cb); - }; + this.fork = function(cb) { + _request('POST', gistPath + '/fork', null, cb); + }; - // Untar a gist - // -------- + // Update a gist with the new stuff + // -------- - this.unstar = function (cb) { - _request('DELETE', gistPath + '/star', null, cb); - }; + this.update = function(options, cb) { + _request('PATCH', gistPath, options, cb); + }; - // Check if a gist is starred - // -------- + // Star a gist + // -------- - this.isStarred = function (cb) { - _request('GET', gistPath + '/star', null, cb); - }; + this.star = function(cb) { + _request('PUT', gistPath + '/star', null, cb); }; - // Issues API - // ========== + // Untar a gist + // -------- - Github.Issue = function (options) { - var path = '/repos/' + options.user + '/' + options.repo + '/issues'; + this.unstar = function(cb) { + _request('DELETE', gistPath + '/star', null, cb); + }; - this.create = function(options, cb) { - _request('POST', path, options, cb); - }; + // Check if a gist is starred + // -------- - this.list = function (options, cb) { - var query = []; + this.isStarred = function(cb) { + _request('GET', gistPath + '/star', null, cb); + }; + }; - for(var key in options) { - if (options.hasOwnProperty(key)) { - query.push(encodeURIComponent(key) + '=' + encodeURIComponent(options[key])); - } - } + // Issues API + // ========== - _requestAllPages(path + '?' + query.join('&'), cb); - }; + Github.Issue = function(options) { + var path = '/repos/' + options.user + '/' + options.repo + '/issues'; - this.comment = function (issue, comment, cb) { - _request('POST', issue.comments_url, { - body: comment - }, cb); - }; + this.create = function(options, cb) { + _request('POST', path, options, cb); + }; - this.edit = function (issue, options, cb) { - _request('PATCH', path + '/' + issue, options, cb); - }; + this.list = function(options, cb) { + var query = []; - this.get = function (issue, cb) { - _request('GET', path + '/' + issue, null, cb); - }; + Object.keys(options).forEach(function(option) { + query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option])); + }); + + _requestAllPages(path + '?' + query.join('&'), !!options.page, cb); }; - // Search API - // ========== + this.comment = function(issue, comment, cb) { + _request('POST', issue.comments_url, { + body: comment + }, cb); + }; - Github.Search = function (options) { - var path = '/search/'; - var query = '?q=' + options.query; + this.edit = function(issue, options, cb) { + _request('PATCH', path + '/' + issue, options, cb); + }; - this.repositories = function (options, cb) { - _request('GET', path + 'repositories' + query, options, cb); - }; + this.get = function(issue, cb) { + _request('GET', path + '/' + issue, null, cb); + }; + }; - this.code = function (options, cb) { - _request('GET', path + 'code' + query, options, cb); - }; + // Search API + // ========== - this.issues = function (options, cb) { - _request('GET', path + 'issues' + query, options, cb); - }; + Github.Search = function(options) { + var path = '/search/'; + var query = '?q=' + options.query; - this.users = function (options, cb) { - _request('GET', path + 'users' + query, options, cb); - }; + this.repositories = function(options, cb) { + _request('GET', path + 'repositories' + query, options, cb); }; - // Rate Limit API - // ========== + this.code = function(options, cb) { + _request('GET', path + 'code' + query, options, cb); + }; - Github.RateLimit = function() { - this.getRateLimit = function(cb) { - _request('GET', '/rate_limit', null, cb); - }; + this.issues = function(options, cb) { + _request('GET', path + 'issues' + query, options, cb); }; - return Github; + this.users = function(options, cb) { + _request('GET', path + 'users' + query, options, cb); + }; }; - // Top Level API - // ------- + // Rate Limit API + // ========== - Github.getIssues = function (user, repo) { - return new Github.Issue({ - user: user, - repo: repo - }); + Github.RateLimit = function() { + this.getRateLimit = function(cb) { + _request('GET', '/rate_limit', null, cb); + }; }; - Github.getRepo = function (user, repo) { - if (!repo) { - return new Github.Repository({ - fullname: user - }); - } else { - return new Github.Repository({ - user: user, - name: repo - }); - } - }; + return Github; +} + +// Top Level API +// ------- + +Github.getIssues = function(user, repo) { + return new Github.Issue({ + user: user, + repo: repo + }); +}; + +Github.getRepo = function(user, repo) { + if (!repo) { + return new Github.Repository({ + fullname: user + }); + } else { + return new Github.Repository({ + user: user, + name: repo + }); + } +}; - Github.getUser = function () { - return new Github.User(); - }; +Github.getUser = function() { + return new Github.User(); +}; - Github.getOrg = function () { - return new Github.Organization(); - }; +Github.getOrg = function() { + return new Github.Organization(); +}; - Github.getGist = function (id) { - return new Github.Gist({ - id: id - }); - }; +Github.getGist = function(id) { + return new Github.Gist({ + id: id + }); +}; - Github.getSearch = function (query) { - return new Github.Search({ - query: query - }); - }; +Github.getSearch = function(query) { + return new Github.Search({ + query: query + }); +}; - Github.getRateLimit = function() { - return new Github.RateLimit(); - }; +Github.getRateLimit = function() { + return new Github.RateLimit(); +}; - return Github; -})); +module.exports = Github; From bc6b2635f1002e2c166a4b1933c492bb5da441e7 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 2 Mar 2016 17:13:53 -0600 Subject: [PATCH 084/217] Restructure tests to run in mocha --- .editorconfig | 3 + .gitignore | 3 +- .jshintrc | 139 ++-- .travis.yml | 10 +- dist/github.bundle.min.js | 3 + dist/github.bundle.min.js.map | 1 + dist/github.js | 1136 +++++++++++++++++++++++++++++++++ dist/github.js.map | 1 + dist/github.min.js | 2 + dist/github.min.js.map | 1 + gulpfile.js | 184 ++---- package.json | 17 +- src/github.js | 2 +- test/.jshintrc | 9 + test/{ => fixtures}/gh.png | Bin test/fixtures/gist.json | 9 + test/fixtures/imageBlob.js | 55 ++ test/{ => fixtures}/user.json | 0 test/helpers.js | 49 ++ test/test.auth.js | 115 ++-- test/test.gist.js | 121 ++-- test/test.issue.js | 98 +-- test/test.rate-limit.js | 28 +- test/test.repo.js | 929 +++++++++++---------------- test/test.search.js | 43 +- test/test.user.js | 149 +---- 26 files changed, 2013 insertions(+), 1094 deletions(-) create mode 100644 dist/github.bundle.min.js create mode 100644 dist/github.bundle.min.js.map create mode 100644 dist/github.js create mode 100644 dist/github.js.map create mode 100644 dist/github.min.js create mode 100644 dist/github.min.js.map create mode 100644 test/.jshintrc rename test/{ => fixtures}/gh.png (100%) create mode 100644 test/fixtures/gist.json create mode 100644 test/fixtures/imageBlob.js rename test/{ => fixtures}/user.json (100%) create mode 100644 test/helpers.js diff --git a/.editorconfig b/.editorconfig index 101a559e..321b598f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,5 +8,8 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true +[*.yml] +indent_size = 2 + [*.md] trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index 1aacec2f..23179d4d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,7 @@ .idea node_modules/ coverage/ -dist/*.js -dist/*.map +.zuulrc npm-debug.log sauce.json diff --git a/.jshintrc b/.jshintrc index d7c494f7..509fef3c 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,92 +1,65 @@ { - // JSHint Default Configuration File (as on JSHint website) - // See http://jshint.com/docs/ for more details - - "maxerr" : 50, // {int} Maximum error before stopping + "maxerr" : 50, // Enforcing - "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.) - "camelcase" : false, // true: Identifiers must be in camelCase - "curly" : false, // true: Require {} for every new block or scope - "eqeqeq" : true, // true: Require triple equals (===) for comparison - "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty() - "freeze" : true, // true: prohibits overwriting prototypes of native objects such as Array, Date etc. - "immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` - "indent" : 2, // {int} Number of spaces to use for indentation - "latedef" : false, // true: Require variables/functions to be defined before being used - "newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()` - "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` - "noempty" : true, // true: Prohibit use of empty blocks - "nonbsp" : true, // true: Prohibit "non-breaking whitespace" characters. - "nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment) - "plusplus" : false, // true: Prohibit use of `++` & `--` - "quotmark" : false, // Quotation mark consistency: - // false : do nothing (default) - // true : ensure whatever is used is consistent - // "single" : require single quotes - // "double" : require double quotes - "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) - "unused" : true, // true: Require all defined variables be used - "strict" : true, // true: Requires all functions run in ES5 Strict Mode - "maxparams" : false, // {int} Max number of formal params allowed per function - "maxdepth" : false, // {int} Max depth of nested blocks (within functions) - "maxstatements" : false, // {int} Max number statements per function - "maxcomplexity" : false, // {int} Max cyclomatic complexity per function - "maxlen" : false, // {int} Max number of characters per line + "bitwise" : true, + "camelcase" : false, + "curly" : false, + "eqeqeq" : true, + "forin" : true, + "freeze" : true, + "immed" : false, + "indent" : 2, + "latedef" : false, + "newcap" : false, + "noarg" : true, + "noempty" : true, + "nonbsp" : true, + "nonew" : false, + "plusplus" : false, + "quotmark" : false, + "undef" : true, + "unused" : true, + "strict" : true, + "maxparams" : false, + "maxdepth" : false, + "maxstatements" : false, + "maxcomplexity" : false, + "maxlen" : false, // Relaxing - "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons) - "boss" : false, // true: Tolerate assignments where comparisons would be expected - "debug" : false, // true: Allow debugger statements e.g. browser breakpoints. - "eqnull" : false, // true: Tolerate use of `== null` - "es5" : false, // true: Allow ES5 syntax (ex: getters and setters) - "esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`) - "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) - // (ex: `for each`, multiple try/catch, function expression…) - "evil" : false, // true: Tolerate use of `eval` and `new Function()` - "expr" : false, // true: Tolerate `ExpressionStatement` as Programs - "funcscope" : false, // true: Tolerate defining variables inside control statements - "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') - "iterator" : false, // true: Tolerate using the `__iterator__` property - "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block - "laxbreak" : false, // true: Tolerate possibly unsafe line breakings - "laxcomma" : false, // true: Tolerate comma-first style coding - "loopfunc" : false, // true: Tolerate functions being defined in loops - "multistr" : false, // true: Tolerate multi-line strings - "noyield" : false, // true: Tolerate generator functions with no yield statement in them. - "notypeof" : false, // true: Tolerate invalid typeof operator values - "proto" : false, // true: Tolerate using the `__proto__` property - "scripturl" : false, // true: Tolerate script-targeted URLs - "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` - "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation - "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` - "validthis" : false, // true: Tolerate using this in a non-constructor function + "asi" : false, + "boss" : false, + "debug" : false, + "eqnull" : false, + "es5" : false, + "esnext" : false, + "moz" : false, + "evil" : false, + "expr" : false, + "funcscope" : false, + "globalstrict" : false, + "iterator" : false, + "lastsemic" : false, + "laxbreak" : false, + "laxcomma" : false, + "loopfunc" : false, + "multistr" : false, + "noyield" : false, + "notypeof" : false, + "proto" : false, + "scripturl" : false, + "shadow" : false, + "sub" : false, + "supernew" : false, + "validthis" : false, - // Environments - "browser" : true, // Web Browser (window, document, etc) - "browserify" : false, // Browserify (node.js code in the browser) - "couch" : false, // CouchDB - "devel" : true, // Development/debugging (alert, confirm, etc) - "dojo" : false, // Dojo Toolkit - "jasmine" : false, // Jasmine - "jquery" : false, // jQuery - "mocha" : true, // Mocha - "mootools" : false, // MooTools - "node" : true, // Node.js - "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) - "prototypejs" : false, // Prototype and Scriptaculous - "qunit" : false, // QUnit - "rhino" : false, // Rhino - "shelljs" : false, // ShellJS - "worker" : false, // Web Workers - "wsh" : false, // Windows Scripting Host - "yui" : false, // Yahoo User Interface + "browser" : true, + "devel" : true, + "node" : true, - // Custom Globals "globals" : { - "require": false, - "define": false, - "escape": false, - "should": false - } // additional predefined global variables + "require" : false, + "define" : false + } } diff --git a/.travis.yml b/.travis.yml index 88181684..67df9cb4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,10 +3,9 @@ language: node_js sudo: false node_js: - - "4.1" - - "4.0" + - "5.7" + - "4.3" - "0.12" - - "0.11" - "0.10" cache: @@ -18,6 +17,5 @@ before_install: script: - gulp lint - - gulp test:ci - - mocha test/ - - npm run-script codecov + - gulp test:mocha + - npm run codecov diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js new file mode 100644 index 00000000..b53ebbbd --- /dev/null +++ b/dist/github.bundle.min.js @@ -0,0 +1,3 @@ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var c=n[s]={exports:{}};t[s][0].call(c.exports,function(e){var n=t[s][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in l)&&o.responseText?e:n)(o),l=null}},l.onerror=function(){n(new Error("Network Error")),l=null},r.isStandardBrowserEnv()){var g=t("./../helpers/cookies"),y=f.withCredentials||u(f.url)?g.read(f.xsrfCookieName):void 0;y&&(h[f.xsrfHeaderName]=y)}if("setRequestHeader"in l&&r.forEach(h,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete h[e]:l.setRequestHeader(e,t)}),f.withCredentials&&(l.withCredentials=!0),f.responseType)try{l.responseType=f.responseType}catch(v){if("json"!==l.responseType)throw v}r.isArrayBuffer(c)&&(c=new DataView(c)),l.send(c)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),f=t("./helpers/combineURLs"),c=t("./helpers/bind"),h=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=f(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=h(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var l=new r(o),p=e.exports=c(r.prototype.request,l);p.create=function(t){return new r(t)},p.defaults=l.defaults,p.all=function(t){return Promise.all(t)},p.spread=t("./helpers/spread"),p.interceptors=l.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},p[t]=c(r.prototype[t],l)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},p[t]=c(r.prototype[t],l)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:24}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===m.call(t)}function o(t){return"[object ArrayBuffer]"===m.call(t)}function i(t){return"[object FormData]"===m.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function c(t){return null!==t&&"object"==typeof t}function h(t){return"[object Date]"===m.call(t)}function l(t){return"[object File]"===m.call(t)}function p(t){return"[object Blob]"===m.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function y(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)y(arguments[n],t);return e}var m=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:c,isUndefined:f,isDate:h,isFile:l,isBlob:p,isStandardBrowserEnv:g,forEach:y,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;u.global!==u&&u.window!==u||(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var f=function(t){throw new a(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=/[\t\n\f\r ]/g,l=function(t){t=String(t).replace(h,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&f("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},p=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&f("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=c.charAt(o>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),s},d={encode:p,decode:l,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,e,n){"use strict";function r(){var t,e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=e.length;for(t=0;n>t;t++)a[t]=e[t];for(t=0;n>t;++t)f[e.charCodeAt(t)]=t;f["-".charCodeAt(0)]=62,f["_".charCodeAt(0)]=63}function o(t){var e,n,r,o,i,s,u=t.length;if(u%4>0)throw new Error("Invalid string. Length must be a multiple of 4");i="="===t[u-2]?2:"="===t[u-1]?1:0,s=new c(3*u/4-i),r=i>0?u-4:u;var a=0;for(e=0,n=0;r>e;e+=4,n+=3)o=f[t.charCodeAt(e)]<<18|f[t.charCodeAt(e+1)]<<12|f[t.charCodeAt(e+2)]<<6|f[t.charCodeAt(e+3)],s[a++]=(16711680&o)>>16,s[a++]=(65280&o)>>8,s[a++]=255&o;return 2===i?(o=f[t.charCodeAt(e)]<<2|f[t.charCodeAt(e+1)]>>4,s[a++]=255&o):1===i&&(o=f[t.charCodeAt(e)]<<10|f[t.charCodeAt(e+1)]<<4|f[t.charCodeAt(e+2)]>>2,s[a++]=o>>8&255,s[a++]=255&o),s}function i(t){return a[t>>18&63]+a[t>>12&63]+a[t>>6&63]+a[63&t]}function s(t,e,n){for(var r,o=[],s=e;n>s;s+=3)r=(t[s]<<16)+(t[s+1]<<8)+t[s+2],o.push(i(r));return o.join("")}function u(t){for(var e,n=t.length,r=n%3,o="",i=[],u=16383,f=0,c=n-r;c>f;f+=u)i.push(s(t,f,f+u>c?c:f+u));return 1===r?(e=t[n-1],o+=a[e>>2],o+=a[e<<4&63],o+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],o+=a[e>>10],o+=a[e>>4&63],o+=a[e<<2&63],o+="="),i.push(o),i.join("")}n.toByteArray=o,n.fromByteArray=u;var a=[],f=[],c="undefined"!=typeof Uint8Array?Uint8Array:Array;r()},{}],20:[function(t,e,n){(function(e){"use strict";function r(){try{var t=new Uint8Array(1);return t.foo=function(){return 42},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(e){return!1}}function o(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(t){return this instanceof i?(i.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?s(this,t):"string"==typeof t?u(this,t,arguments.length>1?arguments[1]:"utf8"):a(this,t)):arguments.length>1?new i(t,arguments[1]):new i(t)}function s(t,e){if(t=g(t,0>e?0:0|y(e)),!i.TYPED_ARRAY_SUPPORT)for(var n=0;e>n;n++)t[n]=0;return t}function u(t,e,n){"string"==typeof n&&""!==n||(n="utf8");var r=0|m(e,n);return t=g(t,r),t.write(e,n),t}function a(t,e){if(i.isBuffer(e))return f(t,e);if($(e))return c(t,e);if(null==e)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(e.buffer instanceof ArrayBuffer)return h(t,e);if(e instanceof ArrayBuffer)return l(t,e)}return e.length?p(t,e):d(t,e)}function f(t,e){var n=0|y(e.length);return t=g(t,n),e.copy(t,0,0,n),t}function c(t,e){var n=0|y(e.length);t=g(t,n);for(var r=0;n>r;r+=1)t[r]=255&e[r];return t}function h(t,e){var n=0|y(e.length);t=g(t,n);for(var r=0;n>r;r+=1)t[r]=255&e[r];return t}function l(t,e){return e.byteLength,i.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=i.prototype):t=h(t,new Uint8Array(e)),t}function p(t,e){var n=0|y(e.length);t=g(t,n);for(var r=0;n>r;r+=1)t[r]=255&e[r];return t}function d(t,e){var n,r=0;"Buffer"===e.type&&$(e.data)&&(n=e.data,r=0|y(n.length)),t=g(t,r);for(var o=0;r>o;o+=1)t[o]=255&n[o];return t}function g(t,e){i.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=i.prototype):t.length=e;var n=0!==e&&e<=i.poolSize>>>1;return n&&(t.parent=Z),t}function y(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function v(t,e){if(!(this instanceof v))return new v(t,e);var n=new i(t,e);return delete n.parent,n}function m(t,e){"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return n;case"utf8":case"utf-8":return H(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return X(t).length;default:if(r)return H(t).length;e=(""+e).toLowerCase(),r=!0}}function w(t,e,n){var r=!1;if(e=0|e,n=void 0===n||n===1/0?this.length:0|n,t||(t="utf8"),0>e&&(e=0),n>this.length&&(n=this.length),e>=n)return"";for(;;)switch(t){case"hex":return I(this,e,n);case"utf8":case"utf-8":return C(this,e,n);case"ascii":return P(this,e,n);case"binary":return x(this,e,n);case"base64":return S(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function b(t,e,n,r){n=Number(n)||0;var o=t.length-n;r?(r=Number(r),r>o&&(r=o)):r=o;var i=e.length;if(i%2!==0)throw new Error("Invalid hex string");r>i/2&&(r=i/2);for(var s=0;r>s;s++){var u=parseInt(e.substr(2*s,2),16);if(isNaN(u))throw new Error("Invalid hex string");t[n+s]=u}return s}function E(t,e,n,r){return V(H(e,t.length-n),t,n,r)}function A(t,e,n,r){return V(F(e),t,n,r)}function T(t,e,n,r){return A(t,e,n,r)}function R(t,e,n,r){return V(X(e),t,n,r)}function _(t,e,n,r){return V(z(e,t.length-n),t,n,r)}function S(t,e,n){return 0===e&&n===t.length?J.fromByteArray(t):J.fromByteArray(t.slice(e,n))}function C(t,e,n){n=Math.min(t.length,n);for(var r=[],o=e;n>o;){var i=t[o],s=null,u=i>239?4:i>223?3:i>191?2:1;if(n>=o+u){var a,f,c,h;switch(u){case 1:128>i&&(s=i);break;case 2:a=t[o+1],128===(192&a)&&(h=(31&i)<<6|63&a,h>127&&(s=h));break;case 3:a=t[o+1],f=t[o+2],128===(192&a)&&128===(192&f)&&(h=(15&i)<<12|(63&a)<<6|63&f,h>2047&&(55296>h||h>57343)&&(s=h));break;case 4:a=t[o+1],f=t[o+2],c=t[o+3],128===(192&a)&&128===(192&f)&&128===(192&c)&&(h=(15&i)<<18|(63&a)<<12|(63&f)<<6|63&c,h>65535&&1114112>h&&(s=h))}}null===s?(s=65533,u=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),o+=u}return U(r)}function U(t){var e=t.length;if(W>=e)return String.fromCharCode.apply(String,t);for(var n="",r=0;e>r;)n+=String.fromCharCode.apply(String,t.slice(r,r+=W));return n}function P(t,e,n){var r="";n=Math.min(t.length,n);for(var o=e;n>o;o++)r+=String.fromCharCode(127&t[o]);return r}function x(t,e,n){var r="";n=Math.min(t.length,n);for(var o=e;n>o;o++)r+=String.fromCharCode(t[o]);return r}function I(t,e,n){var r=t.length;(!e||0>e)&&(e=0),(!n||0>n||n>r)&&(n=r);for(var o="",i=e;n>i;i++)o+=q(t[i]);return o}function O(t,e,n){for(var r=t.slice(e,n),o="",i=0;it)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,n,r,o,s){if(!i.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||s>e)throw new RangeError("value is out of bounds");if(n+r>t.length)throw new RangeError("index out of range")}function L(t,e,n,r){0>e&&(e=65535+e+1);for(var o=0,i=Math.min(t.length-n,2);i>o;o++)t[n+o]=(e&255<<8*(r?o:1-o))>>>8*(r?o:1-o)}function j(t,e,n,r){0>e&&(e=4294967295+e+1);for(var o=0,i=Math.min(t.length-n,4);i>o;o++)t[n+o]=e>>>8*(r?o:3-o)&255}function Y(t,e,n,r,o,i){if(n+r>t.length)throw new RangeError("index out of range");if(0>n)throw new RangeError("index out of range")}function k(t,e,n,r,o){return o||Y(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),K.write(t,e,n,r,23,4),n+4}function M(t,e,n,r,o){return o||Y(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),K.write(t,e,n,r,52,8),n+8}function G(t){if(t=N(t).replace(Q,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function N(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function q(t){return 16>t?"0"+t.toString(16):t.toString(16)}function H(t,e){e=e||1/0;for(var n,r=t.length,o=null,i=[],s=0;r>s;s++){if(n=t.charCodeAt(s),n>55295&&57344>n){if(!o){if(n>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(56320>n){(e-=3)>-1&&i.push(239,191,189),o=n;continue}n=(o-55296<<10|n-56320)+65536}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,128>n){if((e-=1)<0)break;i.push(n)}else if(2048>n){if((e-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(65536>n){if((e-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(1114112>n))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function F(t){for(var e=[],n=0;n>8,o=n%256,i.push(o),i.push(r);return i}function X(t){return J.toByteArray(G(t))}function V(t,e,n,r){for(var o=0;r>o&&!(o+n>=e.length||o>=t.length);o++)e[o+n]=t[o];return o}var J=t("base64-js"),K=t("ieee754"),$=t("isarray");n.Buffer=i,n.SlowBuffer=v,n.INSPECT_MAX_BYTES=50,i.poolSize=8192;var Z={};i.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:r(),i._augment=function(t){return t.__proto__=i.prototype,t},i.TYPED_ARRAY_SUPPORT?(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})):(i.prototype.length=void 0,i.prototype.parent=void 0),i.isBuffer=function(t){return!(null==t||!t._isBuffer)},i.compare=function(t,e){if(!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,o=0,s=Math.min(n,r);s>o&&t[o]===e[o];)++o;return o!==s&&(n=t[o],r=e[o]),r>n?-1:n>r?1:0},i.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},i.concat=function(t,e){if(!$(t))throw new TypeError("list argument must be an Array of Buffers.");if(0===t.length)return new i(0);var n;if(void 0===e)for(e=0,n=0;n0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},i.prototype.compare=function(t){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:i.compare(this,t)},i.prototype.indexOf=function(t,e){function n(t,e,n){for(var r=-1,o=0;n+o2147483647?e=2147483647:-2147483648>e&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(0>e&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(i.isBuffer(t))return n(this,t,e);if("number"==typeof t)return i.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):n(this,[t],e);throw new TypeError("val must be string, number or Buffer")},i.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else if(isFinite(e))e=0|e,isFinite(n)?(n=0|n,void 0===r&&(r="utf8")):(r=n,n=void 0);else{var o=r;r=e,e=0|n,n=o}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(0>n||0>e)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return b(this,t,e,n);case"utf8":case"utf-8":return E(this,t,e,n);case"ascii":return A(this,t,e,n);case"binary":return T(this,t,e,n);case"base64":return R(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,n);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var W=4096;i.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,0>t?(t+=n,0>t&&(t=0)):t>n&&(t=n),0>e?(e+=n,0>e&&(e=0)):e>n&&(e=n),t>e&&(e=t);var r;if(i.TYPED_ARRAY_SUPPORT)r=this.subarray(t,e),r.__proto__=i.prototype;else{var o=e-t;r=new i(o,void 0);for(var s=0;o>s;s++)r[s]=this[s+t]}return r.length&&(r.parent=this.parent||this),r},i.prototype.readUIntLE=function(t,e,n){t=0|t,e=0|e,n||B(t,e,this.length);for(var r=this[t],o=1,i=0;++i0&&(o*=256);)r+=this[t+--e]*o;return r},i.prototype.readUInt8=function(t,e){return e||B(t,1,this.length),this[t]},i.prototype.readUInt16LE=function(t,e){return e||B(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUInt16BE=function(t,e){return e||B(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUInt32LE=function(t,e){return e||B(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},i.prototype.readUInt32BE=function(t,e){return e||B(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readIntLE=function(t,e,n){t=0|t,e=0|e,n||B(t,e,this.length);for(var r=this[t],o=1,i=0;++i=o&&(r-=Math.pow(2,8*e)),r},i.prototype.readIntBE=function(t,e,n){t=0|t,e=0|e,n||B(t,e,this.length);for(var r=e,o=1,i=this[t+--r];r>0&&(o*=256);)i+=this[t+--r]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},i.prototype.readInt8=function(t,e){return e||B(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},i.prototype.readInt16LE=function(t,e){e||B(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(t,e){e||B(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(t,e){return e||B(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return e||B(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readFloatLE=function(t,e){return e||B(t,4,this.length),K.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return e||B(t,4,this.length),K.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return e||B(t,8,this.length),K.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return e||B(t,8,this.length),K.read(this,t,!1,52,8)},i.prototype.writeUIntLE=function(t,e,n,r){t=+t,e=0|e,n=0|n,r||D(this,t,e,n,Math.pow(2,8*n),0);var o=1,i=0;for(this[e]=255&t;++i=0&&(i*=256);)this[e+o]=t/i&255;return e+n},i.prototype.writeUInt8=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,1,255,0),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},i.prototype.writeUInt16LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},i.prototype.writeUInt16BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},i.prototype.writeUInt32LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):j(this,t,e,!0),e+4},i.prototype.writeUInt32BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):j(this,t,e,!1),e+4},i.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e=0|e,!r){var o=Math.pow(2,8*n-1);D(this,t,e,n,o-1,-o)}var i=0,s=1,u=0>t?1:0;for(this[e]=255&t;++i>0)-u&255;return e+n},i.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e=0|e,!r){var o=Math.pow(2,8*n-1);D(this,t,e,n,o-1,-o)}var i=n-1,s=1,u=0>t?1:0;for(this[e+i]=255&t;--i>=0&&(s*=256);)this[e+i]=(t/s>>0)-u&255;return e+n},i.prototype.writeInt8=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,1,127,-128),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),0>t&&(t=255+t+1),this[e]=255&t,e+1},i.prototype.writeInt16LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},i.prototype.writeInt16BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},i.prototype.writeInt32LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):j(this,t,e,!0),e+4},i.prototype.writeInt32BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,2147483647,-2147483648),0>t&&(t=4294967295+t+1),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):j(this,t,e,!1),e+4},i.prototype.writeFloatLE=function(t,e,n){return k(this,t,e,!0,n)},i.prototype.writeFloatBE=function(t,e,n){return k(this,t,e,!1,n)},i.prototype.writeDoubleLE=function(t,e,n){return M(this,t,e,!0,n)},i.prototype.writeDoubleBE=function(t,e,n){return M(this,t,e,!1,n)},i.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&n>r&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(0>e)throw new RangeError("targetStart out of bounds");if(0>n||n>=this.length)throw new RangeError("sourceStart out of bounds");if(0>r)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-en&&r>e)for(o=s-1;o>=0;o--)t[o+e]=this[o+n];else if(1e3>s||!i.TYPED_ARRAY_SUPPORT)for(o=0;s>o;o++)t[o+e]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+s),e);return s},i.prototype.fill=function(t,e,n){if(t||(t=0),e||(e=0),n||(n=this.length),e>n)throw new RangeError("end < start");if(n!==e&&0!==this.length){if(0>e||e>=this.length)throw new RangeError("start out of bounds");if(0>n||n>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;n>r;r++)this[r]=t;else{var o=H(t.toString()),i=o.length;for(r=e;n>r;r++)this[r]=o[r%i]}return this}};var Q=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":19,ieee754:23,isarray:21}],21:[function(t,e,n){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],22:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){X=t}function a(t){$=t}function f(){return function(){r.nextTick(d)}}function c(){return function(){z(d)}}function h(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function l(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function p(){return function(){setTimeout(d,1)}}function d(){for(var t=0;K>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}K=0}function g(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,c()}catch(r){return p()}}function y(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(m),i=n._result;if(r){var s=arguments[r-1];$(function(){D(r,o,s,i)})}else x(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(m);return S(n,t),n}function m(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then; +}catch(e){return at.error=e,at}}function A(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function T(t,e,n){$(function(t){var r=!1,o=A(n,e,function(n){r||(r=!0,e!==n?S(t,n):U(t,n))},function(e){r||(r=!0,P(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,P(t,o))},t)}function R(t,e){e._state===st?U(t,e._result):e._state===ut?P(t,e._result):x(e,void 0,function(e){S(t,e)},function(e){P(t,e)})}function _(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?R(t,e):n===at?P(t,at.error):void 0===n?U(t,e):s(n)?T(t,e,n):U(t,e)}function S(t,e){t===e?P(t,w()):i(e)?_(t,e,E(e)):U(t,e)}function C(t){t._onerror&&t._onerror(t._result),I(t)}function U(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function P(t,e){t._state===it&&(t._state=ut,t._result=e,$(C,t))}function x(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)x(r.resolve(t[s]),void 0,e,n);return o}function k(t){var e=this,n=new e(m);return P(n,t),n}function M(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function G(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(t){this._id=pt++,this._state=void 0,this._result=void 0,this._subscribers=[],m!==t&&("function"!=typeof t&&M(),this instanceof N?L(this,t):G())}function q(t,e){this._instanceConstructor=t,this.promise=new t(m),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?U(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&U(this.promise,this._result))):P(this.promise,this._validationError())}function H(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(t.Promise=dt)}var F;F=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,X,V,J=F,K=0,$=function(t,e){nt[K]=t,nt[K+1]=e,K+=2,2===K&&(X?X(d):V())},Z="undefined"!=typeof window?window:void 0,W=Z||{},Q=W.MutationObserver||W.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);V=tt?f():Q?h():et?l():void 0===Z&&"function"==typeof e?g():p();var rt=y,ot=v,it=void 0,st=1,ut=2,at=new O,ft=new O,ct=j,ht=Y,lt=k,pt=0,dt=N;N.all=ct,N.race=ht,N.resolve=ot,N.reject=lt,N._setScheduler=u,N._setAsap=a,N._asap=$,N.prototype={constructor:N,then:rt,"catch":function(t){return this.then(null,t)}};var gt=q;q.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},q.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},q.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(m);_(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},q.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?P(r,n):this._result[e]=n),0===this._remaining&&U(r,this._result)},q.prototype._willSettleAt=function(t,e){var n=this;x(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var yt=H,vt={Promise:dt,polyfill:yt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),yt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:24}],23:[function(t,e,n){n.read=function(t,e,n,r,o){var i,s,u=8*o-r-1,a=(1<>1,c=-7,h=n?o-1:0,l=n?-1:1,p=t[e+h];for(h+=l,i=p&(1<<-c)-1,p>>=-c,c+=u;c>0;i=256*i+t[e+h],h+=l,c-=8);for(s=i&(1<<-c)-1,i>>=-c,c+=r;c>0;s=256*s+t[e+h],h+=l,c-=8);if(0===i)i=1-f;else{if(i===a)return s?NaN:(p?-1:1)*(1/0);s+=Math.pow(2,r),i-=f}return(p?-1:1)*s*Math.pow(2,i-r)},n.write=function(t,e,n,r,o,i){var s,u,a,f=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=0>e||0===e&&0>1/e?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-s))<1&&(s--,a*=2),e+=s+h>=1?l/a:l*Math.pow(2,1-h),e*a>=2&&(s++,a/=2),s+h>=c?(u=0,s=c):s+h>=1?(u=(e*a-1)*Math.pow(2,o),s+=h):(u=e*Math.pow(2,h-1)*Math.pow(2,o),s=0));o>=8;t[n+p]=255&u,p+=d,u/=256,o-=8);for(s=s<0;t[n+p]=255&s,p+=d,s/=256,f-=8);t[n+p-d]|=128*g}},{}],24:[function(t,e,n){function r(){c=!1,u.length?f=u.concat(f):h=-1,f.length&&o()}function o(){if(!c){var t=setTimeout(r);c=!0;for(var e=f.length;e;){for(u=f,f=[];++h1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function f(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function c(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=m)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function l(){var t,e,n,r,o;if(w>m)throw Error("Invalid byte index");if(w==m)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=h();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=h(),n=h(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=h(),n=h(),r=h(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){v=i(t),m=v.length,w=0;for(var e,n=[];(e=l())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,y="object"==typeof e&&e;y.global!==y&&y.window!==y||(o=y);var v,m,w,b=String.fromCharCode,E={version:"2.0.0",encode:c,decode:p};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var A={},T=A.hasOwnProperty;for(var R in E)T.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],26:[function(e,n,r){(function(o){!function(o,i){if("function"==typeof t&&t.amd)t(["module","utf8","axios","base-64","es6-promise"],i);else if("undefined"!=typeof r)i(n,e("utf8"),e("axios"),e("base-64"),e("es6-promise"));else{var s={exports:{}};i(s,o.utf8,o.axios,o.base64,o.Promise),o.github=s.exports}}(this,function(t,e,n,r,i){"use strict";function s(t){return r.encode(e.encode(t))}function u(t){t=t||{};var r=t.apiUrl||"https://api.github.com",i=u._request=function(e,o,i,u,f){function c(){var t=o.indexOf("//")>=0?o:r+o;if(t+=/\?/.test(t)?"&":"?",i&&"object"===("undefined"==typeof i?"undefined":a(i))&&["GET","HEAD","DELETE"].indexOf(e)>-1)for(var n in i)i.hasOwnProperty(n)&&(t+="&"+encodeURIComponent(n)+"="+encodeURIComponent(i[n]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var h={headers:{Accept:f?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:e,data:i?i:{},url:c()};return(t.token||t.username&&t.password)&&(h.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),n(h).then(function(t){u(null,t.data||!0,t)},function(t){304===t.status?u(null,t.data||!0,t):u({path:o,request:t,error:t.status})})},f=u._requestAllPages=function(t,e,n){var r=[];!function o(){i("GET",t,null,function(i,s,u){if(i)return n(i);s instanceof Array||(s=[s]),r.push.apply(r,s);var a=(u.headers.link||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();!a||e?n(i,r,u):(t=a,o())})}()};return u.User=function(){this.repos=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),f(n,!!t.page,e)},this.orgs=function(t){i("GET","/user/orgs",null,t)},this.gists=function(t){i("GET","/gists",null,t)},this.notifications=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/notifications",r=[];if(t.all&&r.push("all=true"),t.participating&&r.push("participating=true"),t.since){var o=t.since;o.constructor===Date&&(o=o.toISOString()),r.push("since="+encodeURIComponent(o))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),r.push("before="+encodeURIComponent(s))}t.page&&r.push("page="+encodeURIComponent(t.page)),r.length>0&&(n+="?"+r.join("&")),i("GET",n,null,e)},this.show=function(t,e){var n=t?"/users/"+t:"/user";i("GET",n,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),f(r,!!e.page,n)},this.userStarred=function(t,e){var n="/users/"+t+"/starred?type=all&per_page=100";f(n,!1,e)},this.userGists=function(t,e){i("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){var n="/orgs/"+t+"/repos?type=all&&page_num=100&sort=updated&direction=desc";f(n,!1,e)},this.follow=function(t,e){i("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){i("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){i("POST","/user/repos",t,e)}},u.Repository=function(t){function n(t,e){return t===l.branch&&l.sha?e(null,l.sha):void h.getRef("heads/"+t,function(n,r){l.branch=t,l.sha=r,e(n,r)})}var r,a=t.name,f=t.user,c=t.fullname,h=this;r=c?"/repos/"+c:"/repos/"+f+"/"+a;var l={branch:null,sha:null};this.getRef=function(t,e){i("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){i("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,n){i("DELETE",r+"/git/refs/"+e,t,n)},this.deleteRepo=function(e){i("DELETE",r,t,e)},this.listTags=function(t){i("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var n=r+"/pulls",o=[];"string"==typeof t?o.push("state="+t):(t.state&&o.push("state="+encodeURIComponent(t.state)),t.head&&o.push("head="+encodeURIComponent(t.head)),t.base&&o.push("base="+encodeURIComponent(t.base)),t.sort&&o.push("sort="+encodeURIComponent(t.sort)),t.direction&&o.push("direction="+encodeURIComponent(t.direction)),t.page&&o.push("page="+t.page),t.per_page&&o.push("per_page="+t.per_page)),o.length>0&&(n+="?"+o.join("&")),i("GET",n,null,e)},this.getPull=function(t,e){i("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,n){i("GET",r+"/compare/"+t+"..."+e,null,n)},this.listBranches=function(t){i("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){i("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,n){i("GET",r+"/git/commits/"+e,null,n)},this.getSha=function(t,e,n){return e&&""!==e?void i("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,r){return t?n(t):void n(null,e.sha,r)}):h.getRef("heads/"+t,n)},this.getStatuses=function(t,e){i("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){i("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,n){if("string"==typeof t)t={content:e.encode(t),encoding:"utf-8"};else if("undefined"!=typeof o&&t instanceof o)t={content:t.toString("base64"),encoding:"base64"};else{if(!("undefined"!=typeof Blob&&t instanceof Blob))throw new Error("Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)");t={content:s(t),encoding:"base64"}}i("POST",r+"/git/blobs",t,function(t,e,r){return t?n(t):void n(null,e.sha,r)})},this.updateTree=function(t,e,n,o){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:n}]};i("POST",r+"/git/trees",s,function(t,e,n){return t?o(t):void o(null,e.sha,n)})},this.postTree=function(t,e){i("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,n,o,s){var a=new u.User;a.show(null,function(u,a){if(u)return s(u);var f={message:o,author:{name:t.user,email:a.email},parents:[e],tree:n};i("POST",r+"/git/commits",f,function(t,e,n){return t?s(t):(l.sha=e.sha,void s(null,e.sha,n))})})},this.updateHead=function(t,e,n){i("PATCH",r+"/git/refs/heads/"+t,{sha:e},n)},this.show=function(t){i("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var n=this;i("GET",r+"/stats/contributors",null,function(r,o,i){return r?t(r):void(202===i.status?setTimeout(function(){n.contributors(t,e)},e):t(r,o,i))})},this.contents=function(t,e,n){e=encodeURI(e),i("GET",r+"/contents"+(e?"/"+e:""),{ref:t},n)},this.fork=function(t){i("POST",r+"/forks",null,t)},this.listForks=function(t){i("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void h.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){i("POST",r+"/pulls",t,e)},this.listHooks=function(t){i("GET",r+"/hooks",null,t)},this.getHook=function(t,e){i("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){i("POST",r+"/hooks",t,e)},this.editHook=function(t,e,n){i("PATCH",r+"/hooks/"+t,e,n)},this.deleteHook=function(t,e){i("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,n){i("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,n,!0)},this.remove=function(t,e,n){h.getSha(t,e,function(o,s){return o?n(o):void i("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},n)})},this["delete"]=this.remove,this.move=function(t,e,r,o){n(t,function(n,i){h.getTree(i+"?recursive=true",function(n,s){s.forEach(function(t){t.path===e&&(t.path=r),"tree"===t.type&&delete t.sha}),h.postTree(s,function(n,r){h.commit(i,r,"Deleted "+e,function(e,n){h.updateHead(t,n,o)})})})})},this.write=function(t,e,n,o,u,a){"function"==typeof u&&(a=u,u={}),h.getSha(t,encodeURI(e),function(f,c){var h={message:o,content:"undefined"==typeof u.encode||u.encode?s(n):n,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};f&&404!==f.error||(h.sha=c),i("PUT",r+"/contents/"+encodeURI(e),h,a)})},this.getCommits=function(t,e){t=t||{};var n=r+"/commits",o=[];if(t.sha&&o.push("sha="+encodeURIComponent(t.sha)),t.path&&o.push("path="+encodeURIComponent(t.path)),t.author&&o.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),o.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),o.push("until="+encodeURIComponent(u))}t.page&&o.push("page="+t.page),t.perpage&&o.push("per_page="+t.perpage),o.length>0&&(n+="?"+o.join("&")),i("GET",n,null,e)},this.isStarred=function(t,e,n){i("GET","/user/starred/"+t+"/"+e,null,n)},this.star=function(t,e,n){i("PUT","/user/starred/"+t+"/"+e,null,n)},this.unstar=function(t,e,n){i("DELETE","/user/starred/"+t+"/"+e,null,n)},this.createRelease=function(t,e){i("POST",r+"/releases",t,e)},this.editRelease=function(t,e,n){i("PATCH",r+"/releases/"+t,e,n)},this.getRelease=function(t,e){i("GET",r+"/releases/"+t,null,e)},this.deleteRelease=function(t,e){i("DELETE",r+"/releases/"+t,null,e)}},u.Gist=function(t){var e=t.id,n="/gists/"+e;this.read=function(t){i("GET",n,null,t)},this.create=function(t,e){i("POST","/gists",t,e)},this["delete"]=function(t){i("DELETE",n,null,t)},this.fork=function(t){i("POST",n+"/fork",null,t)},this.update=function(t,e){i("PATCH",n,t,e)},this.star=function(t){i("PUT",n+"/star",null,t)},this.unstar=function(t){i("DELETE",n+"/star",null,t)},this.isStarred=function(t){i("GET",n+"/star",null,t)}},u.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.create=function(t,n){i("POST",e,t,n)},this.list=function(t,n){var r=[];Object.keys(t).forEach(function(e){r.push(encodeURIComponent(e)+"="+encodeURIComponent(t[e]))}),f(e+"?"+r.join("&"),!!t.page,n)},this.comment=function(t,e,n){i("POST",t.comments_url,{body:e},n)},this.edit=function(t,n,r){i("PATCH",e+"/"+t,n,r)},this.get=function(t,n){i("GET",e+"/"+t,null,n)}},u.Search=function(t){var e="/search/",n="?q="+t.query;this.repositories=function(t,r){i("GET",e+"repositories"+n,t,r)},this.code=function(t,r){i("GET",e+"code"+n,t,r)},this.issues=function(t,r){i("GET",e+"issues"+n,t,r)},this.users=function(t,r){i("GET",e+"users"+n,t,r)}},u.RateLimit=function(){this.getRateLimit=function(t){i("GET","/rate_limit",null,t)}},u}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};i.polyfill&&i.polyfill(),u.getIssues=function(t,e){return new u.Issue({user:t,repo:e})},u.getRepo=function(t,e){return e?new u.Repository({user:t,name:e}):new u.Repository({fullname:t})},u.getUser=function(){return new u.User},u.getGist=function(t){return new u.Gist({id:t})},u.getSearch=function(t){return new u.Search({query:t})},u.getRateLimit=function(){return new u.RateLimit},t.exports=u})}).call(this,e("buffer").Buffer)},{axios:1,"base-64":18,buffer:20,"es6-promise":22,utf8:25}]},{},[26])(26)}); +//# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map new file mode 100644 index 00000000..1e78aff2 --- /dev/null +++ b/dist/github.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/base64-js/lib/b64.js","node_modules/buffer/index.js","node_modules/buffer/node_modules/isarray/index.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/ieee754/index.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"init","len","lookup","revLookup","toByteArray","b64","j","tmp","placeHolders","Arr","L","tripletToBase64","num","encodeChunk","uint8","start","end","fromByteArray","extraBytes","maxChunkLength","len2","Uint8Array",20,"typedArraySupport","foo","subarray","byteLength","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","arg","parent","fromNumber","fromString","fromObject","that","allocate","checked","string","encoding","object","isBuffer","fromBuffer","fromArray","TypeError","fromTypedArray","fromArrayBuffer","fromArrayLike","fromJsonObject","copy","array","__proto__","type","fromPool","poolSize","rootParent","RangeError","SlowBuffer","subject","buf","loweredCase","utf8ToBytes","base64ToBytes","slowToString","Infinity","hexSlice","utf8Slice","asciiSlice","binarySlice","base64Slice","utf16leSlice","hexWrite","offset","Number","remaining","strLen","parseInt","isNaN","utf8Write","blitBuffer","asciiWrite","asciiToBytes","binaryWrite","base64Write","ucs2Write","utf16leToBytes","slice","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","ret","out","toHex","bytes","checkOffset","ext","checkInt","max","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754","writeDouble","base64clean","stringtrim","INVALID_BASE64_RE","units","leadSurrogate","byteArray","hi","lo","src","dst","INSPECT_MAX_BYTES","_augment","Symbol","species","defineProperty","configurable","_isBuffer","compare","x","y","isEncoding","concat","list","pos","item","equals","inspect","byteOffset","arrayIndexOf","foundIndex","isFinite","swap","toJSON","_arr","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt16BE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","target","targetStart","set","fill","base64-js","isarray",21,22,"lib$es6$promise$utils$$objectOrFunction","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",23,"isLE","mLen","nBytes","m","eLen","eMax","eBias","nBits","d","NaN","rt","abs","log","LN2",24,"cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","run","clearTimeout","Item","fun","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",25,"ucs2decode","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","createByte","encodeCodePoint","symbol","utf8encode","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","utf8",26,"factory","mod","github","Utf8","Base64","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","_typeof","param","getTime","token","_requestAllPages","singlePage","results","iterate","err","xhr","next","link","filter","exec","pop","User","repos","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","Blob","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","query","keys","option","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","iterator","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\n (!('status' in request) && response.responseText) ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(requestData)) {\n requestData = new DataView(requestData);\n }\n\n // Send the request\n request.send(requestData);\n};\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose defaults\naxios.defaults = defaultInstance.defaults;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = defaultInstance.interceptors;\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":24}],6:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformResponseJSON(data, headers) {\n if (utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponseJSON(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n},{}],8:[function(require,module,exports){\n'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\nInvalidCharacterError.prototype = new Error;\nInvalidCharacterError.prototype.code = 5;\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n},{}],13:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n var i\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xFF0000) >> 16\n arr[L++] = (tmp & 0xFF00) >> 8\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n\n},{}],20:[function(require,module,exports){\n(function (global){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\nBuffer.poolSize = 8192 // not used by this implementation\n\nvar rootParent = {}\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.foo = function () { return 42 }\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\nfunction Buffer (arg) {\n if (!(this instanceof Buffer)) {\n // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n if (arguments.length > 1) return new Buffer(arg, arguments[1])\n return new Buffer(arg)\n }\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n this.length = 0\n this.parent = undefined\n }\n\n // Common case.\n if (typeof arg === 'number') {\n return fromNumber(this, arg)\n }\n\n // Slightly less common case.\n if (typeof arg === 'string') {\n return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\n }\n\n // Unusual.\n return fromObject(this, arg)\n}\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction fromNumber (that, length) {\n that = allocate(that, length < 0 ? 0 : checked(length) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < length; i++) {\n that[i] = 0\n }\n }\n return that\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\n\n // Assumption: byteLength() return value is always < kMaxLength.\n var length = byteLength(string, encoding) | 0\n that = allocate(that, length)\n\n that.write(string, encoding)\n return that\n}\n\nfunction fromObject (that, object) {\n if (Buffer.isBuffer(object)) return fromBuffer(that, object)\n\n if (isArray(object)) return fromArray(that, object)\n\n if (object == null) {\n throw new TypeError('must start with number, buffer, array or string')\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (object.buffer instanceof ArrayBuffer) {\n return fromTypedArray(that, object)\n }\n if (object instanceof ArrayBuffer) {\n return fromArrayBuffer(that, object)\n }\n }\n\n if (object.length) return fromArrayLike(that, object)\n\n return fromJsonObject(that, object)\n}\n\nfunction fromBuffer (that, buffer) {\n var length = checked(buffer.length) | 0\n that = allocate(that, length)\n buffer.copy(that, 0, 0, length)\n return that\n}\n\nfunction fromArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Duplicate of fromArray() to keep fromArray() monomorphic.\nfunction fromTypedArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n // Truncating the elements is probably not what people expect from typed\n // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n // of the old Buffer constructor.\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(array)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromTypedArray(that, new Uint8Array(array))\n }\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n// Returns a zero-length buffer for inputs that don't conform to the spec.\nfunction fromJsonObject (that, object) {\n var array\n var length = 0\n\n if (object.type === 'Buffer' && isArray(object.data)) {\n array = object.data\n length = checked(array.length) | 0\n }\n that = allocate(that, length)\n\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n} else {\n // pre-set for values that may exist in the future\n Buffer.prototype.length = undefined\n Buffer.prototype.parent = undefined\n}\n\nfunction allocate (that, length) {\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that.length = length\n }\n\n var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\n if (fromPool) that.parent = rootParent\n\n return that\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (subject, encoding) {\n if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\n\n var buf = new Buffer(subject, encoding)\n delete buf.parent\n return buf\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n var i = 0\n var len = Math.min(x, y)\n while (i < len) {\n if (a[i] !== b[i]) break\n\n ++i\n }\n\n if (i !== len) {\n x = a[i]\n y = b[i]\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'binary':\n case 'base64':\n case 'raw':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\n\n if (list.length === 0) {\n return new Buffer(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; i++) {\n length += list[i].length\n }\n }\n\n var buf = new Buffer(length)\n var pos = 0\n for (i = 0; i < list.length; i++) {\n var item = list[i]\n item.copy(buf, pos)\n pos += item.length\n }\n return buf\n}\n\nfunction byteLength (string, encoding) {\n if (typeof string !== 'string') string = '' + string\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'binary':\n // Deprecated\n case 'raw':\n case 'raws':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n start = start | 0\n end = end === undefined || end === Infinity ? this.length : end | 0\n\n if (!encoding) encoding = 'utf8'\n if (start < 0) start = 0\n if (end > this.length) end = this.length\n if (end <= start) return ''\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'binary':\n return binarySlice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return 0\n return Buffer.compare(this, b)\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\n if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\n else if (byteOffset < -0x80000000) byteOffset = -0x80000000\n byteOffset >>= 0\n\n if (this.length === 0) return -1\n if (byteOffset >= this.length) return -1\n\n // Negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n if (typeof val === 'string') {\n if (val.length === 0) return -1 // special case: looking for empty string always fails\n return String.prototype.indexOf.call(this, val, byteOffset)\n }\n if (Buffer.isBuffer(val)) {\n return arrayIndexOf(this, val, byteOffset)\n }\n if (typeof val === 'number') {\n if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n }\n return arrayIndexOf(this, [ val ], byteOffset)\n }\n\n function arrayIndexOf (arr, val, byteOffset) {\n var foundIndex = -1\n for (var i = 0; byteOffset + i < arr.length; i++) {\n if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\n } else {\n foundIndex = -1\n }\n }\n return -1\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; i++) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) throw new Error('Invalid hex string')\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n var swap = encoding\n encoding = offset\n offset = length | 0\n length = swap\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'binary':\n return binaryWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction binarySlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; i++) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; i++) {\n newBuf[i] = this[i + start]\n }\n }\n\n if (newBuf.length) newBuf.parent = this.parent || this\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('value is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n if (offset < 0) throw new RangeError('index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; i--) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; i++) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// fill(value, start=0, end=buffer.length)\nBuffer.prototype.fill = function fill (value, start, end) {\n if (!value) value = 0\n if (!start) start = 0\n if (!end) end = this.length\n\n if (end < start) throw new RangeError('end < start')\n\n // Fill 0 bytes; we're done\n if (end === start) return\n if (this.length === 0) return\n\n if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n var i\n if (typeof value === 'number') {\n for (i = start; i < end; i++) {\n this[i] = value\n }\n } else {\n var bytes = utf8ToBytes(value.toString())\n var len = bytes.length\n for (i = start; i < end; i++) {\n this[i] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; i++) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; i++) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"base64-js\":19,\"ieee754\":23,\"isarray\":21}],21:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\n},{}],22:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":24}],23:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n},{}],24:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],25:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],26:[function(require,module,exports){\n(function (Buffer){\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.utf8, global.axios, global.base64, global.Promise);\n global.github = mod.exports;\n }\n})(this, function (module, Utf8, axios, Base64, Promise) {\n /*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n 'use strict';\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += /\\?/.test(url) ? '&' : '?';\n\n if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for (var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if (options.token || options.username && options.password) {\n config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config).then(function (response) {\n cb(null, response.data || true, response);\n }, function (response) {\n if (response.status === 304) {\n cb(null, response.data || true, response);\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '').split(',').filter(function (link) {\n return (/rel=\"next\"/.test(link)\n );\n }).map(function (link) {\n return (/<(.*)>/.exec(link) || [])[1];\n }).pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [{\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [parent],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(function () {\n that.contributors(cb, retry);\n }, retry);\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function (owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function (owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function (owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function (options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function (id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function (id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function (id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function (options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function (option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function () {\n this.getRateLimit = function (cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function () {\n return new Github.RateLimit();\n };\n\n module.exports = Github;\n});\n\n}).call(this,require(\"buffer\").Buffer)\n\n},{\"axios\":1,\"base-64\":18,\"buffer\":20,\"es6-promise\":22,\"utf8\":25}]},{},[26])(26)\n});\n\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = window.btoa || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onload = function handleLoad() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n // Resolve or reject the Promise based on the status\n ((response.status >= 200 && response.status < 300) ||\n (!('status' in request) && response.responseText) ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(requestData)) {\n requestData = new DataView(requestData);\n }\n\n // Send the request\n request.send(requestData);\n};\n","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose defaults\naxios.defaults = defaultInstance.defaults;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = defaultInstance.interceptors;\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformResponseJSON(data, headers) {\n if (utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponseJSON(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\nInvalidCharacterError.prototype = new Error;\nInvalidCharacterError.prototype.code = 5;\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n var i\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xFF0000) >> 16\n arr[L++] = (tmp & 0xFF00) >> 8\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\nBuffer.poolSize = 8192 // not used by this implementation\n\nvar rootParent = {}\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.foo = function () { return 42 }\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\nfunction Buffer (arg) {\n if (!(this instanceof Buffer)) {\n // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n if (arguments.length > 1) return new Buffer(arg, arguments[1])\n return new Buffer(arg)\n }\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n this.length = 0\n this.parent = undefined\n }\n\n // Common case.\n if (typeof arg === 'number') {\n return fromNumber(this, arg)\n }\n\n // Slightly less common case.\n if (typeof arg === 'string') {\n return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\n }\n\n // Unusual.\n return fromObject(this, arg)\n}\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction fromNumber (that, length) {\n that = allocate(that, length < 0 ? 0 : checked(length) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < length; i++) {\n that[i] = 0\n }\n }\n return that\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\n\n // Assumption: byteLength() return value is always < kMaxLength.\n var length = byteLength(string, encoding) | 0\n that = allocate(that, length)\n\n that.write(string, encoding)\n return that\n}\n\nfunction fromObject (that, object) {\n if (Buffer.isBuffer(object)) return fromBuffer(that, object)\n\n if (isArray(object)) return fromArray(that, object)\n\n if (object == null) {\n throw new TypeError('must start with number, buffer, array or string')\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (object.buffer instanceof ArrayBuffer) {\n return fromTypedArray(that, object)\n }\n if (object instanceof ArrayBuffer) {\n return fromArrayBuffer(that, object)\n }\n }\n\n if (object.length) return fromArrayLike(that, object)\n\n return fromJsonObject(that, object)\n}\n\nfunction fromBuffer (that, buffer) {\n var length = checked(buffer.length) | 0\n that = allocate(that, length)\n buffer.copy(that, 0, 0, length)\n return that\n}\n\nfunction fromArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Duplicate of fromArray() to keep fromArray() monomorphic.\nfunction fromTypedArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n // Truncating the elements is probably not what people expect from typed\n // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n // of the old Buffer constructor.\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(array)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromTypedArray(that, new Uint8Array(array))\n }\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n// Returns a zero-length buffer for inputs that don't conform to the spec.\nfunction fromJsonObject (that, object) {\n var array\n var length = 0\n\n if (object.type === 'Buffer' && isArray(object.data)) {\n array = object.data\n length = checked(array.length) | 0\n }\n that = allocate(that, length)\n\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n} else {\n // pre-set for values that may exist in the future\n Buffer.prototype.length = undefined\n Buffer.prototype.parent = undefined\n}\n\nfunction allocate (that, length) {\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that.length = length\n }\n\n var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\n if (fromPool) that.parent = rootParent\n\n return that\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (subject, encoding) {\n if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\n\n var buf = new Buffer(subject, encoding)\n delete buf.parent\n return buf\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n var i = 0\n var len = Math.min(x, y)\n while (i < len) {\n if (a[i] !== b[i]) break\n\n ++i\n }\n\n if (i !== len) {\n x = a[i]\n y = b[i]\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'binary':\n case 'base64':\n case 'raw':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\n\n if (list.length === 0) {\n return new Buffer(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; i++) {\n length += list[i].length\n }\n }\n\n var buf = new Buffer(length)\n var pos = 0\n for (i = 0; i < list.length; i++) {\n var item = list[i]\n item.copy(buf, pos)\n pos += item.length\n }\n return buf\n}\n\nfunction byteLength (string, encoding) {\n if (typeof string !== 'string') string = '' + string\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'binary':\n // Deprecated\n case 'raw':\n case 'raws':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n start = start | 0\n end = end === undefined || end === Infinity ? this.length : end | 0\n\n if (!encoding) encoding = 'utf8'\n if (start < 0) start = 0\n if (end > this.length) end = this.length\n if (end <= start) return ''\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'binary':\n return binarySlice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return 0\n return Buffer.compare(this, b)\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\n if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\n else if (byteOffset < -0x80000000) byteOffset = -0x80000000\n byteOffset >>= 0\n\n if (this.length === 0) return -1\n if (byteOffset >= this.length) return -1\n\n // Negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n if (typeof val === 'string') {\n if (val.length === 0) return -1 // special case: looking for empty string always fails\n return String.prototype.indexOf.call(this, val, byteOffset)\n }\n if (Buffer.isBuffer(val)) {\n return arrayIndexOf(this, val, byteOffset)\n }\n if (typeof val === 'number') {\n if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n }\n return arrayIndexOf(this, [ val ], byteOffset)\n }\n\n function arrayIndexOf (arr, val, byteOffset) {\n var foundIndex = -1\n for (var i = 0; byteOffset + i < arr.length; i++) {\n if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\n } else {\n foundIndex = -1\n }\n }\n return -1\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; i++) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) throw new Error('Invalid hex string')\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n var swap = encoding\n encoding = offset\n offset = length | 0\n length = swap\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'binary':\n return binaryWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction binarySlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; i++) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; i++) {\n newBuf[i] = this[i + start]\n }\n }\n\n if (newBuf.length) newBuf.parent = this.parent || this\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('value is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n if (offset < 0) throw new RangeError('index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; i--) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; i++) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// fill(value, start=0, end=buffer.length)\nBuffer.prototype.fill = function fill (value, start, end) {\n if (!value) value = 0\n if (!start) start = 0\n if (!end) end = this.length\n\n if (end < start) throw new RangeError('end < start')\n\n // Fill 0 bytes; we're done\n if (end === start) return\n if (this.length === 0) return\n\n if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n var i\n if (typeof value === 'number') {\n for (i = start; i < end; i++) {\n this[i] = value\n }\n } else {\n var bytes = utf8ToBytes(value.toString())\n var len = bytes.length\n for (i = start; i < end; i++) {\n this[i] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; i++) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; i++) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n'use strict';\n\nvar Utf8 = require('utf8');\nvar axios = require('axios');\nvar Base64 = require('base-64');\nvar Promise = require('es6-promise');\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += ((/\\?/).test(url) ? '&' : '?');\n\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for(var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') +\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if ((options.token) || (options.username && options.password)) {\n config.headers.Authorization = options.token ?\n 'token ' + options.token :\n 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config)\n .then(function (response) {\n cb(\n null,\n response.data || true,\n response\n );\n }, function (response) {\n if (response.status === 304) {\n cb(\n null,\n response.data || true,\n response\n );\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '')\n .split(',')\n .filter(function(link) {\n return /rel=\"next\"/.test(link);\n })\n .map(function(link) {\n return (/<(.*)>/.exec(link) || [])[1];\n })\n .pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\n null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [\n {\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }\n ]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [\n parent\n ],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(\n function () {\n that.contributors(cb, retry);\n },\n retry\n );\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\n null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function(owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function(owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function(owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function(options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function(id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function(id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function(id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function(options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function(option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\n\nmodule.exports = Github;\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.js b/dist/github.js new file mode 100644 index 00000000..b5dd38a2 --- /dev/null +++ b/dist/github.js @@ -0,0 +1,1136 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory); + } else if (typeof exports !== "undefined") { + factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise')); + } else { + var mod = { + exports: {} + }; + factory(mod, global.utf8, global.axios, global.base64, global.Promise); + global.github = mod.exports; + } +})(this, function (module, Utf8, axios, Base64, Promise) { + /*! + * @overview Github.js + * + * @copyright (c) 2013 Michael Aufreiter, Development Seed + * Github.js is freely distributable. + * + * @license Licensed under BSD-3-Clause-Clear + * + * For all details and documentation: + * http://substance.io/michael/github + */ + 'use strict'; + + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; + }; + + function b64encode(string) { + return Base64.encode(Utf8.encode(string)); + } + + if (Promise.polyfill) { + Promise.polyfill(); + } + + // Initial Setup + // ------------- + + function Github(options) { + options = options || {}; + + var API_URL = options.apiUrl || 'https://api.github.com'; + + // HTTP Request Abstraction + // ======= + // + // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec. + + var _request = Github._request = function _request(method, path, data, cb, raw) { + function getURL() { + var url = path.indexOf('//') >= 0 ? path : API_URL + path; + + url += /\?/.test(url) ? '&' : '?'; + + if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { + for (var param in data) { + if (data.hasOwnProperty(param)) { + url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); + } + } + } + + return url.replace(/(×tamp=\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); + } + + var config = { + headers: { + Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', + 'Content-Type': 'application/json;charset=UTF-8' + }, + method: method, + data: data ? data : {}, + url: getURL() + }; + + if (options.token || options.username && options.password) { + config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password); + } + + return axios(config).then(function (response) { + cb(null, response.data || true, response); + }, function (response) { + if (response.status === 304) { + cb(null, response.data || true, response); + } else { + cb({ + path: path, + request: response, + error: response.status + }); + } + }); + }; + + var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) { + var results = []; + + (function iterate() { + _request('GET', path, null, function (err, res, xhr) { + if (err) { + return cb(err); + } + + if (!(res instanceof Array)) { + res = [res]; + } + + results.push.apply(results, res); + + var next = (xhr.headers.link || '').split(',').filter(function (link) { + return (/rel="next"/.test(link) + ); + }).map(function (link) { + return (/<(.*)>/.exec(link) || [])[1]; + }).pop(); + + if (!next || singlePage) { + cb(err, results, xhr); + } else { + path = next; + iterate(); + } + }); + })(); + }; + + // User API + // ======= + + Github.User = function () { + this.repos = function (options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + options = options || {}; + + var url = '/user/repos'; + var params = []; + + params.push('type=' + encodeURIComponent(options.type || 'all')); + params.push('sort=' + encodeURIComponent(options.sort || 'updated')); + params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore + + if (options.page) { + params.push('page=' + encodeURIComponent(options.page)); + } + + url += '?' + params.join('&'); + + _requestAllPages(url, !!options.page, cb); + }; + + // List user organizations + // ------- + + this.orgs = function (cb) { + _request('GET', '/user/orgs', null, cb); + }; + + // List authenticated user's gists + // ------- + + this.gists = function (cb) { + _request('GET', '/gists', null, cb); + }; + + // List authenticated user's unread notifications + // ------- + + this.notifications = function (options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + options = options || {}; + var url = '/notifications'; + var params = []; + + if (options.all) { + params.push('all=true'); + } + + if (options.participating) { + params.push('participating=true'); + } + + if (options.since) { + var since = options.since; + + if (since.constructor === Date) { + since = since.toISOString(); + } + + params.push('since=' + encodeURIComponent(since)); + } + + if (options.before) { + var before = options.before; + + if (before.constructor === Date) { + before = before.toISOString(); + } + + params.push('before=' + encodeURIComponent(before)); + } + + if (options.page) { + params.push('page=' + encodeURIComponent(options.page)); + } + + if (params.length > 0) { + url += '?' + params.join('&'); + } + + _request('GET', url, null, cb); + }; + + // Show user information + // ------- + + this.show = function (username, cb) { + var command = username ? '/users/' + username : '/user'; + + _request('GET', command, null, cb); + }; + + // List user repositories + // ------- + + this.userRepos = function (username, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + var url = '/users/' + username + '/repos'; + var params = []; + + params.push('type=' + encodeURIComponent(options.type || 'all')); + params.push('sort=' + encodeURIComponent(options.sort || 'updated')); + params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore + + if (options.page) { + params.push('page=' + encodeURIComponent(options.page)); + } + + url += '?' + params.join('&'); + + _requestAllPages(url, !!options.page, cb); + }; + + // List user starred repositories + // ------- + + this.userStarred = function (username, cb) { + // Github does not always honor the 1000 limit so we want to iterate over the data set. + var request = '/users/' + username + '/starred?type=all&per_page=100'; + _requestAllPages(request, false, cb); + }; + + // List a user's gists + // ------- + + this.userGists = function (username, cb) { + _request('GET', '/users/' + username + '/gists', null, cb); + }; + + // List organization repositories + // ------- + + this.orgRepos = function (orgname, cb) { + // Github does not always honor the 1000 limit so we want to iterate over the data set. + var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc'; + _requestAllPages(request, false, cb); + }; + + // Follow user + // ------- + + this.follow = function (username, cb) { + _request('PUT', '/user/following/' + username, null, cb); + }; + + // Unfollow user + // ------- + + this.unfollow = function (username, cb) { + _request('DELETE', '/user/following/' + username, null, cb); + }; + + // Create a repo + // ------- + this.createRepo = function (options, cb) { + _request('POST', '/user/repos', options, cb); + }; + }; + + // Repository API + // ======= + + Github.Repository = function (options) { + var repo = options.name; + var user = options.user; + var fullname = options.fullname; + + var that = this; + var repoPath; + + if (fullname) { + repoPath = '/repos/' + fullname; + } else { + repoPath = '/repos/' + user + '/' + repo; + } + + var currentTree = { + branch: null, + sha: null + }; + + // Uses the cache if branch has not been changed + // ------- + + function updateTree(branch, cb) { + if (branch === currentTree.branch && currentTree.sha) { + return cb(null, currentTree.sha); + } + + that.getRef('heads/' + branch, function (err, sha) { + currentTree.branch = branch; + currentTree.sha = sha; + cb(err, sha); + }); + } + + // Get a particular reference + // ------- + + this.getRef = function (ref, cb) { + _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) { + if (err) { + return cb(err); + } + + cb(null, res.object.sha, xhr); + }); + }; + + // Create a new reference + // -------- + // + // { + // "ref": "refs/heads/my-new-branch-name", + // "sha": "827efc6d56897b048c772eb4087f854f46256132" + // } + + this.createRef = function (options, cb) { + _request('POST', repoPath + '/git/refs', options, cb); + }; + + // Delete a reference + // -------- + // + // Repo.deleteRef('heads/gh-pages') + // repo.deleteRef('tags/v1.0') + + this.deleteRef = function (ref, cb) { + _request('DELETE', repoPath + '/git/refs/' + ref, options, cb); + }; + + // Delete a repo + // -------- + + this.deleteRepo = function (cb) { + _request('DELETE', repoPath, options, cb); + }; + + // List all tags of a repository + // ------- + + this.listTags = function (cb) { + _request('GET', repoPath + '/tags', null, cb); + }; + + // List all pull requests of a respository + // ------- + + this.listPulls = function (options, cb) { + options = options || {}; + var url = repoPath + '/pulls'; + var params = []; + + if (typeof options === 'string') { + // Backward compatibility + params.push('state=' + options); + } else { + if (options.state) { + params.push('state=' + encodeURIComponent(options.state)); + } + + if (options.head) { + params.push('head=' + encodeURIComponent(options.head)); + } + + if (options.base) { + params.push('base=' + encodeURIComponent(options.base)); + } + + if (options.sort) { + params.push('sort=' + encodeURIComponent(options.sort)); + } + + if (options.direction) { + params.push('direction=' + encodeURIComponent(options.direction)); + } + + if (options.page) { + params.push('page=' + options.page); + } + + if (options.per_page) { + params.push('per_page=' + options.per_page); + } + } + + if (params.length > 0) { + url += '?' + params.join('&'); + } + + _request('GET', url, null, cb); + }; + + // Gets details for a specific pull request + // ------- + + this.getPull = function (number, cb) { + _request('GET', repoPath + '/pulls/' + number, null, cb); + }; + + // Retrieve the changes made between base and head + // ------- + + this.compare = function (base, head, cb) { + _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb); + }; + + // List all branches of a repository + // ------- + + this.listBranches = function (cb) { + _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) { + if (err) { + return cb(err); + } + + heads = heads.map(function (head) { + return head.ref.replace(/^refs\/heads\//, ''); + }); + + cb(null, heads, xhr); + }); + }; + + // Retrieve the contents of a blob + // ------- + + this.getBlob = function (sha, cb) { + _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw'); + }; + + // For a given file path, get the corresponding sha (blob for files, tree for dirs) + // ------- + + this.getCommit = function (branch, sha, cb) { + _request('GET', repoPath + '/git/commits/' + sha, null, cb); + }; + + // For a given file path, get the corresponding sha (blob for files, tree for dirs) + // ------- + + this.getSha = function (branch, path, cb) { + if (!path || path === '') { + return that.getRef('heads/' + branch, cb); + } + + _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) { + if (err) { + return cb(err); + } + + cb(null, pathContent.sha, xhr); + }); + }; + + // Get the statuses for a particular SHA + // ------- + + this.getStatuses = function (sha, cb) { + _request('GET', repoPath + '/statuses/' + sha, null, cb); + }; + + // Retrieve the tree a commit points to + // ------- + + this.getTree = function (tree, cb) { + _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) { + if (err) { + return cb(err); + } + + cb(null, res.tree, xhr); + }); + }; + + // Post a new blob object, getting a blob SHA back + // ------- + + this.postBlob = function (content, cb) { + if (typeof content === 'string') { + content = { + content: Utf8.encode(content), + encoding: 'utf-8' + }; + } else { + if (typeof Buffer !== 'undefined' && content instanceof Buffer) { + // in NodeJS + content = { + content: content.toString('base64'), + encoding: 'base64' + }; + } else if (typeof Blob !== 'undefined' && content instanceof Blob) { + content = { + content: b64encode(content), + encoding: 'base64' + }; + } else { + throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)'); + } + } + + _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) { + if (err) { + return cb(err); + } + + cb(null, res.sha, xhr); + }); + }; + + // Update an existing tree adding a new blob object getting a tree SHA back + // ------- + + this.updateTree = function (baseTree, path, blob, cb) { + var data = { + base_tree: baseTree, + tree: [{ + path: path, + mode: '100644', + type: 'blob', + sha: blob + }] + }; + + _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) { + if (err) { + return cb(err); + } + + cb(null, res.sha, xhr); + }); + }; + + // Post a new tree object having a file path pointer replaced + // with a new blob SHA getting a tree SHA back + // ------- + + this.postTree = function (tree, cb) { + _request('POST', repoPath + '/git/trees', { + tree: tree + }, function (err, res, xhr) { + if (err) { + return cb(err); + } + + cb(null, res.sha, xhr); + }); + }; + + // Create a new commit object with the current commit SHA as the parent + // and the new tree SHA, getting a commit SHA back + // ------- + + this.commit = function (parent, tree, message, cb) { + var user = new Github.User(); + + user.show(null, function (err, userData) { + if (err) { + return cb(err); + } + + var data = { + message: message, + author: { + name: options.user, + email: userData.email + }, + parents: [parent], + tree: tree + }; + + _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) { + if (err) { + return cb(err); + } + + currentTree.sha = res.sha; // Update latest commit + + cb(null, res.sha, xhr); + }); + }); + }; + + // Update the reference of your head to point to the new commit SHA + // ------- + + this.updateHead = function (head, commit, cb) { + _request('PATCH', repoPath + '/git/refs/heads/' + head, { + sha: commit + }, cb); + }; + + // Show repository information + // ------- + + this.show = function (cb) { + _request('GET', repoPath, null, cb); + }; + + // Show repository contributors + // ------- + + this.contributors = function (cb, retry) { + retry = retry || 1000; + var that = this; + + _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) { + if (err) { + return cb(err); + } + + if (xhr.status === 202) { + setTimeout(function () { + that.contributors(cb, retry); + }, retry); + } else { + cb(err, data, xhr); + } + }); + }; + + // Get contents + // -------- + + this.contents = function (ref, path, cb) { + path = encodeURI(path); + _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), { + ref: ref + }, cb); + }; + + // Fork repository + // ------- + + this.fork = function (cb) { + _request('POST', repoPath + '/forks', null, cb); + }; + + // List forks + // -------- + + this.listForks = function (cb) { + _request('GET', repoPath + '/forks', null, cb); + }; + + // Branch repository + // -------- + + this.branch = function (oldBranch, newBranch, cb) { + if (arguments.length === 2 && typeof arguments[1] === 'function') { + cb = newBranch; + newBranch = oldBranch; + oldBranch = 'master'; + } + + this.getRef('heads/' + oldBranch, function (err, ref) { + if (err && cb) { + return cb(err); + } + + that.createRef({ + ref: 'refs/heads/' + newBranch, + sha: ref + }, cb); + }); + }; + + // Create pull request + // -------- + + this.createPullRequest = function (options, cb) { + _request('POST', repoPath + '/pulls', options, cb); + }; + + // List hooks + // -------- + + this.listHooks = function (cb) { + _request('GET', repoPath + '/hooks', null, cb); + }; + + // Get a hook + // -------- + + this.getHook = function (id, cb) { + _request('GET', repoPath + '/hooks/' + id, null, cb); + }; + + // Create a hook + // -------- + + this.createHook = function (options, cb) { + _request('POST', repoPath + '/hooks', options, cb); + }; + + // Edit a hook + // -------- + + this.editHook = function (id, options, cb) { + _request('PATCH', repoPath + '/hooks/' + id, options, cb); + }; + + // Delete a hook + // -------- + + this.deleteHook = function (id, cb) { + _request('DELETE', repoPath + '/hooks/' + id, null, cb); + }; + + // Read file at given path + // ------- + + this.read = function (branch, path, cb) { + _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true); + }; + + // Remove a file + // ------- + + this.remove = function (branch, path, cb) { + that.getSha(branch, path, function (err, sha) { + if (err) { + return cb(err); + } + + _request('DELETE', repoPath + '/contents/' + path, { + message: path + ' is removed', + sha: sha, + branch: branch + }, cb); + }); + }; + + // Alias for repo.remove for backwards comapt. + // ------- + this.delete = this.remove; + + // Move a file to a new location + // ------- + + this.move = function (branch, path, newPath, cb) { + updateTree(branch, function (err, latestCommit) { + that.getTree(latestCommit + '?recursive=true', function (err, tree) { + // Update Tree + tree.forEach(function (ref) { + if (ref.path === path) { + ref.path = newPath; + } + + if (ref.type === 'tree') { + delete ref.sha; + } + }); + + that.postTree(tree, function (err, rootTree) { + that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) { + that.updateHead(branch, commit, cb); + }); + }); + }); + }); + }; + + // Write file contents to a given branch and path + // ------- + + this.write = function (branch, path, content, message, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + that.getSha(branch, encodeURI(path), function (err, sha) { + var writeOptions = { + message: message, + content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content, + branch: branch, + committer: options && options.committer ? options.committer : undefined, + author: options && options.author ? options.author : undefined + }; + + // If no error, we set the sha to overwrite an existing file + if (!(err && err.error !== 404)) { + writeOptions.sha = sha; + } + + _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb); + }); + }; + + // List commits on a repository. Takes an object of optional parameters: + // sha: SHA or branch to start listing commits from + // path: Only commits containing this file path will be returned + // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address + // since: ISO 8601 date - only commits after this date will be returned + // until: ISO 8601 date - only commits before this date will be returned + // ------- + + this.getCommits = function (options, cb) { + options = options || {}; + var url = repoPath + '/commits'; + var params = []; + + if (options.sha) { + params.push('sha=' + encodeURIComponent(options.sha)); + } + + if (options.path) { + params.push('path=' + encodeURIComponent(options.path)); + } + + if (options.author) { + params.push('author=' + encodeURIComponent(options.author)); + } + + if (options.since) { + var since = options.since; + + if (since.constructor === Date) { + since = since.toISOString(); + } + + params.push('since=' + encodeURIComponent(since)); + } + + if (options.until) { + var until = options.until; + + if (until.constructor === Date) { + until = until.toISOString(); + } + + params.push('until=' + encodeURIComponent(until)); + } + + if (options.page) { + params.push('page=' + options.page); + } + + if (options.perpage) { + params.push('per_page=' + options.perpage); + } + + if (params.length > 0) { + url += '?' + params.join('&'); + } + + _request('GET', url, null, cb); + }; + + // Check if a repository is starred. + // -------- + + this.isStarred = function (owner, repository, cb) { + _request('GET', '/user/starred/' + owner + '/' + repository, null, cb); + }; + + // Star a repository. + // -------- + + this.star = function (owner, repository, cb) { + _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); + }; + + // Unstar a repository. + // -------- + + this.unstar = function (owner, repository, cb) { + _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); + }; + + // Create a new release + // -------- + + this.createRelease = function (options, cb) { + _request('POST', repoPath + '/releases', options, cb); + }; + + // Edit a release + // -------- + + this.editRelease = function (id, options, cb) { + _request('PATCH', repoPath + '/releases/' + id, options, cb); + }; + + // Get a single release + // -------- + + this.getRelease = function (id, cb) { + _request('GET', repoPath + '/releases/' + id, null, cb); + }; + + // Remove a release + // -------- + + this.deleteRelease = function (id, cb) { + _request('DELETE', repoPath + '/releases/' + id, null, cb); + }; + }; + + // Gists API + // ======= + + Github.Gist = function (options) { + var id = options.id; + var gistPath = '/gists/' + id; + + // Read the gist + // -------- + + this.read = function (cb) { + _request('GET', gistPath, null, cb); + }; + + // Create the gist + // -------- + // { + // "description": "the description for this gist", + // "public": true, + // "files": { + // "file1.txt": { + // "content": "String file contents" + // } + // } + // } + + this.create = function (options, cb) { + _request('POST', '/gists', options, cb); + }; + + // Delete the gist + // -------- + + this.delete = function (cb) { + _request('DELETE', gistPath, null, cb); + }; + + // Fork a gist + // -------- + + this.fork = function (cb) { + _request('POST', gistPath + '/fork', null, cb); + }; + + // Update a gist with the new stuff + // -------- + + this.update = function (options, cb) { + _request('PATCH', gistPath, options, cb); + }; + + // Star a gist + // -------- + + this.star = function (cb) { + _request('PUT', gistPath + '/star', null, cb); + }; + + // Untar a gist + // -------- + + this.unstar = function (cb) { + _request('DELETE', gistPath + '/star', null, cb); + }; + + // Check if a gist is starred + // -------- + + this.isStarred = function (cb) { + _request('GET', gistPath + '/star', null, cb); + }; + }; + + // Issues API + // ========== + + Github.Issue = function (options) { + var path = '/repos/' + options.user + '/' + options.repo + '/issues'; + + this.create = function (options, cb) { + _request('POST', path, options, cb); + }; + + this.list = function (options, cb) { + var query = []; + + Object.keys(options).forEach(function (option) { + query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option])); + }); + + _requestAllPages(path + '?' + query.join('&'), !!options.page, cb); + }; + + this.comment = function (issue, comment, cb) { + _request('POST', issue.comments_url, { + body: comment + }, cb); + }; + + this.edit = function (issue, options, cb) { + _request('PATCH', path + '/' + issue, options, cb); + }; + + this.get = function (issue, cb) { + _request('GET', path + '/' + issue, null, cb); + }; + }; + + // Search API + // ========== + + Github.Search = function (options) { + var path = '/search/'; + var query = '?q=' + options.query; + + this.repositories = function (options, cb) { + _request('GET', path + 'repositories' + query, options, cb); + }; + + this.code = function (options, cb) { + _request('GET', path + 'code' + query, options, cb); + }; + + this.issues = function (options, cb) { + _request('GET', path + 'issues' + query, options, cb); + }; + + this.users = function (options, cb) { + _request('GET', path + 'users' + query, options, cb); + }; + }; + + // Rate Limit API + // ========== + + Github.RateLimit = function () { + this.getRateLimit = function (cb) { + _request('GET', '/rate_limit', null, cb); + }; + }; + + return Github; + }; + + // Top Level API + // ------- + + Github.getIssues = function (user, repo) { + return new Github.Issue({ + user: user, + repo: repo + }); + }; + + Github.getRepo = function (user, repo) { + if (!repo) { + return new Github.Repository({ + fullname: user + }); + } else { + return new Github.Repository({ + user: user, + name: repo + }); + } + }; + + Github.getUser = function () { + return new Github.User(); + }; + + Github.getGist = function (id) { + return new Github.Gist({ + id: id + }); + }; + + Github.getSearch = function (query) { + return new Github.Search({ + query: query + }); + }; + + Github.getRateLimit = function () { + return new Github.RateLimit(); + }; + + module.exports = Github; +}); +//# sourceMappingURL=github.js.map diff --git a/dist/github.js.map b/dist/github.js.map new file mode 100644 index 00000000..eb15fe9e --- /dev/null +++ b/dist/github.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["github.js"],"sourcesContent":["(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.utf8, global.axios, global.base64, global.Promise);\n global.github = mod.exports;\n }\n})(this, function (module, Utf8, axios, Base64, Promise) {\n /*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n 'use strict';\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += /\\?/.test(url) ? '&' : '?';\n\n if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for (var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if (options.token || options.username && options.password) {\n config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config).then(function (response) {\n cb(null, response.data || true, response);\n }, function (response) {\n if (response.status === 304) {\n cb(null, response.data || true, response);\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '').split(',').filter(function (link) {\n return (/rel=\"next\"/.test(link)\n );\n }).map(function (link) {\n return (/<(.*)>/.exec(link) || [])[1];\n }).pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [{\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [parent],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(function () {\n that.contributors(cb, retry);\n }, retry);\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function (owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function (owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function (owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function (options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function (id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function (id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function (id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function (options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function (option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function () {\n this.getRateLimit = function (cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function () {\n return new Github.RateLimit();\n };\n\n module.exports = Github;\n});"],"file":"github.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js new file mode 100644 index 00000000..da59303e --- /dev/null +++ b/dist/github.min.js @@ -0,0 +1,2 @@ +!function(e,t){if("function"==typeof define&&define.amd)define(["module","utf8","axios","base-64","es6-promise"],t);else if("undefined"!=typeof exports)t(module,require("utf8"),require("axios"),require("base-64"),require("es6-promise"));else{var n={exports:{}};t(n,e.utf8,e.axios,e.base64,e.Promise),e.github=n.exports}}(this,function(e,t,n,o,s){"use strict";function i(e){return o.encode(t.encode(e))}function u(e){e=e||{};var o=e.apiUrl||"https://api.github.com",s=u._request=function(t,s,u,a,c){function f(){var e=s.indexOf("//")>=0?s:o+s;if(e+=/\?/.test(e)?"&":"?",u&&"object"===("undefined"==typeof u?"undefined":r(u))&&["GET","HEAD","DELETE"].indexOf(t)>-1)for(var n in u)u.hasOwnProperty(n)&&(e+="&"+encodeURIComponent(n)+"="+encodeURIComponent(u[n]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:t,data:u?u:{},url:f()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+i(e.username+":"+e.password)),n(l).then(function(e){a(null,e.data||!0,e)},function(e){304===e.status?a(null,e.data||!0,e):a({path:s,request:e,error:e.status})})},a=u._requestAllPages=function(e,t,n){var o=[];!function i(){s("GET",e,null,function(s,u,r){if(s)return n(s);u instanceof Array||(u=[u]),o.push.apply(o,u);var a=(r.headers.link||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();!a||t?n(s,o,r):(e=a,i())})}()};return u.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),a(n,!!e.page,t)},this.orgs=function(e){s("GET","/user/orgs",null,e)},this.gists=function(e){s("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),o.push("before="+encodeURIComponent(u))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(n+="?"+o.join("&")),s("GET",n,null,t)},this.show=function(e,t){var n=e?"/users/"+e:"/user";s("GET",n,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),a(o,!!t.page,n)},this.userStarred=function(e,t){var n="/users/"+e+"/starred?type=all&per_page=100";a(n,!1,t)},this.userGists=function(e,t){s("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){var n="/orgs/"+e+"/repos?type=all&&page_num=100&sort=updated&direction=desc";a(n,!1,t)},this.follow=function(e,t){s("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){s("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){s("POST","/user/repos",e,t)}},u.Repository=function(e){function n(e,t){return e===l.branch&&l.sha?t(null,l.sha):void f.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,r=e.name,a=e.user,c=e.fullname,f=this;o=c?"/repos/"+c:"/repos/"+a+"/"+r;var l={branch:null,sha:null};this.getRef=function(e,t){s("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){s("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,n){s("DELETE",o+"/git/refs/"+t,e,n)},this.deleteRepo=function(t){s("DELETE",o,e,t)},this.listTags=function(e){s("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var n=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(n+="?"+i.join("&")),s("GET",n,null,t)},this.getPull=function(e,t){s("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,n){s("GET",o+"/compare/"+e+"..."+t,null,n)},this.listBranches=function(e){s("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){s("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,n){s("GET",o+"/git/commits/"+t,null,n)},this.getSha=function(e,t,n){return t&&""!==t?void s("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,o){return e?n(e):void n(null,t.sha,o)}):f.getRef("heads/"+e,n)},this.getStatuses=function(e,t){s("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){s("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,n){if("string"==typeof e)e={content:t.encode(e),encoding:"utf-8"};else if("undefined"!=typeof Buffer&&e instanceof Buffer)e={content:e.toString("base64"),encoding:"base64"};else{if(!("undefined"!=typeof Blob&&e instanceof Blob))throw new Error("Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)");e={content:i(e),encoding:"base64"}}s("POST",o+"/git/blobs",e,function(e,t,o){return e?n(e):void n(null,t.sha,o)})},this.updateTree=function(e,t,n,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:n}]};s("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){s("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,n,i,r){var a=new u.User;a.show(null,function(u,a){if(u)return r(u);var c={message:i,author:{name:e.user,email:a.email},parents:[t],tree:n};s("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,n){s("PATCH",o+"/git/refs/heads/"+e,{sha:t},n)},this.show=function(e){s("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var n=this;s("GET",o+"/stats/contributors",null,function(o,s,i){return o?e(o):void(202===i.status?setTimeout(function(){n.contributors(e,t)},t):e(o,s,i))})},this.contents=function(e,t,n){t=encodeURI(t),s("GET",o+"/contents"+(t?"/"+t:""),{ref:e},n)},this.fork=function(e){s("POST",o+"/forks",null,e)},this.listForks=function(e){s("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void f.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){s("POST",o+"/pulls",e,t)},this.listHooks=function(e){s("GET",o+"/hooks",null,e)},this.getHook=function(e,t){s("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){s("POST",o+"/hooks",e,t)},this.editHook=function(e,t,n){s("PATCH",o+"/hooks/"+e,t,n)},this.deleteHook=function(e,t){s("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,n){s("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,n,!0)},this.remove=function(e,t,n){f.getSha(e,t,function(i,u){return i?n(i):void s("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},n)})},this["delete"]=this.remove,this.move=function(e,t,o,s){n(e,function(n,i){f.getTree(i+"?recursive=true",function(n,u){u.forEach(function(e){e.path===t&&(e.path=o),"tree"===e.type&&delete e.sha}),f.postTree(u,function(n,o){f.commit(i,o,"Deleted "+t,function(t,n){f.updateHead(e,n,s)})})})})},this.write=function(e,t,n,u,r,a){"function"==typeof r&&(a=r,r={}),f.getSha(e,encodeURI(t),function(c,f){var l={message:u,content:"undefined"==typeof r.encode||r.encode?i(n):n,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=f),s("PUT",o+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var n=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(n+="?"+i.join("&")),s("GET",n,null,t)},this.isStarred=function(e,t,n){s("GET","/user/starred/"+e+"/"+t,null,n)},this.star=function(e,t,n){s("PUT","/user/starred/"+e+"/"+t,null,n)},this.unstar=function(e,t,n){s("DELETE","/user/starred/"+e+"/"+t,null,n)},this.createRelease=function(e,t){s("POST",o+"/releases",e,t)},this.editRelease=function(e,t,n){s("PATCH",o+"/releases/"+e,t,n)},this.getRelease=function(e,t){s("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){s("DELETE",o+"/releases/"+e,null,t)}},u.Gist=function(e){var t=e.id,n="/gists/"+t;this.read=function(e){s("GET",n,null,e)},this.create=function(e,t){s("POST","/gists",e,t)},this["delete"]=function(e){s("DELETE",n,null,e)},this.fork=function(e){s("POST",n+"/fork",null,e)},this.update=function(e,t){s("PATCH",n,e,t)},this.star=function(e){s("PUT",n+"/star",null,e)},this.unstar=function(e){s("DELETE",n+"/star",null,e)},this.isStarred=function(e){s("GET",n+"/star",null,e)}},u.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,n){s("POST",t,e,n)},this.list=function(e,n){var o=[];Object.keys(e).forEach(function(t){o.push(encodeURIComponent(t)+"="+encodeURIComponent(e[t]))}),a(t+"?"+o.join("&"),!!e.page,n)},this.comment=function(e,t,n){s("POST",e.comments_url,{body:t},n)},this.edit=function(e,n,o){s("PATCH",t+"/"+e,n,o)},this.get=function(e,n){s("GET",t+"/"+e,null,n)}},u.Search=function(e){var t="/search/",n="?q="+e.query;this.repositories=function(e,o){s("GET",t+"repositories"+n,e,o)},this.code=function(e,o){s("GET",t+"code"+n,e,o)},this.issues=function(e,o){s("GET",t+"issues"+n,e,o)},this.users=function(e,o){s("GET",t+"users"+n,e,o)}},u.RateLimit=function(){this.getRateLimit=function(e){s("GET","/rate_limit",null,e)}},u}var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};s.polyfill&&s.polyfill(),u.getIssues=function(e,t){return new u.Issue({user:e,repo:t})},u.getRepo=function(e,t){return t?new u.Repository({user:e,name:t}):new u.Repository({fullname:e})},u.getUser=function(){return new u.User},u.getGist=function(e){return new u.Gist({id:e})},u.getSearch=function(e){return new u.Search({query:e})},u.getRateLimit=function(){return new u.RateLimit},e.exports=u}); +//# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map new file mode 100644 index 00000000..5d426aa9 --- /dev/null +++ b/dist/github.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["github.min.js"],"names":["global","factory","define","amd","exports","module","require","mod","utf8","axios","base64","Promise","github","this","Utf8","Base64","b64encode","string","encode","Github","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","_typeof","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","token","username","password","Authorization","then","response","status","request","error","_requestAllPages","singlePage","results","iterate","err","res","xhr","Array","push","apply","next","link","split","filter","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","Buffer","toString","Blob","Error","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","Object","keys","option","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","Symbol","iterator","obj","polyfill","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.utf8, global.axios, global.base64, global.Promise);\n global.github = mod.exports;\n }\n})(this, function (module, Utf8, axios, Base64, Promise) {\n /*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n 'use strict';\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += /\\?/.test(url) ? '&' : '?';\n\n if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for (var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if (options.token || options.username && options.password) {\n config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config).then(function (response) {\n cb(null, response.data || true, response);\n }, function (response) {\n if (response.status === 304) {\n cb(null, response.data || true, response);\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '').split(',').filter(function (link) {\n return (/rel=\"next\"/.test(link)\n );\n }).map(function (link) {\n return (/<(.*)>/.exec(link) || [])[1];\n }).pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [{\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [parent],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(function () {\n that.contributors(cb, retry);\n }, retry);\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function (owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function (owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function (owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function (options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function (id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function (id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function (id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function (options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function (option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function () {\n this.getRateLimit = function (cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function () {\n return new Github.RateLimit();\n };\n\n module.exports = Github;\n});"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 4da37a2b..801abddc 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,110 +1,69 @@ 'use strict'; var gulp = require('gulp'); -var jshint = require('gulp-jshint'); + +var babel = require('gulp-babel'); +var istanbul = require('gulp-istanbul'); var jscs = require('gulp-jscs'); +var jshint = require('gulp-jshint'); + +var mocha = require('gulp-mocha'); var rename = require('gulp-rename'); +var stylish = require('gulp-jscs-stylish'); + var browserify = require('browserify'); -var source = require('vinyl-source-stream'); var buffer = require('vinyl-buffer'); -var uglify = require('gulp-uglify'); -var sourcemaps = require('gulp-sourcemaps'); var del = require('del'); -var stylish = require('gulp-jscs-stylish'); var path = require('path'); -var karma = require('karma'); -var babel = require('gulp-babel'); - -function runTests(singleRun, isCI, done) { - var reporters = ['mocha']; - var preprocessors = {}; - - var files = [ - path.join(__dirname, 'test/vendor/*.js'), // PhantomJS 1.x polyfills - path.join(__dirname, 'test/test.*.js') - ]; - - if (singleRun) { - preprocessors['test/test.*.js'] = ['browserify']; - reporters.push('coverage'); - } - - files.push({ - pattern: path.join(__dirname, 'test/gh.png'), - watched: false, - included: false - }); - - var localConfig = { - files: files, - configFile: path.join(__dirname, './karma.conf.js'), - singleRun: singleRun, - autoWatch: !singleRun, - reporters: reporters, - preprocessors: preprocessors - }; - - if (isCI) { - localConfig.sauceLabs = { - testName: 'GitHub.js UAT tests', - idleTimeout: 120000, - recordVideo: false - }; - - // Increase timeouts massively so Karma doesn't timeout in Sauce tunnel. - localConfig.browserNoActivityTimeout = 400000; - localConfig.captureTimeout = 120000; - localConfig.customLaunchers = sauceLaunchers; - localConfig.browsers = Object.keys(sauceLaunchers); - reporters.push('saucelabs'); - - // Set Mocha timeouts to longer. - localConfig.client = { - mocha: { - timeout: 20000 - } - }; - } - - var server = new karma.Server(localConfig, function(failCount) { - done(failCount ? new Error('Failed ' + failCount + ' tests.') : null); - }); - - server.start(); -} // End runTests() +var Promise = require('es6-promise').Promise; +var source = require('vinyl-source-stream'); +var sourcemaps = require('gulp-sourcemaps'); +var uglify = require('gulp-uglify'); gulp.task('lint', function() { - return gulp.src([ + var sources = [ path.join(__dirname, '/*.js'), path.join(__dirname, '/src/*.js'), path.join(__dirname, '/test/*.js') - ], - { + ]; + var opts = { base: './' - }) - .pipe(jshint()) - .pipe(jscs({ - fix: true - })) - .pipe(stylish.combineWithHintResults()) - .pipe(jscs.reporter()) - .pipe(jshint.reporter('jshint-stylish')) - .pipe(gulp.dest('.')); -}); + }; -gulp.task('test', function(done) { - runTests(true, false, done); + return gulp.src(sources, opts) + .pipe(jshint()) + .pipe(jscs()) + .pipe(stylish.combineWithHintResults()) + .pipe(jscs.reporter()) + .pipe(jshint.reporter('jshint-stylish')) + .pipe(gulp.dest('.')) + ; }); -gulp.task('test:ci', function(done) { - runTests(true, true, done); +gulp.task('coverage', function() { + return gulp.src('src/**/*.js') + .pipe(istanbul()) + .pipe(istanbul.hookRequire()) + ; }); -gulp.task('test:auto', function(done) { - runTests(false, false, done); +gulp.task('test:mocha', ['coverage'], function() { + var srcOpts = { + read: false + }; + var mochaOpts = { + timeout: 30000, + slow: 5000 + }; + + return gulp.src('test/test.*.js', srcOpts) + .pipe(mocha(mochaOpts)) + .pipe(istanbul.writeReports()) + ; }); -gulp.task('clean', function () { - return del('dist/*'); + +gulp.task('clean', function() { + return Promise.all([del('dist/*'), del('coverage/*')]); }); gulp.task('build', function() { @@ -130,17 +89,15 @@ gulp.task('build', function() { .pipe(gulp.dest('dist')) ; - var babeled = gulp.src('src/github.js') + gulp.src('src/github.js') .pipe(babel()) - ; - - babeled .pipe(sourcemaps.init()) .pipe(sourcemaps.write('.')) .pipe(gulp.dest('dist')) ; - return babeled + return gulp.src('src/github.js') + .pipe(babel()) .pipe(sourcemaps.init()) .pipe(rename({ extname: '.min.js' @@ -152,48 +109,5 @@ gulp.task('build', function() { }); gulp.task('default', ['clean'], function() { - gulp.start('lint', 'test', 'build'); + gulp.start('lint', 'test:mocha', 'build'); }); - -var sauceLaunchers = { - SL_Chrome: { - base: 'SauceLabs', - browserName: 'chrome', - version: '45' - }, - SL_Firefox: { - base: 'SauceLabs', - browserName: 'firefox', - version: '39' - }, - SL_Safari: { - base: 'SauceLabs', - browserName: 'safari', - platform: 'OS X 10.10', - version: '8' - }, - SL_IE_9: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 7', - version: '9' - }, - SL_IE_10: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 2012', - version: '10' - }, - SL_IE_11: { - base: 'SauceLabs', - browserName: 'internet explorer', - platform: 'Windows 8.1', - version: '11' - }, - SL_iOS: { - base: 'SauceLabs', - browserName: 'iphone', - platform: 'OS X 10.10', - version: '8.1' - } -}; diff --git a/package.json b/package.json index f5fdb956..30c2abfc 100644 --- a/package.json +++ b/package.json @@ -15,38 +15,31 @@ "babelify": "^7.2.0", "browserify": "^13.0.0", "browserify-istanbul": "^0.2.1", - "chai": "^3.4.1", "codecov": "^1.0.1", "del": "^2.2.0", "gulp": "^3.9.0", "gulp-babel": "^6.1.2", + "gulp-istanbul": "^0.10.3", "gulp-jscs": "^3.0.2", "gulp-jscs-stylish": "^1.3.0", "gulp-jshint": "^2.0.0", + "gulp-mocha": "^2.2.0", "gulp-rename": "^1.2.2", "gulp-sourcemaps": "^1.6.0", "gulp-uglify": "^1.5.1", "istanbul": "^0.4.2", "jshint": "^2.9.1", "jshint-stylish": "^2.1.0", - "karma": "^0.13.19", - "karma-browserify": "^4.4.2", - "karma-chai": "^0.1.0", - "karma-coverage": "^0.5.3", - "karma-json-fixtures-preprocessor": "0.0.6", - "karma-mocha": "^0.2.1", - "karma-mocha-reporter": "^1.1.5", - "karma-phantomjs-launcher": "^0.2.3", - "karma-sauce-launcher": "^0.3.0", "mocha": "^2.3.4", - "phantomjs": "^2.1.3", + "must": "^0.13.1", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" }, "scripts": { "test": "gulp test && gulp lint", "lint": "gulp lint", - "codecov": "cat coverage/*/lcov.info | codecov" + "codecov": "node_modules/.bin/codecov", + "show-coverage-html": "open coverage/lcov-report/index.html" }, "repository": { "type": "git", diff --git a/src/github.js b/src/github.js index d8d57f26..3fa635d2 100644 --- a/src/github.js +++ b/src/github.js @@ -78,7 +78,7 @@ function Github(options) { cb( null, response.data || true, - response.request + response ); } else { cb({ diff --git a/test/.jshintrc b/test/.jshintrc new file mode 100644 index 00000000..910bdea2 --- /dev/null +++ b/test/.jshintrc @@ -0,0 +1,9 @@ +{ + "browser": true, + "mocha": true, + "node": true, + "globals": { + "require": false, + "define": false + } +} diff --git a/test/gh.png b/test/fixtures/gh.png similarity index 100% rename from test/gh.png rename to test/fixtures/gh.png diff --git a/test/fixtures/gist.json b/test/fixtures/gist.json new file mode 100644 index 00000000..7a78e6e7 --- /dev/null +++ b/test/fixtures/gist.json @@ -0,0 +1,9 @@ +{ + "description": "This is a test gist", + "public": true, + "files": { + "README.md": { + "content": "Hello World" + } + } +} diff --git a/test/fixtures/imageBlob.js b/test/fixtures/imageBlob.js new file mode 100644 index 00000000..c8f295e4 --- /dev/null +++ b/test/fixtures/imageBlob.js @@ -0,0 +1,55 @@ +'use strict'; + +function loadImage(imageReady) { + if (typeof window === 'undefined') { // We're in NodeJS + loadInNode(imageReady); + } else { // We're in the browser + if (typeof window._phantom !== 'undefined') { + loadInPhantom(imageReady); + } else { + loadInRealBrowser(imageReady); + } + } +} + +function loadInNode(imageReady) { + var fs = require('fs'); + var path = require('path'); + + var imageBlob = fs.readFileSync(path.join(__dirname, 'gh.png')); // This is a Buffer(). + var imageB64 = imageBlob.toString('base64'); + + imageReady(imageB64, imageBlob); +} + +function loadInPhantom(imageReady) { + var xhr = new XMLHttpRequest(); + + xhr.responseType = 'blob'; + xhr.open('GET', 'base/test/fixtures/gh.png'); + xhr.onload = function() { + var reader = new FileReader(); + + reader.onloadend = function() { + var imageB64 = btoa(reader.result); + var imageBlob = reader.result; + + imageReady(imageB64, imageBlob); + }; + + reader.readAsBinaryString(xhr.response); + }; + + xhr.send(); +} + +function loadInRealBrowser(imageReady) { + // jscs:disable + var imageB64 = 'iVBORw0KGgoAAAANSUhEUgAAACsAAAAmCAAAAAB4qD3CAAABgElEQVQ4y9XUsUocURQGYN/pAyMWBhGtrEIMiFiooGuVIoYsSBAsRSQvYGFWC4uFhUBYsilXLERQsDA20YAguIbo5PQp3F3inVFTheSvZoavGO79z+mJP0/Pv2nPtlfLpfLq9tljNquO62S8mj1kmy/8nrHm/Xaz1930bt5n1+SzVmyrilItsod9ON0td1V59xR9hwV2HsMRsbfROLo4amzsRcQw5vO2CZPJEU5CM2cXYTCxg7CY2mwIVhK7AkNZYg9g4CqxVwNwkNg6zOTKMQP1xFZgKWeXoJLYdSjl7BysJ7YBIzk7Ap8TewLOE3oOTtIz6y/64bfQn55ZTIAPd2gNTOTurcbzp7z50v1y/Pq2Q7Wczca8vFjG6LvbMo92hiPL96xO+eYVPkVExMdONetFXZ+l+eP9cuV7RER8a9PZwrloTXv2tfv285ZOt4rnrTXlydxCu9sZmGrdN8eXC3ATERHXsHD5wC7ZL3HdsaX9R3bUzlb7YWvn/9ipf93+An8cHsx3W3WHAAAAAElFTkSuQmCC'; + var imageBlob = new Blob(); + // jscs:enable + + imageReady(imageB64, imageBlob); +} + +module.exports = loadImage; diff --git a/test/user.json b/test/fixtures/user.json similarity index 100% rename from test/user.json rename to test/fixtures/user.json diff --git a/test/helpers.js b/test/helpers.js new file mode 100644 index 00000000..d85f3f94 --- /dev/null +++ b/test/helpers.js @@ -0,0 +1,49 @@ +'use strict'; + +var expect = require('must'); +var STANDARD_DELAY = 200; // 200ms between nested calls to the API so things settle + +function assertSuccessful(done, cb) { + return function(err, res, xhr) { + try { + expect(err).not.to.exist(); + expect(res).to.exist(); + expect(xhr).to.be.an.object(); + + if (cb) { + setTimeout(function () { + cb(err, res, xhr); + }, STANDARD_DELAY); + } else { + done(); + } + } catch(e) { + done(e); + } + }; +} + +function assertFailure(done, cb) { + return function(err) { + try { + expect(err).to.exist(); + expect(err).to.have.ownProperty('path'); + expect(err.request).to.exist(); + + if (cb) { + setTimeout(function () { + cb(err); + }, STANDARD_DELAY); + } else { + done(); + } + } catch(e) { + done(e); + } + }; +} + +module.exports = { + assertSuccessful: assertSuccessful, + assertFailure: assertFailure +}; diff --git a/test/test.auth.js b/test/test.auth.js index 154a3cae..09d0cc0b 100644 --- a/test/test.auth.js +++ b/test/test.auth.js @@ -1,59 +1,96 @@ 'use strict'; var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var github, user; -describe('Github constructor', function() { - before(function() { - github = new Github({ - username: testUser.USERNAME, - password: testUser.PASSWORD, - auth: 'basic' +var expect = require('must'); +var testUser = require('./fixtures/user.json'); +var assertSuccessful = require('./helpers').assertSuccessful; +var assertFailure = require('./helpers').assertFailure; + +describe('Github', function() { + var github, user; + + describe('with authentication', function() { + before(function() { + github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' + }); + + user = github.getUser(); }); - user = github.getUser(); - }); + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); + }); - it('should authenticate and return no errors', function(done) { - user.notifications(function(err) { - should.not.exist(err); - done(); + it('should authenticate and return no errors', function(done) { + user.notifications(assertSuccessful(done)); }); }); -}); -describe('Github constructor without authentication data', function() { - it('should read public information', function(done) { - var github = new Github(); - var gist = github.getGist('f1c0f84e53aa6b98ec03'); + describe('without authentication', function() { + before(function() { + github = new Github(); + }); + + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); + }); + + it('should read public information', function(done) { + var gist = github.getGist('f1c0f84e53aa6b98ec03'); + + gist.read(function(err, res, xhr) { + try { + expect(err).not.to.exist(); + expect(res).to.exist(); + expect(xhr).to.be.an.object(); + + done(); + } catch(e) { + try { + if (err && err.request.headers['x-ratelimit-remaining'] === '0') { + done(); - gist.read(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.should.be.an('object'); + return; + } + } catch(e2) { + done(e); + } - done(); + done(e); + } + }); }); }); -}); -describe('Github constructor (failing case)', function() { - before(function() { - github = new Github({ - username: testUser.USERNAME, - password: 'fake124', - auth: 'basic' + describe('with bad authentication', function() { + before(function() { + github = new Github({ + username: testUser.USERNAME, + password: 'fake124', + auth: 'basic' + }); + + user = github.getUser(); }); - user = github.getUser(); - }); + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); + }); - it('should fail authentication and return err', function(done) { - user.notifications(function(err) { - err.error.should.equal(401, 'Return 401 status for bad auth'); - JSON.parse(err.request.responseText).message.should.equal('Bad credentials'); - done(); + it('should fail authentication and return err', function(done) { + user.notifications(assertFailure(done, function(err) { + expect(err.error).to.be.equal(401, 'Return 401 status for bad auth'); + expect(err.request.data.message).to.equal('Bad credentials'); + + done(); + })); }); }); -}); \ No newline at end of file +}); diff --git a/test/test.gist.js b/test/test.gist.js index a20f6724..2f8bc8a4 100644 --- a/test/test.gist.js +++ b/test/test.gist.js @@ -1,11 +1,14 @@ 'use strict'; var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var github; + +var expect = require('must'); +var testUser = require('./fixtures/user.json'); +var testGist = require('./fixtures/gist.json'); +var assertSuccessful = require('./helpers').assertSuccessful; describe('Github.Gist', function() { - var gist; + var gist, gistId, github; before(function() { github = new Github({ @@ -13,92 +16,68 @@ describe('Github.Gist', function() { password: testUser.PASSWORD, auth: 'basic' }); - - gist = github.getGist('f1c0f84e53aa6b98ec03'); }); - it('should read gist', function(done) { - gist.read(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.should.have.property('description', 'This is a test gist'); - res.files['README.md'].should.have.property('content', 'Hello World'); - - done(); + describe('reading', function() { + before(function() { + gist = github.getGist('f1c0f84e53aa6b98ec03'); }); - }); - - it('should star', function(done) { - gist.star(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - gist.isStarred(function(err) { - should.not.exist(err); + it('should read a gist', function(done) { + gist.read(assertSuccessful(done, function(err, gist) { + expect(gist).to.have.own('description', testGist.description); + expect(gist.files).to.have.keys(Object.keys(testGist.files)); + expect(gist.files['README.md']).to.have.own('content', testGist.files['README.md'].content); done(); - }); + })); }); }); -}); -describe('Creating new Github.Gist', function() { - var gist; + describe('creating/modifiying', function() { + before(function() { + gist = github.getGist(); + }); - before(function() { - gist = github.getGist(); - }); + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); + }); - it('should create gist', function(done) { - var gistData = { - description: 'This is a test gist', - public: true, - files: { - 'README.md': { - content: 'Hello World' - } - } - }; + it('should create gist', function(done) { + gist.create(testGist, assertSuccessful(done, function(err, gist) { + expect(gist).to.have.own('id'); + expect(gist).to.have.own('public', testGist.public); + expect(gist).to.have.own('description', testGist.description); + gistId = gist.id; - gist.create(gistData, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.should.have.property('description', gistData.description); - res.should.have.property('public', gistData.public); - res.should.have.property('id').to.be.a('string'); + done(); + })); + }); - done(); + it('should star a gist', function(done) { + gist = github.getGist(gistId); + gist.star(assertSuccessful(done, function() { + gist.isStarred(assertSuccessful(done, function(err, result) { + expect(result).to.be(true); + done(); + })); + })); }); }); -}); - -describe('deleting a Github.Gist', function() { - var gist; - - before(function(done) { - var gistData = { - description: 'This is a test gist', - public: true, - files: { - 'README.md': { - content: 'Hello World' - } - } - }; - github.getGist().create(gistData, function(err, res) { - gist = github.getGist(res.id); - - done(); + describe('deleting', function() { + before(function() { + gist = github.getGist(gistId); }); - }); - it('should delete gist', function(done) { - gist.delete(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); + }); - done(); + it('should delete gist', function(done) { + gist.delete(assertSuccessful(done)); }); }); -}); \ No newline at end of file +}); diff --git a/test/test.issue.js b/test/test.issue.js index a4c6c1a9..1b8e8058 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -1,11 +1,13 @@ 'use strict'; var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var github, issues; + +var expect = require('must'); +var testUser = require('./fixtures/user.json'); +var assertSuccessful = require('./helpers').assertSuccessful; describe('Github.Issue', function() { - var issue; + var github, remoteIssues, remoteIssue; before(function() { github = new Github({ @@ -14,65 +16,67 @@ describe('Github.Issue', function() { auth: 'basic' }); - issues = github.getIssues(testUser.USERNAME, 'TestRepo'); + remoteIssues = github.getIssues(testUser.USERNAME, 'TestRepo'); }); - it('should create issue', function(done) { - issues.create({ - title: 'New issue', - body: 'New issue body' - }, function(err, issue, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - should.exist(issue.url); - issue.title.should.equal('New issue'); - issue.body.should.equal('New issue body'); - - done(); - }); - }); + describe('reading', function() { + it('should list issues', function(done) { + remoteIssues.list({}, assertSuccessful(done, function(err, issues) { + expect(issues).to.be.an.array(); + remoteIssue = issues[0]; - it('should list issues', function(done) { - issues.list({}, function(err, issues, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - issues.should.have.length.above(0); + done(); + })); + }); - issue = issues[0]; + it('should get issue', function(done) { + remoteIssues.get(remoteIssue.number, assertSuccessful(done, function(err, issue) { + expect(issue).to.have.own('number', remoteIssue.number); - done(); + done(); + })); }); }); - it('should post issue comment', function(done) { - issues.comment(issue, 'Comment test', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.body.should.equal('Comment test'); + describe('creating/modifiying', function() { + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); + }); + + it('should create issue', function(done) { + var issue = { + title: 'New issue', + body: 'New issue body' + }; + + remoteIssues.create(issue, assertSuccessful(done, function(err, issue) { + expect(issue).to.have.own('url'); + expect(issue).to.have.own('title', issue.title); + expect(issue).to.have.own('body', issue.body); - done(); + done(); + })); }); - }); - it('should edit issues title', function(done) { - issues.edit(issue.number, { - title: 'Edited title' - }, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.title.should.equal('Edited title'); + it('should post issue comment', function(done) { + remoteIssues.comment(remoteIssue, 'Comment test', assertSuccessful(done, function(err, issue) { + expect(issue).to.have.own('body', 'Comment test'); - done(); + done(); + })); }); - }); - it('should get issue', function(done) { - issues.get(issue.number, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.number.should.equal(issue.number); + it('should edit issues title', function(done) { + var newProps = { + title: 'Edited title' + }; + + remoteIssues.edit(remoteIssue.number, newProps, assertSuccessful(done, function(err, issue) { + expect(issue).to.have.own('title', newProps.title); - done(); + done(); + })); }); }); }); diff --git a/test/test.rate-limit.js b/test/test.rate-limit.js index ec4d0083..b3d85fb4 100644 --- a/test/test.rate-limit.js +++ b/test/test.rate-limit.js @@ -1,10 +1,14 @@ 'use strict'; var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var github, rateLimit; + +var expect = require('must'); +var testUser = require('./fixtures/user.json'); +var assertSuccessful = require('./helpers').assertSuccessful; describe('Github.RateLimit', function() { + var github, rateLimit; + before(function() { github = new Github({ username: testUser.USERNAME, @@ -16,17 +20,17 @@ describe('Github.RateLimit', function() { }); it('should get rate limit', function(done) { - rateLimit.getRateLimit(function(err, rateInfo, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - rateInfo.should.be.an('object'); - rateInfo.should.have.deep.property('rate.limit'); - rateInfo.rate.limit.should.be.a('number'); - rateInfo.should.have.deep.property('rate.remaining'); - rateInfo.rate.remaining.should.be.a('number'); - rateInfo.rate.remaining.should.be.at.most(rateInfo.rate.limit); + rateLimit.getRateLimit(assertSuccessful(done, function(err, rateInfo) { + var rate = rateInfo.rate; + + expect(rate).to.be.an.object(); + expect(rate).to.have.own('limit'); + expect(rate).to.have.own('remaining'); + expect(rate.limit).to.be.a.number(); + expect(rate.remaining).to.be.a.number(); + expect(rate.remaining).to.be.at.most(rateInfo.rate.limit); done(); - }); + })); }); }); diff --git a/test/test.repo.js b/test/test.repo.js index dc99f85d..e291c000 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -1,702 +1,551 @@ 'use strict'; var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var RELEASE_TAG = 'foo'; -var RELEASE_NAME = 'My awesome release'; -var RELEASE_BODY = 'Foo bar bazzy baz'; -var STATUS_URL = 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; -var github, repo, user, imageB64, imageBlob, sha, releaseId; - -if (typeof window === 'undefined') { // We're in NodeJS - var fs = require('fs'); - var path = require('path'); - - imageBlob = fs.readFileSync(path.join(__dirname, 'gh.png')); // This is a Buffer(). - imageB64 = imageBlob.toString('base64'); -} else { // We're in the browser - if (typeof window._phantom !== 'undefined') { - var xhr = new XMLHttpRequest(); - - xhr.responseType = 'blob'; - xhr.open('GET', 'base/test/gh.png'); - xhr.onload = function() { - var reader = new FileReader(); - - reader.onloadend = function() { - imageB64 = btoa(reader.result); - imageBlob = reader.result; - console.log(imageBlob); - }; - - reader.readAsBinaryString(xhr.response); - }; - - xhr.send(); - } else { - // jscs:disable - imageB64 = 'iVBORw0KGgoAAAANSUhEUgAAACsAAAAmCAAAAAB4qD3CAAABgElEQVQ4y9XUsUocURQGYN/pAyMWBhGtrEIMiFiooGuVIoYsSBAsRSQvYGFWC4uFhUBYsilXLERQsDA20YAguIbo5PQp3F3inVFTheSvZoavGO79z+mJP0/Pv2nPtlfLpfLq9tljNquO62S8mj1kmy/8nrHm/Xaz1930bt5n1+SzVmyrilItsod9ON0td1V59xR9hwV2HsMRsbfROLo4amzsRcQw5vO2CZPJEU5CM2cXYTCxg7CY2mwIVhK7AkNZYg9g4CqxVwNwkNg6zOTKMQP1xFZgKWeXoJLYdSjl7BysJ7YBIzk7Ap8TewLOE3oOTtIz6y/64bfQn55ZTIAPd2gNTOTurcbzp7z50v1y/Pq2Q7Wczca8vFjG6LvbMo92hiPL96xO+eYVPkVExMdONetFXZ+l+eP9cuV7RER8a9PZwrloTXv2tfv285ZOt4rnrTXlydxCu9sZmGrdN8eXC3ATERHXsHD5wC7ZL3HdsaX9R3bUzlb7YWvn/9ipf93+An8cHsx3W3WHAAAAAElFTkSuQmCC'; - imageBlob = new Blob(); - // jscs:enable - } -} +var expect = require('must'); +var testUser = require('./fixtures/user.json'); +var loadImage = require('./fixtures/imageBlob'); +var assertSuccessful = require('./helpers').assertSuccessful; +var assertFailure = require('./helpers').assertFailure; describe('Github.Repository', function() { - before(function() { + var github, remoteRepo, user, imageB64, imageBlob; + var testRepoName = Math.floor(Math.random() * 100000).toString(); + var v10_4sha = '20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; + var statusUrl = 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; + + before(function(done) { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, auth: 'basic' }); - repo = github.getRepo('michael', 'github'); - }); - - it('should show repo', function(done) { - repo.show(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.full_name.should.equal('michael/github'); // jscs:ignore - + loadImage(function(b64, blob) { + imageB64 = b64; + imageBlob = blob; done(); }); }); - it('should get blob', function(done) { - repo.getSha('master', 'README.md', function(err, sha) { - repo.getBlob(sha, function(err, content, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - content.indexOf('# Github.js').should.be.above(-1); - - done(); - }); + describe('reading', function() { + before(function() { + remoteRepo = github.getRepo('michael', 'github'); }); - }); - - it('should show repo contents', function(done) { - repo.contents('master', '', function(err, contents, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - contents.should.be.instanceof(Array); - - var readme = contents.filter(function(content) { - return content.path === 'README.md'; - }); - readme.should.have.length(1); - readme[0].should.have.property('type', 'file'); + it('should show repo', function(done) { + remoteRepo.show(assertSuccessful(done, function(err, repo) { + expect(repo).to.have.own('full_name', 'michael/github'); - done(); + done(); + })); }); - }); - it('should get tree', function(done) { - repo.getTree('master', function(err, tree, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - tree.should.be.instanceof(Array); - tree.should.have.length.above(0); + it('should get blob', function(done) { + remoteRepo.getSha('master', 'README.md', assertSuccessful(done, function(err, sha) { + remoteRepo.getBlob(sha, assertSuccessful(done, function(err, content) { + expect(content).to.be.include('# Github.js'); - done(); + done(); + })); + })); }); - }); - it('should fork repo', function(done) { - repo.fork(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + it('should show repo contents', function(done) { + remoteRepo.contents('master', '', assertSuccessful(done, function(err, contents) { + expect(contents).to.be.an.array(); - // @TODO write better assertion. - done(); - }); - }); + var readme = contents.filter(function(content) { + return content.path === 'README.md'; + }); - it('should list forks of repo', function(done) { - repo.listForks(function(err, forks, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + expect(readme).to.have.length(1); + expect(readme[0]).to.have.own('type', 'file'); - // @TODO write better assertion. - done(); + done(); + })); }); - }); - it('should list commits with no options', function(done) { - repo.getCommits(null, function(err, commits, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - commits.should.be.instanceof(Array); - commits.should.have.length.above(0); - commits[0].should.have.property('commit'); - commits[0].should.have.property('author'); + it('should get tree', function(done) { + remoteRepo.getTree('master', assertSuccessful(done, function(err, tree) { + expect(tree).to.be.an.array(); + expect(tree.length).to.be.above(0); - done(); + done(); + })); }); - }); - it('should list commits with all options', function(done) { - var sinceDate = new Date(2015, 0, 1); - var untilDate = new Date(2016, 0, 20); - var options = { - sha: 'master', - path: 'test', - author: 'AurelioDeRosa', - since: sinceDate, - until: untilDate - }; - - repo.getCommits(options, function(err, commits, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - commits.should.be.instanceof(Array); - commits.should.have.length.above(0); - commits[0].should.have.property('commit'); - commits[0].should.have.deep.property('author.login', 'AurelioDeRosa'); - (new Date(commits[0].commit.author.date)).getTime().should.be.within(sinceDate.getTime(), untilDate.getTime()); + it('should fork repo', function(done) { + remoteRepo.fork(assertSuccessful(done)); + }); - done(); + it('should list forks of repo', function(done) { + remoteRepo.listForks(assertSuccessful(done, function(err, forks) { + expect(forks).to.be.an.array(); + expect(forks.length).to.be.above(0); + done(); + })); }); - }); - it('should show repo contributors', function(done) { - repo.contributors(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.should.be.instanceof(Array); - res.should.have.length.above(1); - should.exist(res[0].author); - should.exist(res[0].total); - should.exist(res[0].weeks); + it('should list commits with no options', function(done) { + remoteRepo.getCommits(null, assertSuccessful(done, function(err, commits) { + expect(commits).to.be.an.array(); + expect(commits.length).to.be.above(0); - done(); - }); - }); + expect(commits[0]).to.have.own('commit'); + expect(commits[0]).to.have.own('author'); + + done(); + })); + }); + + it('should list commits with all options', function(done) { + var sinceDate = new Date(2015, 0, 1); + var untilDate = new Date(2016, 0, 20); + var options = { + sha: 'master', + path: 'test', + author: 'AurelioDeRosa', + since: sinceDate, + until: untilDate + }; - // @TODO repo.branch, repo.pull + remoteRepo.getCommits(options, assertSuccessful(done, function(err, commits) { + expect(commits).to.be.an.array(); + expect(commits.length).to.be.above(0); - it('should list repo branches', function(done) { - repo.listBranches(function(err, branches, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + var commit = commits[0]; + var commitDate = new Date(commit.commit.author.date); - done(); + expect(commit).to.have.own('commit'); + expect(commit.author).to.have.own('login', 'AurelioDeRosa'); + expect(commitDate.getTime()).to.be.between(sinceDate.getTime(), untilDate.getTime()); + done(); + })); }); - }); - it('should read repo', function(done) { - repo.read('master', 'README.md', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.indexOf('# Github.js').should.be.above(-1); + it('should show repo contributors', function(done) { + remoteRepo.contributors(assertSuccessful(done, function(err, contributors) { + expect(contributors).to.be.an.array(); + expect(contributors.length).to.be.above(1); - done(); - }); - }); + var contributor = contributors[0]; - it('should get commit from repo', function(done) { - repo.getCommit('master', '20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, commit, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - commit.message.should.equal('v0.10.4'); - commit.author.date.should.equal('2015-03-20T17:01:42Z'); + expect(contributor).to.have.own('author'); + expect(contributor).to.have.own('total'); + expect(contributor).to.have.own('weeks'); - done(); + done(); + })); }); - }); - it('should get statuses for a SHA from a repo', function(done) { - repo.getStatuses('20fcff9129005d14cc97b9d59b8a3d37f4fb633b', function(err, statuses, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - statuses.length.should.equal(6); - statuses.every(function(status) { - return status.url === STATUS_URL; - }).should.equal(true); + it('should show repo collaborators', function(done) { + remoteRepo.collaborators(assertSuccessful(done, function(err, collaborators) { + expect(collaborators).to.be.an.array(); + expect(collaborators).to.have.length(1); - done(); - }); - }); + var collaborator = collaborators[0]; - it('should get a SHA from a repo', function(done) { - repo.getSha('master', '.gitignore', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + expect(collaborator).to.have.own('login', testUser.USERNAME); + expect(collaborator).to.have.own('id'); + expect(collaborator).to.have.own('permissions'); - done(); + done(); + })); }); - }); - - it('should get a repo by fullname', function(done) { - var repo2 = github.getRepo('michael/github'); - repo2.show(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.full_name.should.equal('michael/github'); // jscs:ignore + // @TODO repo.branch, repo.pull - done(); + it('should list repo branches', function(done) { + remoteRepo.listBranches(assertSuccessful(done)); }); - }); - it('should check if the repo is starred', function(done) { - repo.isStarred('michael', 'github', function(err) { - err.error.should.equal(404); - err.request.should.be.instanceof(XMLHttpRequest); + it('should read repo', function(done) { + remoteRepo.read('master', 'README.md', assertSuccessful(done, function(err, text) { + expect(text).to.contain('# Github.js'); - done(); + done(); + })); }); - }); -}); -var repoTest = Math.floor(Math.random() * 100000); + it('should get commit from repo', function(done) { + remoteRepo.getCommit('master', v10_4sha, assertSuccessful(done, function(err, commit) { + expect(commit.message).to.equal('v0.10.4'); + expect(commit.author.date).to.equal('2015-03-20T17:01:42Z'); -describe('Creating new Github.Repository', function() { - before(function() { - github = new Github({ - username: testUser.USERNAME, - password: testUser.PASSWORD, - auth: 'basic' + done(); + })); }); - user = github.getUser(); - repo = github.getRepo(testUser.USERNAME, repoTest); - }); + it('should get statuses for a SHA from a repo', function(done) { + remoteRepo.getStatuses(v10_4sha, assertSuccessful(done, function(err, statuses) { + expect(statuses).to.be.an.array(); + expect(statuses.length).to.equal(6); - it('should create repo', function(done) { - user.createRepo({ - name: repoTest - }, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.name.should.equal(repoTest.toString()); + var correctUrls = statuses.every(function(status) { + return status.url === statusUrl; + }); - done(); - }); - }); + expect(correctUrls).to.be(true); - it('should show repo collaborators', function(done) { - repo.collaborators(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.should.be.instanceof(Array); - res.should.have.length(1); - res[0].login.should.equal(testUser.USERNAME); - should.exist(res[0].id); - should.exist(res[0].permissions); + done(); + })); + }); - done(); + it('should get a SHA from a repo', function(done) { + remoteRepo.getSha('master', '.gitignore', assertSuccessful(done)); }); - }); - it('should test whether user is collaborator', function(done) { - repo.isCollaborator(testUser.USERNAME, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - xhr.status.should.equal(204); + it('should get a repo by fullname', function(done) { + var repoByName = github.getRepo('michael/github'); - done(); + repoByName.show(assertSuccessful(done, function(err, repo) { + expect(repo).to.have.own('full_name', 'michael/github'); + + done(); + })); }); - }); - it('should write to repo', function(done) { - repo.write('master', 'TEST.md', 'THIS IS A TEST', 'Creating test', function(err) { - should.not.exist(err); + it('should test whether user is collaborator', function(done) { + remoteRepo.isCollaborator(testUser.USERNAME, assertSuccessful(done)); + }); - repo.read('master', 'TEST.md', function(err, res) { - should.not.exist(err); - res.should.equal('THIS IS A TEST'); + it('should check if the repo is starred', function(done) { + remoteRepo.isStarred('michael', 'github', assertFailure(done, function(err) { + expect(err.error).to.be(404); done(); - }); + })); }); }); - it('should write to repo branch', function(done) { - repo.branch('master', 'dev', function(err) { - should.not.exist(err); - repo.write('dev', 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function(err) { - should.not.exist(err); - repo.read('dev', 'TEST.md', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.should.equal('THIS IS AN UPDATED TEST'); + describe('creating/modifiying', function() { + var fileName = 'test.md'; - done(); - }); - }); - }); - }); + var initialText = 'This is a test.'; + var initialMessage = 'Test file create.'; - it('should compare two branches', function(done) { - repo.branch('master', 'compare', function() { - repo.write('compare', 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function() { - repo.compare('master', 'compare', function(err, diff, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - diff.should.have.property('total_commits', 1); - diff.should.have.deep.property('files[0].filename', 'TEST.md'); + var updatedText = 'This file has been updated.'; + var updatedMessage = 'Test file update.'; - done(); - }); - }); - }); - }); + var fileToDelete = 'tmp.md'; + var deleteMessage = 'Removing file'; - it('should submit a pull request', function(done) { - var baseBranch = 'master'; - var headBranch = 'pull-request'; - var pullRequestTitle = 'Test pull request'; - var pullRequestBody = 'This is a test pull request'; - - repo.branch(baseBranch, headBranch, function() { - repo.write(headBranch, 'TEST.md', 'THIS IS AN UPDATED TEST', 'Updating test', function() { - repo.createPullRequest( - { - title: pullRequestTitle, - body: pullRequestBody, - base: baseBranch, - head: headBranch - }, - function(err, pullRequest, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - pullRequest.should.have.property('number').above(0); - pullRequest.should.have.property('title', pullRequestTitle); - pullRequest.should.have.property('body', pullRequestBody); + var unicodeFileName = '\u4E2D\u6587\u6D4B\u8BD5.md'; + var unicodeText = '\u00A1\u00D3i de m\u00ED, que verg\u00FCenza!'; + var unicodeMessage = 'Such na\u00EFvet\u00E9\u2026'; - done(); - } - ); - }); - }); - }); + var imageFileName = 'image.png'; - it('should get ref from repo', function(done) { - repo.getRef('heads/master', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + var releaseTag = 'foo'; + var releaseName = 'My awesome release'; + var releaseBody = 'Foo bar bazzy baz'; + var sha, releaseId; - // @TODO write better assertion - done(); + before(function() { + user = github.getUser(); + remoteRepo = github.getRepo(testUser.USERNAME, testRepoName); + }); + + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); }); - }); - it('should create ref on repo', function(done) { - repo.getRef('heads/master', function(err, sha) { - var refSpec = { - ref: 'refs/heads/new-test-branch', sha: sha + it('should create repo', function(done) { + var repoDef = { + name: testRepoName }; - repo.createRef(refSpec, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + user.createRepo(repoDef, assertSuccessful(done, function(err, repo) { + expect(repo).to.have.own('name', testRepoName); - // @TODO write better assertion done(); - }); + })); }); - }); - it('should delete ref on repo', function(done) { - repo.deleteRef('heads/new-test-branch', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + it('should write to repo', function(done) { + remoteRepo.write('master', fileName, initialText, initialMessage, assertSuccessful(done, function() { + remoteRepo.read('master', fileName, assertSuccessful(done, function(err, fileText) { + expect(fileText).to.be(initialText); - // @TODO write better assertion - done(); + done(); + })); + })); }); - }); - it('should list tags on repo', function(done) { - repo.listTags(function(err, tags, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + it('should write to repo branch', function(done) { + remoteRepo.branch('master', 'dev', assertSuccessful(done, function() { + remoteRepo.write('dev', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.read('dev', fileName, assertSuccessful(done, function(err, fileText) { + expect(fileText).to.be(updatedText); - // @TODO write better assertion - done(); + done(); + })); + })); + })); }); - }); - it('should list pulls on repo', function(done) { - var repo = github.getRepo('michael', 'github'); - var options = { - state: 'all', - sort: 'updated', - direction: 'desc', - page: 1, - per_page: 10 - }; - - repo.listPulls(options, function(err, pullRequests, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - pullRequests.should.be.instanceof(Array); - pullRequests.should.have.length(10); - should.exist(pullRequests[0].title); - should.exist(pullRequests[0].body); - should.exist(pullRequests[0].url); + it('should compare two branches', function(done) { + remoteRepo.branch('master', 'compare', assertSuccessful(done, function() { + remoteRepo.write('compare', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.compare('master', 'compare', assertSuccessful(done, function(err, diff) { + expect(diff).to.have.own('total_commits', 1); + expect(diff.files[0]).to.have.own('filename', fileName); - done(); - }); - }); + done(); + })); + })); + })); + }); + + it('should submit a pull request', function(done) { + var baseBranch = 'master'; + var headBranch = 'pull-request'; + var pullRequestTitle = 'Test pull request'; + var pullRequestBody = 'This is a test pull request'; + var pr = { + title: pullRequestTitle, + body: pullRequestBody, + base: baseBranch, + head: headBranch + }; - it('should get pull requests on repo', function(done) { - var repo = github.getRepo('michael', 'github'); + remoteRepo.branch(baseBranch, headBranch, assertSuccessful(done, function() { + remoteRepo.write(headBranch, fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.createPullRequest(pr, assertSuccessful(done, function(err, pullRequest) { + expect(pullRequest).to.have.own('number'); + expect(pullRequest.number).to.be.above(0); + expect(pullRequest).to.have.own('title', pullRequestTitle); + expect(pullRequest).to.have.own('body', pullRequestBody); - repo.getPull(153, function(err, pullRequest, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + done(); + })); + })); + })); + }); - // @TODO write better assertion - done(); + it('should get ref from repo', function(done) { + remoteRepo.getRef('heads/master', assertSuccessful(done)); }); - }); - it('should delete a file on the repo', function(done) { - repo.write('master', 'REMOVE-TEST.md', 'THIS IS A TEST', 'Remove test', function(err) { - should.not.exist(err); + it('should create ref on repo', function(done) { + remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, sha) { + var refSpec = { + ref: 'refs/heads/new-test-branch', sha: sha + }; - repo.remove('master', 'REMOVE-TEST.md', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + remoteRepo.createRef(refSpec, assertSuccessful(done)); + })); + }); - done(); - }); + it('should delete ref on repo', function(done) { + remoteRepo.deleteRef('heads/new-test-branch', assertSuccessful(done)); }); - }); - it('should use repo.delete as an alias for repo.remove', function(done) { - repo.write('master', 'REMOVE-TEST.md', 'THIS IS A TEST', 'Remove test', function(err) { - should.not.exist(err); + it('should list tags on repo', function(done) { + remoteRepo.listTags(assertSuccessful(done)); + }); + + it('should list pulls on repo', function(done) { + var options = { + state: 'all', + sort: 'updated', + direction: 'desc', + page: 1, + per_page: 10 + }; - repo.delete('master', 'REMOVE-TEST.md', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + remoteRepo.listPulls(options, assertSuccessful(done, function(err, pullRequests) { + expect(pullRequests).to.be.an.array(); + expect(pullRequests).to.have.length(1); done(); - }); + })); }); - }); - it('should write author and committer to repo', function(done) { - var options = { - author: { - name: 'Author Name', email: 'author@example.com' - }, - committer: { - name: 'Committer Name', email: 'committer@example.com' - } - }; - - repo.write('dev', 'TEST.md', 'THIS IS A TEST BY AUTHOR AND COMMITTER', 'Updating', options, function(err, res) { - should.not.exist(err); - repo.getCommit('dev', res.commit.sha, function(err, commit, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - commit.author.name.should.equal('Author Name'); - commit.author.email.should.equal('author@example.com'); - commit.committer.name.should.equal('Committer Name'); - commit.committer.email.should.equal('committer@example.com'); + it('should get pull requests on repo', function(done) { + var repo = github.getRepo('michael', 'github'); + + repo.getPull(153, assertSuccessful(done, function(err, pr) { + expect(pr).to.have.own('title'); + expect(pr).to.have.own('body'); + expect(pr).to.have.own('url'); done(); - }); + })); }); - }); - it('should be able to write CJK unicode to repo', function(done) { - repo.write('master', '中文测试.md', 'THIS IS A TEST', 'Creating test', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - // @TODO write better assertion - done(); + it('should delete a file on the repo', function(done) { + remoteRepo.write('master', fileToDelete, initialText, deleteMessage, assertSuccessful(done, function() { + remoteRepo.remove('master', fileToDelete, assertSuccessful(done)); + })); }); - }); - - it('should be able to write unicode to repo', function(done) { - repo.write('master', 'TEST_unicode.md', '\u2014', 'Long dash unicode', function(err) { - should.not.exist(err); - - repo.read('master', 'TEST_unicode.md', function(err, obj, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - obj.should.equal('\u2014'); - done(); - }); + it('should use repo.delete as an alias for repo.remove', function(done) { + remoteRepo.write('master', fileToDelete, initialText, deleteMessage, assertSuccessful(done, function() { + remoteRepo.delete('master', fileToDelete, assertSuccessful(done)); + })); }); - }); - it('should pass a regression test for _request (#14)', function(done) { - repo.getRef('heads/master', function(err, sha) { - var refSpec = { - ref: 'refs/heads/testing-14', sha: sha + it('should write author and committer to repo', function(done) { + var options = { + author: { + name: 'Author Name', email: 'author@example.com' + }, + committer: { + name: 'Committer Name', email: 'committer@example.com' + } }; - repo.createRef(refSpec, function(err) { - should.not.exist(err); + remoteRepo.write('dev', fileName, initialText, initialMessage, options, assertSuccessful(done, function(e, r) { + remoteRepo.getCommit('dev', r.commit.sha, assertSuccessful(done, function(err, commit) { + expect(commit.author.name).to.be('Author Name'); + expect(commit.author.email).to.be('author@example.com'); + expect(commit.committer.name).to.be('Committer Name'); + expect(commit.committer.email).to.be('committer@example.com'); + + done(); + })); + })); + }); - // Triggers GET: - // https://api.github.com/repos/michael/cmake_cdt7_stalled/git/refs/heads/prose-integration - repo.getRef('heads/master', function(err) { - should.not.exist(err); + it('should be able to write all the unicode', function(done) { + remoteRepo.write('master', unicodeFileName, unicodeText, unicodeMessage, assertSuccessful(done, + function(err, commit) { + expect(commit.content.name).to.be(unicodeFileName); + expect(commit.commit.message).to.be(unicodeMessage); - // Triggers DELETE: - // https://api.github.com/repos/michael/cmake_cdt7_stalled/git/refs/heads/prose-integration - repo.deleteRef('heads/testing-14', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - xhr.status.should.equal(204); + remoteRepo.read('master', unicodeFileName, assertSuccessful(done, function(err, fileText) { + expect(fileText).to.be(unicodeText); done(); - }); - }); - }); + })); + })); }); - }); - - it('should be able to write an image to the repo', function(done) { - repo.write('master', 'TEST_image.png', imageB64, 'Image test', { - encode: false - }, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - sha = res.commit.sha; - done(); - }); - }); + it('should pass a regression test for _request (#14)', function(done) { + remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, sha) { + var refSpec = { + ref: 'refs/heads/testing-14', sha: sha + }; - it('should be able to write a blob to the repo', function(done) { - repo.postBlob('String test', function(err, res, xhr) { // Test strings - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + remoteRepo.createRef(refSpec, assertSuccessful(done, function() { + // Triggers GET: + // https://api.github.com/repos/michael/cmake_cdt7_stalled/git/refs/heads/prose-integration + remoteRepo.getRef('heads/master', assertSuccessful(done, function() { + // Triggers DELETE: + // https://api.github.com/repos/michael/cmake_cdt7_stalled/git/refs/heads/prose-integration + remoteRepo.deleteRef('heads/testing-14', assertSuccessful(done, function(err, res, xhr) { + expect(xhr.status).to.be(204); + + done(); + })); + })); + })); + })); + }); + + it('should be able to write an image to the repo', function(done) { + var opts = { + encode: false + }; - repo.postBlob(imageBlob, function(err, res, xhr) { // Test non-strings - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + remoteRepo.write('master', imageFileName, imageB64, initialMessage, opts, assertSuccessful(done, + function(err, commit) { + sha = commit.sha; - done(); - }); + done(); + })); }); - }); - it('should star the repo', function(done) { - repo.star(testUser.USERNAME, repoTest, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + it('should be able to write a string blob to the repo', function(done) { + remoteRepo.postBlob('String test', assertSuccessful(done)); + }); - repo.isStarred(testUser.USERNAME, repoTest, function(err) { - should.not.exist(err); + it('should be able to write a file blob to the repo', function(done) { + remoteRepo.postBlob(imageBlob, assertSuccessful(done)); + }); - done(); - }); + it('should star the repo', function(done) { + remoteRepo.star(testUser.USERNAME, testRepoName, assertSuccessful(done, function() { + remoteRepo.isStarred(testUser.USERNAME, testRepoName, assertSuccessful(done)); + })); }); - }); - it('should unstar the repo', function(done) { - repo.unstar(testUser.USERNAME, repoTest, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + it('should unstar the repo', function(done) { + remoteRepo.unstar(testUser.USERNAME, testRepoName, assertSuccessful(done, function() { + remoteRepo.isStarred(testUser.USERNAME, testRepoName, assertFailure(done, function(err) { + expect(err.error).to.be(404); - repo.isStarred(testUser.USERNAME, repoTest, function(err) { - err.error.should.equal(404); + done(); + })); + })); + }); + + it('should fail on broken commit', function(done) { + remoteRepo.commit('broken-parent-hash', 'broken-tree-hash', initialMessage, assertFailure(done, function(err) { + expect(err.error).to.be(422); done(); - }); + })); }); - }); - - it('should create a release', function(done) { - var options = { - tag_name: RELEASE_TAG, - target_commitish: sha - }; - repo.createRelease(options, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); + it('should create a release', function(done) { + var options = { + tag_name: releaseTag, + target_commitish: sha + }; - releaseId = res.id; - done(); + remoteRepo.createRelease(options, assertSuccessful(done, function(err, res) { + releaseId = res.id; + done(); + })); }); - }); - it('should edit a release', function(done) { - var options = { - name: RELEASE_NAME, - body: RELEASE_BODY - }; + it('should edit a release', function(done) { + var options = { + name: releaseName, + body: releaseBody + }; - repo.editRelease(releaseId, options, function(err, res, xhr) { - should.not.exist(err); - res.name.should.equal(RELEASE_NAME); - res.body.should.equal(RELEASE_BODY); - xhr.should.be.instanceof(XMLHttpRequest); + remoteRepo.editRelease(releaseId, options, assertSuccessful(done, function(err, release) { + expect(release).to.have.own('name', releaseName); + expect(release).to.have.own('body', releaseBody); - done(); + done(); + })); }); - }); - it('should read a release', function(done) { - repo.getRelease(releaseId, function(err, res, xhr) { - should.not.exist(err); - res.name.should.equal(RELEASE_NAME); - xhr.should.be.instanceof(XMLHttpRequest); - done(); - }); - }); + it('should read a release', function(done) { + remoteRepo.getRelease(releaseId, assertSuccessful(done, function(err, release) { + expect(release).to.have.own('name', releaseName); - it('should delete a release', function(done) { - repo.deleteRelease(releaseId, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - done(); + done(); + })); }); - }); -}); -describe('deleting a Github.Repository', function() { - before(function() { - github = new Github({ - username: testUser.USERNAME, - password: testUser.PASSWORD, - auth: 'basic' + it('should delete a release', function(done) { + remoteRepo.deleteRelease(releaseId, assertSuccessful(done)); }); - repo = github.getRepo(testUser.USERNAME, repoTest); }); - it('should delete the repo', function(done) { - repo.deleteRepo(function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.should.be.true; // jshint ignore:line - - done(); + describe('deleting', function() { + before(function() { + remoteRepo = github.getRepo(testUser.USERNAME, testRepoName); }); - }); -}); -describe('Repo returns commit errors correctly', function() { - before(function() { - github = new Github({ - username: testUser.USERNAME, - password: testUser.PASSWORD, - auth: 'basic' + // 200ms between tests so that Github has a chance to settle + beforeEach(function(done) { + setTimeout(done, 200); }); - repo = github.getRepo(testUser.USERNAME, testUser.REPO); - }); - it('should fail on broken commit', function(done) { - repo.commit('broken-parent-hash', 'broken-tree-hash', 'commit message', function(err) { - should.exist(err); - should.exist(err.request); - err.request.should.be.instanceof(XMLHttpRequest); - err.error.should.equal(422); + it('should delete the repo', function(done) { + remoteRepo.deleteRepo(assertSuccessful(done, function(err, result) { + expect(result).to.be(true); - done(); + done(); + })); }); }); }); diff --git a/test/test.search.js b/test/test.search.js index f6bb51fa..bb416851 100644 --- a/test/test.search.js +++ b/test/test.search.js @@ -1,10 +1,13 @@ 'use strict'; var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var github; + +var testUser = require('./fixtures/user.json'); +var assertSuccessful = require('./helpers').assertSuccessful; describe('Github.Search', function() { + var github; + before(function() { github = new Github({ username: testUser.USERNAME, @@ -13,51 +16,31 @@ describe('Github.Search', function() { }); }); - it('should search.repositories', function(done) { + it('should search repositories', function(done) { var search = github.getSearch('tetris+language:assembly&sort=stars&order=desc'); var options = null; - search.repositories(options, function (err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + search.repositories(options, assertSuccessful(done)); }); - it('should search.code', function(done) { + it('should search code', function(done) { var search = github.getSearch('addClass+in:file+language:js+repo:jquery/jquery'); var options = null; - search.code(options, function (err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + search.code(options, assertSuccessful(done)); }); - it('should search.issues', function(done) { + it('should search issues', function(done) { var search = github.getSearch('windows+label:bug+language:python+state:open&sort=created&order=asc'); var options = null; - search.issues(options, function (err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + search.issues(options, assertSuccessful(done)); }); - it('should search.users', function(done) { + it('should search users', function(done) { var search = github.getSearch('tom+repos:%3E42+followers:%3E1000'); var options = null; - search.users(options, function (err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + search.users(options, assertSuccessful(done)); }); }); diff --git a/test/test.user.js b/test/test.user.js index 9ccdb0ff..a00e2784 100644 --- a/test/test.user.js +++ b/test/test.user.js @@ -1,10 +1,21 @@ 'use strict'; var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var github, user; + +var expect = require('must'); +var testUser = require('./fixtures/user.json'); +var assertSuccessful = require('./helpers').assertSuccessful; + +function assertArray(done) { + return assertSuccessful(done, function(err, result) { + expect(result).to.be.an.array(); + done(); + }); +} describe('Github.User', function() { + var github, user; + before(function() { github = new Github({ username: testUser.USERNAME, @@ -14,17 +25,11 @@ describe('Github.User', function() { user = github.getUser(); }); - it('should get user.repos', function(done) { - user.repos(function(err, repos, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - repos.should.be.instanceof(Array); - - done(); - }); + it('should get user repos', function(done) { + user.repos(assertArray(done)); }); - it('should get user.repos with options', function(done) { + it('should get user repos with options', function(done) { var options = { type: 'owner', sort: 'updated', @@ -32,43 +37,22 @@ describe('Github.User', function() { page: 10 }; - user.repos(options, function(err, repos, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - repos.should.be.instanceof(Array); - - done(); - }); + user.repos(options, assertArray(done)); }); - it('should get user.orgs', function(done) { - user.orgs(function(err, orgs, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + it('should get user orgs', function(done) { + user.orgs(assertArray(done)); }); - it('should get user.gists', function(done) { - user.gists(function(err, gists, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + it('should get user gists', function(done) { + user.gists(assertArray(done)); }); - it('should get user.notifications', function(done) { - user.notifications(function(err, notifications, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + it('should get user notifications', function(done) { + user.notifications(assertArray(done)); }); - it('should get user.notifications with options', function(done) { + it('should get user notifications with options', function(done) { var options = { all: true, participating: true, @@ -76,31 +60,15 @@ describe('Github.User', function() { before: '2015-02-01T00:00:00Z' }; - user.notifications(options, function(err, notifications, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + user.notifications(options, assertArray(done)); }); it('should show user', function(done) { - user.show('ingalls', function(err, info, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + user.show('ingalls', assertSuccessful(done)); }); it('should show user\'s repos', function(done) { - user.userRepos('aendrew', function(err, repos, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - repos.should.be.instanceof(Array); - - done(); - }); + user.userRepos('aendrew', assertArray(done)); }); it('should show user\'s repos with options', function(done) { @@ -111,77 +79,26 @@ describe('Github.User', function() { page: 1 }; - user.userRepos('aendrew', options, function(err, repos, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - repos.should.be.instanceof(Array); - - done(); - }); + user.userRepos('aendrew', options, assertArray(done)); }); it('should show user\'s starred repos', function(done) { - user.userStarred(testUser.USERNAME, function(err, repos, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + user.userStarred(testUser.USERNAME, assertArray(done)); }); it('should show user\'s gists', function(done) { - user.userGists(testUser.USERNAME, function(err, gists, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + user.userGists(testUser.USERNAME, assertArray(done)); }); it('should show user\'s organisation repos', function(done) { - user.orgRepos('openaddresses', function(err, repos, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + user.orgRepos('openaddresses', assertArray(done)); }); it('should follow user', function(done) { - user.follow('ingalls', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); + user.follow('ingalls', assertSuccessful(done)); }); it('should unfollow user', function(done) { - user.unfollow('ingalls', function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - - done(); - }); - }); - - it('should create a repo', function(done) { - var repoTest = Math.floor(Math.random() * (100000 - 0)) + 0; - var github = new Github({ - username: testUser.USERNAME, - password: testUser.PASSWORD, - auth: 'basic' - }); - var user = github.getUser(); - - user.createRepo({ - name: repoTest - }, function (err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.name.should.equal(repoTest.toString()); - - done(); - }); + user.unfollow('ingalls', assertSuccessful(done)); }); }); From 94023de61cad9cb5a2c07fb08465b5bba8b60ca8 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Fri, 22 Apr 2016 23:46:30 -0500 Subject: [PATCH 085/217] Remove dist files from git and deprecate bower support. --- bower.json | 33 - dist/github.bundle.min.js | 3 - dist/github.bundle.min.js.map | 1 - dist/github.js | 1136 --------------------------------- dist/github.js.map | 1 - dist/github.min.js | 2 - dist/github.min.js.map | 1 - 7 files changed, 1177 deletions(-) delete mode 100644 bower.json delete mode 100644 dist/github.bundle.min.js delete mode 100644 dist/github.bundle.min.js.map delete mode 100644 dist/github.js delete mode 100644 dist/github.js.map delete mode 100644 dist/github.min.js delete mode 100644 dist/github.min.js.map diff --git a/bower.json b/bower.json deleted file mode 100644 index deff6a12..00000000 --- a/bower.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name":"github-api", - "version": "0.11.2", - "main":"src/github.js", - "dependencies": { - "axios": "https://github.com/github-tools/axios.git", - "base-64": "^0.1.0", - "es6-promise": "^3.0.2", - "utf8": "^2.1.1" - }, - "homepage":"https://github.com/michael/github", - "authors":[ - "Ændrew Rininsland (http://www.aendrew.com)", - "Aurelio De Rosa (http://www.audero.it/)", - "Michael Aufreiter (http://substance.io)" - ], - "description":"Github.js provides a minimal higher-level wrapper around git's plumbing commands, exposing an API for manipulating GitHub repositories on the file level. It is being developed in the context of Prose, a content editor for GitHub.", - "moduleType":[ - "globals" - ], - "keywords":[ - "github", - "oauth" - ], - "license":"BSD-3-Clause-Clear", - "ignore":[ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/dist/github.bundle.min.js b/dist/github.bundle.min.js deleted file mode 100644 index b53ebbbd..00000000 --- a/dist/github.bundle.min.js +++ /dev/null @@ -1,3 +0,0 @@ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Github=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var c=n[s]={exports:{}};t[s][0].call(c.exports,function(e){var n=t[s][1][e];return o(n?n:e)},c,c.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s=200&&o.status<300||!("status"in l)&&o.responseText?e:n)(o),l=null}},l.onerror=function(){n(new Error("Network Error")),l=null},r.isStandardBrowserEnv()){var g=t("./../helpers/cookies"),y=f.withCredentials||u(f.url)?g.read(f.xsrfCookieName):void 0;y&&(h[f.xsrfHeaderName]=y)}if("setRequestHeader"in l&&r.forEach(h,function(t,e){"undefined"==typeof c&&"content-type"===e.toLowerCase()?delete h[e]:l.setRequestHeader(e,t)}),f.withCredentials&&(l.withCredentials=!0),f.responseType)try{l.responseType=f.responseType}catch(v){if("json"!==l.responseType)throw v}r.isArrayBuffer(c)&&(c=new DataView(c)),l.send(c)}},{"./../helpers/btoa":8,"./../helpers/buildURL":9,"./../helpers/cookies":11,"./../helpers/isURLSameOrigin":13,"./../helpers/parseHeaders":14,"./../helpers/transformData":16,"./../utils":17}],3:[function(t,e,n){"use strict";function r(t){this.defaults=i.merge({},t),this.interceptors={request:new u,response:new u}}var o=t("./defaults"),i=t("./utils"),s=t("./core/dispatchRequest"),u=t("./core/InterceptorManager"),a=t("./helpers/isAbsoluteURL"),f=t("./helpers/combineURLs"),c=t("./helpers/bind"),h=t("./helpers/transformData");r.prototype.request=function(t){"string"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:"get"},t),t.baseURL&&!a(t.url)&&(t.url=f(t.baseURL,t.url)),t.withCredentials=t.withCredentials||this.defaults.withCredentials,t.data=h(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach(["delete","get","head","post","put","patch","common"],function(e){delete t.headers[e]});var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n};var l=new r(o),p=e.exports=c(r.prototype.request,l);p.create=function(t){return new r(t)},p.defaults=l.defaults,p.all=function(t){return Promise.all(t)},p.spread=t("./helpers/spread"),p.interceptors=l.interceptors,i.forEach(["delete","get","head"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))},p[t]=c(r.prototype[t],l)}),i.forEach(["post","put","patch"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))},p[t]=c(r.prototype[t],l)})},{"./core/InterceptorManager":4,"./core/dispatchRequest":5,"./defaults":6,"./helpers/bind":7,"./helpers/combineURLs":10,"./helpers/isAbsoluteURL":12,"./helpers/spread":15,"./helpers/transformData":16,"./utils":17}],4:[function(t,e,n){"use strict";function r(){this.handlers=[]}var o=t("./../utils");r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},e.exports=r},{"./../utils":17}],5:[function(t,e,n){(function(n){"use strict";e.exports=function(e){return new Promise(function(r,o){try{var i;"function"==typeof e.adapter?i=e.adapter:"undefined"!=typeof XMLHttpRequest?i=t("../adapters/xhr"):"undefined"!=typeof n&&(i=t("../adapters/http")),"function"==typeof i&&i(r,o,e)}catch(s){o(s)}})}}).call(this,t("_process"))},{"../adapters/http":2,"../adapters/xhr":2,_process:24}],6:[function(t,e,n){"use strict";var r=t("./utils"),o=/^\)\]\}',?\n/,i={"Content-Type":"application/x-www-form-urlencoded"};e.exports={transformRequest:[function(t,e){return r.isFormData(t)?t:r.isArrayBuffer(t)?t:r.isArrayBufferView(t)?t.buffer:!r.isObject(t)||r.isFile(t)||r.isBlob(t)?t:(r.isUndefined(e)||(r.forEach(e,function(t,n){"content-type"===n.toLowerCase()&&(e["Content-Type"]=t)}),r.isUndefined(e["Content-Type"])&&(e["Content-Type"]="application/json;charset=utf-8")),JSON.stringify(t))}],transformResponse:[function(t){if("string"==typeof t){t=t.replace(o,"");try{t=JSON.parse(t)}catch(e){}}return t}],headers:{common:{Accept:"application/json, text/plain, */*"},patch:r.merge(i),post:r.merge(i),put:r.merge(i)},timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"}},{"./utils":17}],7:[function(t,e,n){"use strict";e.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r>8-u%1*8)){if(n=o.charCodeAt(u+=.75),n>255)throw new r("INVALID_CHARACTER_ERR: DOM Exception 5");e=e<<8|n}return s}var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",e.exports=o},{}],9:[function(t,e,n){"use strict";function r(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}var o=t("./../utils");e.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else{var s=[];o.forEach(e,function(t,e){null!==t&&"undefined"!=typeof t&&(o.isArray(t)&&(e+="[]"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),s.push(r(e)+"="+r(t))}))}),i=s.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},{"./../utils":17}],10:[function(t,e,n){"use strict";e.exports=function(t,e){return t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,"")}},{}],11:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,s){var u=[];u.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&u.push("expires="+new Date(n).toGMTString()),r.isString(o)&&u.push("path="+o),r.isString(i)&&u.push("domain="+i),s===!0&&u.push("secure"),document.cookie=u.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},{"./../utils":17}],12:[function(t,e,n){"use strict";e.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},{}],13:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute("href",e),e=o.href),o.setAttribute("href",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},{"./../utils":17}],14:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)}),i):i}},{"./../utils":17}],15:[function(t,e,n){"use strict";e.exports=function(t){return function(e){return t.apply(null,e)}}},{}],16:[function(t,e,n){"use strict";var r=t("./../utils");e.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},{"./../utils":17}],17:[function(t,e,n){"use strict";function r(t){return"[object Array]"===m.call(t)}function o(t){return"[object ArrayBuffer]"===m.call(t)}function i(t){return"[object FormData]"===m.call(t)}function s(t){var e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return"string"==typeof t}function a(t){return"number"==typeof t}function f(t){return"undefined"==typeof t}function c(t){return null!==t&&"object"==typeof t}function h(t){return"[object Date]"===m.call(t)}function l(t){return"[object File]"===m.call(t)}function p(t){return"[object Blob]"===m.call(t)}function d(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}function g(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"function"==typeof document.createElement}function y(t,e){if(null!==t&&"undefined"!=typeof t)if("object"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;o>n;n++)e.call(null,t[n],n,t);else for(var i in t)t.hasOwnProperty(i)&&e.call(null,t[i],i,t)}function v(){function t(t,n){"object"==typeof e[n]&&"object"==typeof t?e[n]=v(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;r>n;n++)y(arguments[n],t);return e}var m=Object.prototype.toString;e.exports={isArray:r,isArrayBuffer:o,isFormData:i,isArrayBufferView:s,isString:u,isNumber:a,isObject:c,isUndefined:f,isDate:h,isFile:l,isBlob:p,isStandardBrowserEnv:g,forEach:y,merge:v,trim:d}},{}],18:[function(e,n,r){(function(e){!function(o){var i="object"==typeof r&&r,s="object"==typeof n&&n&&n.exports==i&&n,u="object"==typeof e&&e;u.global!==u&&u.window!==u||(o=u);var a=function(t){this.message=t};a.prototype=new Error,a.prototype.name="InvalidCharacterError";var f=function(t){throw new a(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=/[\t\n\f\r ]/g,l=function(t){t=String(t).replace(h,"");var e=t.length;e%4==0&&(t=t.replace(/==?$/,""),e=t.length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&f("Invalid character: the string to be decoded is not correctly encoded.");for(var n,r,o=0,i="",s=-1;++s>(-2*o&6)));return i},p=function(t){t=String(t),/[^\0-\xFF]/.test(t)&&f("The string to be encoded contains characters outside of the Latin1 range.");for(var e,n,r,o,i=t.length%3,s="",u=-1,a=t.length-i;++u>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==i?(e=t.charCodeAt(u)<<8,n=t.charCodeAt(++u),o=e+n,s+=c.charAt(o>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(u),s+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),s},d={encode:p,decode:l,version:"0.1.0"};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return d});else if(i&&!i.nodeType)if(s)s.exports=d;else for(var g in d)d.hasOwnProperty(g)&&(i[g]=d[g]);else o.base64=d}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(t,e,n){"use strict";function r(){var t,e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=e.length;for(t=0;n>t;t++)a[t]=e[t];for(t=0;n>t;++t)f[e.charCodeAt(t)]=t;f["-".charCodeAt(0)]=62,f["_".charCodeAt(0)]=63}function o(t){var e,n,r,o,i,s,u=t.length;if(u%4>0)throw new Error("Invalid string. Length must be a multiple of 4");i="="===t[u-2]?2:"="===t[u-1]?1:0,s=new c(3*u/4-i),r=i>0?u-4:u;var a=0;for(e=0,n=0;r>e;e+=4,n+=3)o=f[t.charCodeAt(e)]<<18|f[t.charCodeAt(e+1)]<<12|f[t.charCodeAt(e+2)]<<6|f[t.charCodeAt(e+3)],s[a++]=(16711680&o)>>16,s[a++]=(65280&o)>>8,s[a++]=255&o;return 2===i?(o=f[t.charCodeAt(e)]<<2|f[t.charCodeAt(e+1)]>>4,s[a++]=255&o):1===i&&(o=f[t.charCodeAt(e)]<<10|f[t.charCodeAt(e+1)]<<4|f[t.charCodeAt(e+2)]>>2,s[a++]=o>>8&255,s[a++]=255&o),s}function i(t){return a[t>>18&63]+a[t>>12&63]+a[t>>6&63]+a[63&t]}function s(t,e,n){for(var r,o=[],s=e;n>s;s+=3)r=(t[s]<<16)+(t[s+1]<<8)+t[s+2],o.push(i(r));return o.join("")}function u(t){for(var e,n=t.length,r=n%3,o="",i=[],u=16383,f=0,c=n-r;c>f;f+=u)i.push(s(t,f,f+u>c?c:f+u));return 1===r?(e=t[n-1],o+=a[e>>2],o+=a[e<<4&63],o+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],o+=a[e>>10],o+=a[e>>4&63],o+=a[e<<2&63],o+="="),i.push(o),i.join("")}n.toByteArray=o,n.fromByteArray=u;var a=[],f=[],c="undefined"!=typeof Uint8Array?Uint8Array:Array;r()},{}],20:[function(t,e,n){(function(e){"use strict";function r(){try{var t=new Uint8Array(1);return t.foo=function(){return 42},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(e){return!1}}function o(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(t){return this instanceof i?(i.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof t?s(this,t):"string"==typeof t?u(this,t,arguments.length>1?arguments[1]:"utf8"):a(this,t)):arguments.length>1?new i(t,arguments[1]):new i(t)}function s(t,e){if(t=g(t,0>e?0:0|y(e)),!i.TYPED_ARRAY_SUPPORT)for(var n=0;e>n;n++)t[n]=0;return t}function u(t,e,n){"string"==typeof n&&""!==n||(n="utf8");var r=0|m(e,n);return t=g(t,r),t.write(e,n),t}function a(t,e){if(i.isBuffer(e))return f(t,e);if($(e))return c(t,e);if(null==e)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(e.buffer instanceof ArrayBuffer)return h(t,e);if(e instanceof ArrayBuffer)return l(t,e)}return e.length?p(t,e):d(t,e)}function f(t,e){var n=0|y(e.length);return t=g(t,n),e.copy(t,0,0,n),t}function c(t,e){var n=0|y(e.length);t=g(t,n);for(var r=0;n>r;r+=1)t[r]=255&e[r];return t}function h(t,e){var n=0|y(e.length);t=g(t,n);for(var r=0;n>r;r+=1)t[r]=255&e[r];return t}function l(t,e){return e.byteLength,i.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=i.prototype):t=h(t,new Uint8Array(e)),t}function p(t,e){var n=0|y(e.length);t=g(t,n);for(var r=0;n>r;r+=1)t[r]=255&e[r];return t}function d(t,e){var n,r=0;"Buffer"===e.type&&$(e.data)&&(n=e.data,r=0|y(n.length)),t=g(t,r);for(var o=0;r>o;o+=1)t[o]=255&n[o];return t}function g(t,e){i.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=i.prototype):t.length=e;var n=0!==e&&e<=i.poolSize>>>1;return n&&(t.parent=Z),t}function y(t){if(t>=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function v(t,e){if(!(this instanceof v))return new v(t,e);var n=new i(t,e);return delete n.parent,n}function m(t,e){"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"binary":case"raw":case"raws":return n;case"utf8":case"utf-8":return H(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return X(t).length;default:if(r)return H(t).length;e=(""+e).toLowerCase(),r=!0}}function w(t,e,n){var r=!1;if(e=0|e,n=void 0===n||n===1/0?this.length:0|n,t||(t="utf8"),0>e&&(e=0),n>this.length&&(n=this.length),e>=n)return"";for(;;)switch(t){case"hex":return I(this,e,n);case"utf8":case"utf-8":return C(this,e,n);case"ascii":return P(this,e,n);case"binary":return x(this,e,n);case"base64":return S(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function b(t,e,n,r){n=Number(n)||0;var o=t.length-n;r?(r=Number(r),r>o&&(r=o)):r=o;var i=e.length;if(i%2!==0)throw new Error("Invalid hex string");r>i/2&&(r=i/2);for(var s=0;r>s;s++){var u=parseInt(e.substr(2*s,2),16);if(isNaN(u))throw new Error("Invalid hex string");t[n+s]=u}return s}function E(t,e,n,r){return V(H(e,t.length-n),t,n,r)}function A(t,e,n,r){return V(F(e),t,n,r)}function T(t,e,n,r){return A(t,e,n,r)}function R(t,e,n,r){return V(X(e),t,n,r)}function _(t,e,n,r){return V(z(e,t.length-n),t,n,r)}function S(t,e,n){return 0===e&&n===t.length?J.fromByteArray(t):J.fromByteArray(t.slice(e,n))}function C(t,e,n){n=Math.min(t.length,n);for(var r=[],o=e;n>o;){var i=t[o],s=null,u=i>239?4:i>223?3:i>191?2:1;if(n>=o+u){var a,f,c,h;switch(u){case 1:128>i&&(s=i);break;case 2:a=t[o+1],128===(192&a)&&(h=(31&i)<<6|63&a,h>127&&(s=h));break;case 3:a=t[o+1],f=t[o+2],128===(192&a)&&128===(192&f)&&(h=(15&i)<<12|(63&a)<<6|63&f,h>2047&&(55296>h||h>57343)&&(s=h));break;case 4:a=t[o+1],f=t[o+2],c=t[o+3],128===(192&a)&&128===(192&f)&&128===(192&c)&&(h=(15&i)<<18|(63&a)<<12|(63&f)<<6|63&c,h>65535&&1114112>h&&(s=h))}}null===s?(s=65533,u=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),o+=u}return U(r)}function U(t){var e=t.length;if(W>=e)return String.fromCharCode.apply(String,t);for(var n="",r=0;e>r;)n+=String.fromCharCode.apply(String,t.slice(r,r+=W));return n}function P(t,e,n){var r="";n=Math.min(t.length,n);for(var o=e;n>o;o++)r+=String.fromCharCode(127&t[o]);return r}function x(t,e,n){var r="";n=Math.min(t.length,n);for(var o=e;n>o;o++)r+=String.fromCharCode(t[o]);return r}function I(t,e,n){var r=t.length;(!e||0>e)&&(e=0),(!n||0>n||n>r)&&(n=r);for(var o="",i=e;n>i;i++)o+=q(t[i]);return o}function O(t,e,n){for(var r=t.slice(e,n),o="",i=0;it)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function D(t,e,n,r,o,s){if(!i.isBuffer(t))throw new TypeError("buffer must be a Buffer instance");if(e>o||s>e)throw new RangeError("value is out of bounds");if(n+r>t.length)throw new RangeError("index out of range")}function L(t,e,n,r){0>e&&(e=65535+e+1);for(var o=0,i=Math.min(t.length-n,2);i>o;o++)t[n+o]=(e&255<<8*(r?o:1-o))>>>8*(r?o:1-o)}function j(t,e,n,r){0>e&&(e=4294967295+e+1);for(var o=0,i=Math.min(t.length-n,4);i>o;o++)t[n+o]=e>>>8*(r?o:3-o)&255}function Y(t,e,n,r,o,i){if(n+r>t.length)throw new RangeError("index out of range");if(0>n)throw new RangeError("index out of range")}function k(t,e,n,r,o){return o||Y(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),K.write(t,e,n,r,23,4),n+4}function M(t,e,n,r,o){return o||Y(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),K.write(t,e,n,r,52,8),n+8}function G(t){if(t=N(t).replace(Q,""),t.length<2)return"";for(;t.length%4!==0;)t+="=";return t}function N(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function q(t){return 16>t?"0"+t.toString(16):t.toString(16)}function H(t,e){e=e||1/0;for(var n,r=t.length,o=null,i=[],s=0;r>s;s++){if(n=t.charCodeAt(s),n>55295&&57344>n){if(!o){if(n>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(56320>n){(e-=3)>-1&&i.push(239,191,189),o=n;continue}n=(o-55296<<10|n-56320)+65536}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,128>n){if((e-=1)<0)break;i.push(n)}else if(2048>n){if((e-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(65536>n){if((e-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(1114112>n))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function F(t){for(var e=[],n=0;n>8,o=n%256,i.push(o),i.push(r);return i}function X(t){return J.toByteArray(G(t))}function V(t,e,n,r){for(var o=0;r>o&&!(o+n>=e.length||o>=t.length);o++)e[o+n]=t[o];return o}var J=t("base64-js"),K=t("ieee754"),$=t("isarray");n.Buffer=i,n.SlowBuffer=v,n.INSPECT_MAX_BYTES=50,i.poolSize=8192;var Z={};i.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:r(),i._augment=function(t){return t.__proto__=i.prototype,t},i.TYPED_ARRAY_SUPPORT?(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})):(i.prototype.length=void 0,i.prototype.parent=void 0),i.isBuffer=function(t){return!(null==t||!t._isBuffer)},i.compare=function(t,e){if(!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,o=0,s=Math.min(n,r);s>o&&t[o]===e[o];)++o;return o!==s&&(n=t[o],r=e[o]),r>n?-1:n>r?1:0},i.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},i.concat=function(t,e){if(!$(t))throw new TypeError("list argument must be an Array of Buffers.");if(0===t.length)return new i(0);var n;if(void 0===e)for(e=0,n=0;n0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},i.prototype.compare=function(t){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?0:i.compare(this,t)},i.prototype.indexOf=function(t,e){function n(t,e,n){for(var r=-1,o=0;n+o2147483647?e=2147483647:-2147483648>e&&(e=-2147483648),e>>=0,0===this.length)return-1;if(e>=this.length)return-1;if(0>e&&(e=Math.max(this.length+e,0)),"string"==typeof t)return 0===t.length?-1:String.prototype.indexOf.call(this,t,e);if(i.isBuffer(t))return n(this,t,e);if("number"==typeof t)return i.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,t,e):n(this,[t],e);throw new TypeError("val must be string, number or Buffer")},i.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else if(isFinite(e))e=0|e,isFinite(n)?(n=0|n,void 0===r&&(r="utf8")):(r=n,n=void 0);else{var o=r;r=e,e=0|n,n=o}var i=this.length-e;if((void 0===n||n>i)&&(n=i),t.length>0&&(0>n||0>e)||e>this.length)throw new RangeError("attempt to write outside buffer bounds");r||(r="utf8");for(var s=!1;;)switch(r){case"hex":return b(this,t,e,n);case"utf8":case"utf-8":return E(this,t,e,n);case"ascii":return A(this,t,e,n);case"binary":return T(this,t,e,n);case"base64":return R(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,t,e,n);default:if(s)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),s=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var W=4096;i.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,0>t?(t+=n,0>t&&(t=0)):t>n&&(t=n),0>e?(e+=n,0>e&&(e=0)):e>n&&(e=n),t>e&&(e=t);var r;if(i.TYPED_ARRAY_SUPPORT)r=this.subarray(t,e),r.__proto__=i.prototype;else{var o=e-t;r=new i(o,void 0);for(var s=0;o>s;s++)r[s]=this[s+t]}return r.length&&(r.parent=this.parent||this),r},i.prototype.readUIntLE=function(t,e,n){t=0|t,e=0|e,n||B(t,e,this.length);for(var r=this[t],o=1,i=0;++i0&&(o*=256);)r+=this[t+--e]*o;return r},i.prototype.readUInt8=function(t,e){return e||B(t,1,this.length),this[t]},i.prototype.readUInt16LE=function(t,e){return e||B(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUInt16BE=function(t,e){return e||B(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUInt32LE=function(t,e){return e||B(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},i.prototype.readUInt32BE=function(t,e){return e||B(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readIntLE=function(t,e,n){t=0|t,e=0|e,n||B(t,e,this.length);for(var r=this[t],o=1,i=0;++i=o&&(r-=Math.pow(2,8*e)),r},i.prototype.readIntBE=function(t,e,n){t=0|t,e=0|e,n||B(t,e,this.length);for(var r=e,o=1,i=this[t+--r];r>0&&(o*=256);)i+=this[t+--r]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},i.prototype.readInt8=function(t,e){return e||B(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},i.prototype.readInt16LE=function(t,e){e||B(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(t,e){e||B(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(t,e){return e||B(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return e||B(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readFloatLE=function(t,e){return e||B(t,4,this.length),K.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return e||B(t,4,this.length),K.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return e||B(t,8,this.length),K.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return e||B(t,8,this.length),K.read(this,t,!1,52,8)},i.prototype.writeUIntLE=function(t,e,n,r){t=+t,e=0|e,n=0|n,r||D(this,t,e,n,Math.pow(2,8*n),0);var o=1,i=0;for(this[e]=255&t;++i=0&&(i*=256);)this[e+o]=t/i&255;return e+n},i.prototype.writeUInt8=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,1,255,0),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},i.prototype.writeUInt16LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},i.prototype.writeUInt16BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},i.prototype.writeUInt32LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):j(this,t,e,!0),e+4},i.prototype.writeUInt32BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):j(this,t,e,!1),e+4},i.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e=0|e,!r){var o=Math.pow(2,8*n-1);D(this,t,e,n,o-1,-o)}var i=0,s=1,u=0>t?1:0;for(this[e]=255&t;++i>0)-u&255;return e+n},i.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e=0|e,!r){var o=Math.pow(2,8*n-1);D(this,t,e,n,o-1,-o)}var i=n-1,s=1,u=0>t?1:0;for(this[e+i]=255&t;--i>=0&&(s*=256);)this[e+i]=(t/s>>0)-u&255;return e+n},i.prototype.writeInt8=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,1,127,-128),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),0>t&&(t=255+t+1),this[e]=255&t,e+1},i.prototype.writeInt16LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):L(this,t,e,!0),e+2},i.prototype.writeInt16BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):L(this,t,e,!1),e+2},i.prototype.writeInt32LE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):j(this,t,e,!0),e+4},i.prototype.writeInt32BE=function(t,e,n){return t=+t,e=0|e,n||D(this,t,e,4,2147483647,-2147483648),0>t&&(t=4294967295+t+1),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):j(this,t,e,!1),e+4},i.prototype.writeFloatLE=function(t,e,n){return k(this,t,e,!0,n)},i.prototype.writeFloatBE=function(t,e,n){return k(this,t,e,!1,n)},i.prototype.writeDoubleLE=function(t,e,n){return M(this,t,e,!0,n)},i.prototype.writeDoubleBE=function(t,e,n){return M(this,t,e,!1,n)},i.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&n>r&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(0>e)throw new RangeError("targetStart out of bounds");if(0>n||n>=this.length)throw new RangeError("sourceStart out of bounds");if(0>r)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-en&&r>e)for(o=s-1;o>=0;o--)t[o+e]=this[o+n];else if(1e3>s||!i.TYPED_ARRAY_SUPPORT)for(o=0;s>o;o++)t[o+e]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+s),e);return s},i.prototype.fill=function(t,e,n){if(t||(t=0),e||(e=0),n||(n=this.length),e>n)throw new RangeError("end < start");if(n!==e&&0!==this.length){if(0>e||e>=this.length)throw new RangeError("start out of bounds");if(0>n||n>this.length)throw new RangeError("end out of bounds");var r;if("number"==typeof t)for(r=e;n>r;r++)this[r]=t;else{var o=H(t.toString()),i=o.length;for(r=e;n>r;r++)this[r]=o[r%i]}return this}};var Q=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":19,ieee754:23,isarray:21}],21:[function(t,e,n){var r={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},{}],22:[function(e,n,r){(function(r,o){(function(){"use strict";function i(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function u(t){X=t}function a(t){$=t}function f(){return function(){r.nextTick(d)}}function c(){return function(){z(d)}}function h(){var t=0,e=new Q(d),n=document.createTextNode("");return e.observe(n,{characterData:!0}),function(){n.data=t=++t%2}}function l(){var t=new MessageChannel;return t.port1.onmessage=d,function(){t.port2.postMessage(0)}}function p(){return function(){setTimeout(d,1)}}function d(){for(var t=0;K>t;t+=2){var e=nt[t],n=nt[t+1];e(n),nt[t]=void 0,nt[t+1]=void 0}K=0}function g(){try{var t=e,n=t("vertx");return z=n.runOnLoop||n.runOnContext,c()}catch(r){return p()}}function y(t,e){var n=this,r=n._state;if(r===st&&!t||r===ut&&!e)return this;var o=new this.constructor(m),i=n._result;if(r){var s=arguments[r-1];$(function(){D(r,o,s,i)})}else x(n,o,t,e);return o}function v(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var n=new e(m);return S(n,t),n}function m(){}function w(){return new TypeError("You cannot resolve a promise with itself")}function b(){return new TypeError("A promises callback cannot return that same promise.")}function E(t){try{return t.then; -}catch(e){return at.error=e,at}}function A(t,e,n,r){try{t.call(e,n,r)}catch(o){return o}}function T(t,e,n){$(function(t){var r=!1,o=A(n,e,function(n){r||(r=!0,e!==n?S(t,n):U(t,n))},function(e){r||(r=!0,P(t,e))},"Settle: "+(t._label||" unknown promise"));!r&&o&&(r=!0,P(t,o))},t)}function R(t,e){e._state===st?U(t,e._result):e._state===ut?P(t,e._result):x(e,void 0,function(e){S(t,e)},function(e){P(t,e)})}function _(t,e,n){e.constructor===t.constructor&&n===rt&&constructor.resolve===ot?R(t,e):n===at?P(t,at.error):void 0===n?U(t,e):s(n)?T(t,e,n):U(t,e)}function S(t,e){t===e?P(t,w()):i(e)?_(t,e,E(e)):U(t,e)}function C(t){t._onerror&&t._onerror(t._result),I(t)}function U(t,e){t._state===it&&(t._result=e,t._state=st,0!==t._subscribers.length&&$(I,t))}function P(t,e){t._state===it&&(t._state=ut,t._result=e,$(C,t))}function x(t,e,n,r){var o=t._subscribers,i=o.length;t._onerror=null,o[i]=e,o[i+st]=n,o[i+ut]=r,0===i&&t._state&&$(I,t)}function I(t){var e=t._subscribers,n=t._state;if(0!==e.length){for(var r,o,i=t._result,s=0;ss;s++)x(r.resolve(t[s]),void 0,e,n);return o}function k(t){var e=this,n=new e(m);return P(n,t),n}function M(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function G(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(t){this._id=pt++,this._state=void 0,this._result=void 0,this._subscribers=[],m!==t&&("function"!=typeof t&&M(),this instanceof N?L(this,t):G())}function q(t,e){this._instanceConstructor=t,this.promise=new t(m),Array.isArray(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?U(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&U(this.promise,this._result))):P(this.promise,this._validationError())}function H(){var t;if("undefined"!=typeof o)t=o;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=t.Promise;n&&"[object Promise]"===Object.prototype.toString.call(n.resolve())&&!n.cast||(t.Promise=dt)}var F;F=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var z,X,V,J=F,K=0,$=function(t,e){nt[K]=t,nt[K+1]=e,K+=2,2===K&&(X?X(d):V())},Z="undefined"!=typeof window?window:void 0,W=Z||{},Q=W.MutationObserver||W.WebKitMutationObserver,tt="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,nt=new Array(1e3);V=tt?f():Q?h():et?l():void 0===Z&&"function"==typeof e?g():p();var rt=y,ot=v,it=void 0,st=1,ut=2,at=new O,ft=new O,ct=j,ht=Y,lt=k,pt=0,dt=N;N.all=ct,N.race=ht,N.resolve=ot,N.reject=lt,N._setScheduler=u,N._setAsap=a,N._asap=$,N.prototype={constructor:N,then:rt,"catch":function(t){return this.then(null,t)}};var gt=q;q.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},q.prototype._enumerate=function(){for(var t=this.length,e=this._input,n=0;this._state===it&&t>n;n++)this._eachEntry(e[n],n)},q.prototype._eachEntry=function(t,e){var n=this._instanceConstructor,r=n.resolve;if(r===ot){var o=E(t);if(o===rt&&t._state!==it)this._settledAt(t._state,e,t._result);else if("function"!=typeof o)this._remaining--,this._result[e]=t;else if(n===dt){var i=new n(m);_(i,t,o),this._willSettleAt(i,e)}else this._willSettleAt(new n(function(e){e(t)}),e)}else this._willSettleAt(r(t),e)},q.prototype._settledAt=function(t,e,n){var r=this.promise;r._state===it&&(this._remaining--,t===ut?P(r,n):this._result[e]=n),0===this._remaining&&U(r,this._result)},q.prototype._willSettleAt=function(t,e){var n=this;x(t,void 0,function(t){n._settledAt(st,e,t)},function(t){n._settledAt(ut,e,t)})};var yt=H,vt={Promise:dt,polyfill:yt};"function"==typeof t&&t.amd?t(function(){return vt}):"undefined"!=typeof n&&n.exports?n.exports=vt:"undefined"!=typeof this&&(this.ES6Promise=vt),yt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:24}],23:[function(t,e,n){n.read=function(t,e,n,r,o){var i,s,u=8*o-r-1,a=(1<>1,c=-7,h=n?o-1:0,l=n?-1:1,p=t[e+h];for(h+=l,i=p&(1<<-c)-1,p>>=-c,c+=u;c>0;i=256*i+t[e+h],h+=l,c-=8);for(s=i&(1<<-c)-1,i>>=-c,c+=r;c>0;s=256*s+t[e+h],h+=l,c-=8);if(0===i)i=1-f;else{if(i===a)return s?NaN:(p?-1:1)*(1/0);s+=Math.pow(2,r),i-=f}return(p?-1:1)*s*Math.pow(2,i-r)},n.write=function(t,e,n,r,o,i){var s,u,a,f=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,d=r?1:-1,g=0>e||0===e&&0>1/e?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(u=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-s))<1&&(s--,a*=2),e+=s+h>=1?l/a:l*Math.pow(2,1-h),e*a>=2&&(s++,a/=2),s+h>=c?(u=0,s=c):s+h>=1?(u=(e*a-1)*Math.pow(2,o),s+=h):(u=e*Math.pow(2,h-1)*Math.pow(2,o),s=0));o>=8;t[n+p]=255&u,p+=d,u/=256,o-=8);for(s=s<0;t[n+p]=255&s,p+=d,s/=256,f-=8);t[n+p-d]|=128*g}},{}],24:[function(t,e,n){function r(){c=!1,u.length?f=u.concat(f):h=-1,f.length&&o()}function o(){if(!c){var t=setTimeout(r);c=!0;for(var e=f.length;e;){for(u=f,f=[];++h1)for(var n=1;no;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function u(t){if(t>=55296&&57343>=t)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function a(t,e){return b(t>>e&63|128)}function f(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(u(t),e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function c(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o=m)throw Error("Invalid byte index");var t=255&v[w];if(w++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function l(){var t,e,n,r,o;if(w>m)throw Error("Invalid byte index");if(w==m)return!1;if(t=255&v[w],w++,0==(128&t))return t;if(192==(224&t)){var e=h();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=h(),n=h(),o=(15&t)<<12|e<<6|n,o>=2048)return u(o),o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=h(),n=h(),r=h(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function p(t){v=i(t),m=v.length,w=0;for(var e,n=[];(e=l())!==!1;)n.push(e);return s(n)}var d="object"==typeof r&&r,g="object"==typeof n&&n&&n.exports==d&&n,y="object"==typeof e&&e;y.global!==y&&y.window!==y||(o=y);var v,m,w,b=String.fromCharCode,E={version:"2.0.0",encode:c,decode:p};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return E});else if(d&&!d.nodeType)if(g)g.exports=E;else{var A={},T=A.hasOwnProperty;for(var R in E)T.call(E,R)&&(d[R]=E[R])}else o.utf8=E}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],26:[function(e,n,r){(function(o){!function(o,i){if("function"==typeof t&&t.amd)t(["module","utf8","axios","base-64","es6-promise"],i);else if("undefined"!=typeof r)i(n,e("utf8"),e("axios"),e("base-64"),e("es6-promise"));else{var s={exports:{}};i(s,o.utf8,o.axios,o.base64,o.Promise),o.github=s.exports}}(this,function(t,e,n,r,i){"use strict";function s(t){return r.encode(e.encode(t))}function u(t){t=t||{};var r=t.apiUrl||"https://api.github.com",i=u._request=function(e,o,i,u,f){function c(){var t=o.indexOf("//")>=0?o:r+o;if(t+=/\?/.test(t)?"&":"?",i&&"object"===("undefined"==typeof i?"undefined":a(i))&&["GET","HEAD","DELETE"].indexOf(e)>-1)for(var n in i)i.hasOwnProperty(n)&&(t+="&"+encodeURIComponent(n)+"="+encodeURIComponent(i[n]));return t.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var h={headers:{Accept:f?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:e,data:i?i:{},url:c()};return(t.token||t.username&&t.password)&&(h.headers.Authorization=t.token?"token "+t.token:"Basic "+s(t.username+":"+t.password)),n(h).then(function(t){u(null,t.data||!0,t)},function(t){304===t.status?u(null,t.data||!0,t):u({path:o,request:t,error:t.status})})},f=u._requestAllPages=function(t,e,n){var r=[];!function o(){i("GET",t,null,function(i,s,u){if(i)return n(i);s instanceof Array||(s=[s]),r.push.apply(r,s);var a=(u.headers.link||"").split(",").filter(function(t){return/rel="next"/.test(t)}).map(function(t){return(/<(.*)>/.exec(t)||[])[1]}).pop();!a||e?n(i,r,u):(t=a,o())})}()};return u.User=function(){this.repos=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/user/repos",r=[];r.push("type="+encodeURIComponent(t.type||"all")),r.push("sort="+encodeURIComponent(t.sort||"updated")),r.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&r.push("page="+encodeURIComponent(t.page)),n+="?"+r.join("&"),f(n,!!t.page,e)},this.orgs=function(t){i("GET","/user/orgs",null,t)},this.gists=function(t){i("GET","/gists",null,t)},this.notifications=function(t,e){"function"==typeof t&&(e=t,t={}),t=t||{};var n="/notifications",r=[];if(t.all&&r.push("all=true"),t.participating&&r.push("participating=true"),t.since){var o=t.since;o.constructor===Date&&(o=o.toISOString()),r.push("since="+encodeURIComponent(o))}if(t.before){var s=t.before;s.constructor===Date&&(s=s.toISOString()),r.push("before="+encodeURIComponent(s))}t.page&&r.push("page="+encodeURIComponent(t.page)),r.length>0&&(n+="?"+r.join("&")),i("GET",n,null,e)},this.show=function(t,e){var n=t?"/users/"+t:"/user";i("GET",n,null,e)},this.userRepos=function(t,e,n){"function"==typeof e&&(n=e,e={});var r="/users/"+t+"/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),r+="?"+o.join("&"),f(r,!!e.page,n)},this.userStarred=function(t,e){var n="/users/"+t+"/starred?type=all&per_page=100";f(n,!1,e)},this.userGists=function(t,e){i("GET","/users/"+t+"/gists",null,e)},this.orgRepos=function(t,e){var n="/orgs/"+t+"/repos?type=all&&page_num=100&sort=updated&direction=desc";f(n,!1,e)},this.follow=function(t,e){i("PUT","/user/following/"+t,null,e)},this.unfollow=function(t,e){i("DELETE","/user/following/"+t,null,e)},this.createRepo=function(t,e){i("POST","/user/repos",t,e)}},u.Repository=function(t){function n(t,e){return t===l.branch&&l.sha?e(null,l.sha):void h.getRef("heads/"+t,function(n,r){l.branch=t,l.sha=r,e(n,r)})}var r,a=t.name,f=t.user,c=t.fullname,h=this;r=c?"/repos/"+c:"/repos/"+f+"/"+a;var l={branch:null,sha:null};this.getRef=function(t,e){i("GET",r+"/git/refs/"+t,null,function(t,n,r){return t?e(t):void e(null,n.object.sha,r)})},this.createRef=function(t,e){i("POST",r+"/git/refs",t,e)},this.deleteRef=function(e,n){i("DELETE",r+"/git/refs/"+e,t,n)},this.deleteRepo=function(e){i("DELETE",r,t,e)},this.listTags=function(t){i("GET",r+"/tags",null,t)},this.listPulls=function(t,e){t=t||{};var n=r+"/pulls",o=[];"string"==typeof t?o.push("state="+t):(t.state&&o.push("state="+encodeURIComponent(t.state)),t.head&&o.push("head="+encodeURIComponent(t.head)),t.base&&o.push("base="+encodeURIComponent(t.base)),t.sort&&o.push("sort="+encodeURIComponent(t.sort)),t.direction&&o.push("direction="+encodeURIComponent(t.direction)),t.page&&o.push("page="+t.page),t.per_page&&o.push("per_page="+t.per_page)),o.length>0&&(n+="?"+o.join("&")),i("GET",n,null,e)},this.getPull=function(t,e){i("GET",r+"/pulls/"+t,null,e)},this.compare=function(t,e,n){i("GET",r+"/compare/"+t+"..."+e,null,n)},this.listBranches=function(t){i("GET",r+"/git/refs/heads",null,function(e,n,r){return e?t(e):(n=n.map(function(t){return t.ref.replace(/^refs\/heads\//,"")}),void t(null,n,r))})},this.getBlob=function(t,e){i("GET",r+"/git/blobs/"+t,null,e,"raw")},this.getCommit=function(t,e,n){i("GET",r+"/git/commits/"+e,null,n)},this.getSha=function(t,e,n){return e&&""!==e?void i("GET",r+"/contents/"+e+(t?"?ref="+t:""),null,function(t,e,r){return t?n(t):void n(null,e.sha,r)}):h.getRef("heads/"+t,n)},this.getStatuses=function(t,e){i("GET",r+"/statuses/"+t,null,e)},this.getTree=function(t,e){i("GET",r+"/git/trees/"+t,null,function(t,n,r){return t?e(t):void e(null,n.tree,r)})},this.postBlob=function(t,n){if("string"==typeof t)t={content:e.encode(t),encoding:"utf-8"};else if("undefined"!=typeof o&&t instanceof o)t={content:t.toString("base64"),encoding:"base64"};else{if(!("undefined"!=typeof Blob&&t instanceof Blob))throw new Error("Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)");t={content:s(t),encoding:"base64"}}i("POST",r+"/git/blobs",t,function(t,e,r){return t?n(t):void n(null,e.sha,r)})},this.updateTree=function(t,e,n,o){var s={base_tree:t,tree:[{path:e,mode:"100644",type:"blob",sha:n}]};i("POST",r+"/git/trees",s,function(t,e,n){return t?o(t):void o(null,e.sha,n)})},this.postTree=function(t,e){i("POST",r+"/git/trees",{tree:t},function(t,n,r){return t?e(t):void e(null,n.sha,r)})},this.commit=function(e,n,o,s){var a=new u.User;a.show(null,function(u,a){if(u)return s(u);var f={message:o,author:{name:t.user,email:a.email},parents:[e],tree:n};i("POST",r+"/git/commits",f,function(t,e,n){return t?s(t):(l.sha=e.sha,void s(null,e.sha,n))})})},this.updateHead=function(t,e,n){i("PATCH",r+"/git/refs/heads/"+t,{sha:e},n)},this.show=function(t){i("GET",r,null,t)},this.contributors=function(t,e){e=e||1e3;var n=this;i("GET",r+"/stats/contributors",null,function(r,o,i){return r?t(r):void(202===i.status?setTimeout(function(){n.contributors(t,e)},e):t(r,o,i))})},this.contents=function(t,e,n){e=encodeURI(e),i("GET",r+"/contents"+(e?"/"+e:""),{ref:t},n)},this.fork=function(t){i("POST",r+"/forks",null,t)},this.listForks=function(t){i("GET",r+"/forks",null,t)},this.branch=function(t,e,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=e,e=t,t="master"),this.getRef("heads/"+t,function(t,r){return t&&n?n(t):void h.createRef({ref:"refs/heads/"+e,sha:r},n)})},this.createPullRequest=function(t,e){i("POST",r+"/pulls",t,e)},this.listHooks=function(t){i("GET",r+"/hooks",null,t)},this.getHook=function(t,e){i("GET",r+"/hooks/"+t,null,e)},this.createHook=function(t,e){i("POST",r+"/hooks",t,e)},this.editHook=function(t,e,n){i("PATCH",r+"/hooks/"+t,e,n)},this.deleteHook=function(t,e){i("DELETE",r+"/hooks/"+t,null,e)},this.read=function(t,e,n){i("GET",r+"/contents/"+encodeURI(e)+(t?"?ref="+t:""),null,n,!0)},this.remove=function(t,e,n){h.getSha(t,e,function(o,s){return o?n(o):void i("DELETE",r+"/contents/"+e,{message:e+" is removed",sha:s,branch:t},n)})},this["delete"]=this.remove,this.move=function(t,e,r,o){n(t,function(n,i){h.getTree(i+"?recursive=true",function(n,s){s.forEach(function(t){t.path===e&&(t.path=r),"tree"===t.type&&delete t.sha}),h.postTree(s,function(n,r){h.commit(i,r,"Deleted "+e,function(e,n){h.updateHead(t,n,o)})})})})},this.write=function(t,e,n,o,u,a){"function"==typeof u&&(a=u,u={}),h.getSha(t,encodeURI(e),function(f,c){var h={message:o,content:"undefined"==typeof u.encode||u.encode?s(n):n,branch:t,committer:u&&u.committer?u.committer:void 0,author:u&&u.author?u.author:void 0};f&&404!==f.error||(h.sha=c),i("PUT",r+"/contents/"+encodeURI(e),h,a)})},this.getCommits=function(t,e){t=t||{};var n=r+"/commits",o=[];if(t.sha&&o.push("sha="+encodeURIComponent(t.sha)),t.path&&o.push("path="+encodeURIComponent(t.path)),t.author&&o.push("author="+encodeURIComponent(t.author)),t.since){var s=t.since;s.constructor===Date&&(s=s.toISOString()),o.push("since="+encodeURIComponent(s))}if(t.until){var u=t.until;u.constructor===Date&&(u=u.toISOString()),o.push("until="+encodeURIComponent(u))}t.page&&o.push("page="+t.page),t.perpage&&o.push("per_page="+t.perpage),o.length>0&&(n+="?"+o.join("&")),i("GET",n,null,e)},this.isStarred=function(t,e,n){i("GET","/user/starred/"+t+"/"+e,null,n)},this.star=function(t,e,n){i("PUT","/user/starred/"+t+"/"+e,null,n)},this.unstar=function(t,e,n){i("DELETE","/user/starred/"+t+"/"+e,null,n)},this.createRelease=function(t,e){i("POST",r+"/releases",t,e)},this.editRelease=function(t,e,n){i("PATCH",r+"/releases/"+t,e,n)},this.getRelease=function(t,e){i("GET",r+"/releases/"+t,null,e)},this.deleteRelease=function(t,e){i("DELETE",r+"/releases/"+t,null,e)}},u.Gist=function(t){var e=t.id,n="/gists/"+e;this.read=function(t){i("GET",n,null,t)},this.create=function(t,e){i("POST","/gists",t,e)},this["delete"]=function(t){i("DELETE",n,null,t)},this.fork=function(t){i("POST",n+"/fork",null,t)},this.update=function(t,e){i("PATCH",n,t,e)},this.star=function(t){i("PUT",n+"/star",null,t)},this.unstar=function(t){i("DELETE",n+"/star",null,t)},this.isStarred=function(t){i("GET",n+"/star",null,t)}},u.Issue=function(t){var e="/repos/"+t.user+"/"+t.repo+"/issues";this.create=function(t,n){i("POST",e,t,n)},this.list=function(t,n){var r=[];Object.keys(t).forEach(function(e){r.push(encodeURIComponent(e)+"="+encodeURIComponent(t[e]))}),f(e+"?"+r.join("&"),!!t.page,n)},this.comment=function(t,e,n){i("POST",t.comments_url,{body:e},n)},this.edit=function(t,n,r){i("PATCH",e+"/"+t,n,r)},this.get=function(t,n){i("GET",e+"/"+t,null,n)}},u.Search=function(t){var e="/search/",n="?q="+t.query;this.repositories=function(t,r){i("GET",e+"repositories"+n,t,r)},this.code=function(t,r){i("GET",e+"code"+n,t,r)},this.issues=function(t,r){i("GET",e+"issues"+n,t,r)},this.users=function(t,r){i("GET",e+"users"+n,t,r)}},u.RateLimit=function(){this.getRateLimit=function(t){i("GET","/rate_limit",null,t)}},u}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};i.polyfill&&i.polyfill(),u.getIssues=function(t,e){return new u.Issue({user:t,repo:e})},u.getRepo=function(t,e){return e?new u.Repository({user:t,name:e}):new u.Repository({fullname:t})},u.getUser=function(){return new u.User},u.getGist=function(t){return new u.Gist({id:t})},u.getSearch=function(t){return new u.Search({query:t})},u.getRateLimit=function(){return new u.RateLimit},t.exports=u})}).call(this,e("buffer").Buffer)},{axios:1,"base-64":18,buffer:20,"es6-promise":22,utf8:25}]},{},[26])(26)}); -//# sourceMappingURL=github.bundle.min.js.map diff --git a/dist/github.bundle.min.js.map b/dist/github.bundle.min.js.map deleted file mode 100644 index 1e78aff2..00000000 --- a/dist/github.bundle.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/axios/index.js","github.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/btoa.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/transformData.js","node_modules/axios/lib/utils.js","node_modules/base-64/base64.js","node_modules/base64-js/lib/b64.js","node_modules/buffer/index.js","node_modules/buffer/node_modules/isarray/index.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/ieee754/index.js","node_modules/process/browser.js","node_modules/utf8/utf8.js","src/github.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","Github","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./lib/axios",2,"utils","buildURL","parseHeaders","transformData","isURLSameOrigin","btoa","resolve","reject","config","requestData","data","requestHeaders","headers","isFormData","request","XMLHttpRequest","XDomainRequest","url","auth","username","password","Authorization","open","method","toUpperCase","params","paramsSerializer","timeout","onload","responseHeaders","getAllResponseHeaders","responseData","indexOf","responseType","responseText","response","transformResponse","status","statusText","onerror","isStandardBrowserEnv","cookies","xsrfValue","withCredentials","read","xsrfCookieName","undefined","xsrfHeaderName","forEach","val","key","toLowerCase","setRequestHeader","isArrayBuffer","DataView","send","./../helpers/btoa","./../helpers/buildURL","./../helpers/cookies","./../helpers/isURLSameOrigin","./../helpers/parseHeaders","./../helpers/transformData","./../utils",3,"Axios","defaultConfig","defaults","merge","interceptors","InterceptorManager","dispatchRequest","isAbsoluteURL","combineURLs","bind","prototype","arguments","baseURL","transformRequest","common","chain","promise","Promise","interceptor","unshift","fulfilled","rejected","push","then","shift","defaultInstance","axios","create","all","promises","spread","./core/InterceptorManager","./core/dispatchRequest","./defaults","./helpers/bind","./helpers/combineURLs","./helpers/isAbsoluteURL","./helpers/spread","./helpers/transformData","./utils",4,"handlers","use","eject","id","fn","h",5,"process","adapter","../adapters/http","../adapters/xhr","_process",6,"PROTECTION_PREFIX","DEFAULT_CONTENT_TYPE","Content-Type","isArrayBufferView","buffer","isObject","isFile","isBlob","isUndefined","JSON","stringify","replace","parse","Accept","patch","post","put",7,"thisArg","args","Array","apply",8,"InvalidCharacterError","message","input","block","charCode","str","String","output","idx","map","chars","charAt","charCodeAt","name",9,"encode","encodeURIComponent","serializedParams","parts","isArray","v","isDate","toISOString","join",10,"relativeURL",11,"write","value","expires","path","domain","secure","cookie","isNumber","Date","toGMTString","isString","document","match","RegExp","decodeURIComponent","remove","now",12,"test",13,"resolveURL","href","msie","urlParsingNode","setAttribute","protocol","host","search","hash","hostname","port","pathname","originURL","navigator","userAgent","createElement","location","requestURL","parsed",14,"split","line","trim","substr",15,"callback","arr",16,"fns",17,"toString","result","ArrayBuffer","isView","obj","hasOwnProperty","assignValue","Object",18,"root","freeExports","freeModule","freeGlobal","error","TABLE","REGEX_SPACE_CHARACTERS","decode","bitStorage","bitCounter","position","fromCharCode","b","c","padding","base64","version","nodeType",19,"init","len","lookup","revLookup","toByteArray","b64","j","tmp","placeHolders","Arr","L","tripletToBase64","num","encodeChunk","uint8","start","end","fromByteArray","extraBytes","maxChunkLength","len2","Uint8Array",20,"typedArraySupport","foo","subarray","byteLength","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","arg","parent","fromNumber","fromString","fromObject","that","allocate","checked","string","encoding","object","isBuffer","fromBuffer","fromArray","TypeError","fromTypedArray","fromArrayBuffer","fromArrayLike","fromJsonObject","copy","array","__proto__","type","fromPool","poolSize","rootParent","RangeError","SlowBuffer","subject","buf","loweredCase","utf8ToBytes","base64ToBytes","slowToString","Infinity","hexSlice","utf8Slice","asciiSlice","binarySlice","base64Slice","utf16leSlice","hexWrite","offset","Number","remaining","strLen","parseInt","isNaN","utf8Write","blitBuffer","asciiWrite","asciiToBytes","binaryWrite","base64Write","ucs2Write","utf16leToBytes","slice","Math","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","ret","out","toHex","bytes","checkOffset","ext","checkInt","max","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754","writeDouble","base64clean","stringtrim","INVALID_BASE64_RE","units","leadSurrogate","byteArray","hi","lo","src","dst","INSPECT_MAX_BYTES","_augment","Symbol","species","defineProperty","configurable","_isBuffer","compare","x","y","isEncoding","concat","list","pos","item","equals","inspect","byteOffset","arrayIndexOf","foundIndex","isFinite","swap","toJSON","_arr","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt16BE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","target","targetStart","set","fill","base64-js","isarray",21,22,"lib$es6$promise$utils$$objectOrFunction","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","createTextNode","observe","characterData","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","lib$es6$promise$asap$$len","lib$es6$promise$asap$$queue","lib$es6$promise$asap$$attemptVertx","vertx","runOnLoop","runOnContext","lib$es6$promise$then$$then","onFulfillment","onRejection","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","_result","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","Constructor","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","_instanceConstructor","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","Function","P","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","race","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill",23,"isLE","mLen","nBytes","m","eLen","eMax","eBias","nBits","d","NaN","rt","abs","log","LN2",24,"cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","run","clearTimeout","Item","fun","noop","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","cwd","chdir","dir","umask",25,"ucs2decode","extra","counter","ucs2encode","index","stringFromCharCode","checkScalarValue","createByte","encodeCodePoint","symbol","utf8encode","byteString","readContinuationByte","byteIndex","byteCount","continuationByte","decodeSymbol","byte1","byte2","byte3","byte4","utf8decode","utf8",26,"factory","mod","github","Utf8","Base64","b64encode","options","API_URL","apiUrl","_request","cb","raw","getURL","_typeof","param","getTime","token","_requestAllPages","singlePage","results","iterate","err","xhr","next","link","filter","exec","pop","User","repos","sort","per_page","page","orgs","gists","notifications","participating","since","before","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","getRef","repoPath","repo","user","fullname","ref","createRef","deleteRef","deleteRepo","listTags","listPulls","head","base","direction","getPull","number","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","Blob","baseTree","blob","base_tree","mode","postTree","commit","userData","author","email","parents","updateHead","contributors","retry","contents","encodeURI","fork","listForks","oldBranch","newBranch","createPullRequest","listHooks","getHook","createHook","editHook","deleteHook","move","newPath","latestCommit","rootTree","writeOptions","committer","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","update","Issue","query","keys","option","comment","issue","comments_url","body","edit","get","Search","repositories","issues","users","RateLimit","getRateLimit","iterator","getIssues","getRepo","getUser","getGist","getSearch","base-64","es6-promise"],"mappings":"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","file":"github.bundle.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o= 200 && response.status < 300) ||\n (!('status' in request) && response.responseText) ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(requestData)) {\n requestData = new DataView(requestData);\n }\n\n // Send the request\n request.send(requestData);\n};\n\n},{\"./../helpers/btoa\":8,\"./../helpers/buildURL\":9,\"./../helpers/cookies\":11,\"./../helpers/isURLSameOrigin\":13,\"./../helpers/parseHeaders\":14,\"./../helpers/transformData\":16,\"./../utils\":17}],3:[function(require,module,exports){\n'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose defaults\naxios.defaults = defaultInstance.defaults;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = defaultInstance.interceptors;\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\n},{\"./core/InterceptorManager\":4,\"./core/dispatchRequest\":5,\"./defaults\":6,\"./helpers/bind\":7,\"./helpers/combineURLs\":10,\"./helpers/isAbsoluteURL\":12,\"./helpers/spread\":15,\"./helpers/transformData\":16,\"./utils\":17}],4:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n},{\"./../utils\":17}],5:[function(require,module,exports){\n(function (process){\n'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n\n}).call(this,require('_process'))\n\n},{\"../adapters/http\":2,\"../adapters/xhr\":2,\"_process\":24}],6:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformResponseJSON(data, headers) {\n if (utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponseJSON(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n\n},{\"./utils\":17}],7:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n},{}],8:[function(require,module,exports){\n'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\nInvalidCharacterError.prototype = new Error;\nInvalidCharacterError.prototype.code = 5;\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n},{\"./../utils\":17}],10:[function(require,module,exports){\n'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n},{\"./../utils\":17}],12:[function(require,module,exports){\n'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n},{}],13:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n},{\"./../utils\":17}],14:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n\n},{\"./../utils\":17}],15:[function(require,module,exports){\n'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n},{\"./../utils\":17}],17:[function(require,module,exports){\n'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n\n},{}],18:[function(require,module,exports){\n(function (global){\n/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n var i\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xFF0000) >> 16\n arr[L++] = (tmp & 0xFF00) >> 8\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n\n},{}],20:[function(require,module,exports){\n(function (global){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\nBuffer.poolSize = 8192 // not used by this implementation\n\nvar rootParent = {}\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.foo = function () { return 42 }\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\nfunction Buffer (arg) {\n if (!(this instanceof Buffer)) {\n // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n if (arguments.length > 1) return new Buffer(arg, arguments[1])\n return new Buffer(arg)\n }\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n this.length = 0\n this.parent = undefined\n }\n\n // Common case.\n if (typeof arg === 'number') {\n return fromNumber(this, arg)\n }\n\n // Slightly less common case.\n if (typeof arg === 'string') {\n return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\n }\n\n // Unusual.\n return fromObject(this, arg)\n}\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction fromNumber (that, length) {\n that = allocate(that, length < 0 ? 0 : checked(length) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < length; i++) {\n that[i] = 0\n }\n }\n return that\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\n\n // Assumption: byteLength() return value is always < kMaxLength.\n var length = byteLength(string, encoding) | 0\n that = allocate(that, length)\n\n that.write(string, encoding)\n return that\n}\n\nfunction fromObject (that, object) {\n if (Buffer.isBuffer(object)) return fromBuffer(that, object)\n\n if (isArray(object)) return fromArray(that, object)\n\n if (object == null) {\n throw new TypeError('must start with number, buffer, array or string')\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (object.buffer instanceof ArrayBuffer) {\n return fromTypedArray(that, object)\n }\n if (object instanceof ArrayBuffer) {\n return fromArrayBuffer(that, object)\n }\n }\n\n if (object.length) return fromArrayLike(that, object)\n\n return fromJsonObject(that, object)\n}\n\nfunction fromBuffer (that, buffer) {\n var length = checked(buffer.length) | 0\n that = allocate(that, length)\n buffer.copy(that, 0, 0, length)\n return that\n}\n\nfunction fromArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Duplicate of fromArray() to keep fromArray() monomorphic.\nfunction fromTypedArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n // Truncating the elements is probably not what people expect from typed\n // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n // of the old Buffer constructor.\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(array)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromTypedArray(that, new Uint8Array(array))\n }\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n// Returns a zero-length buffer for inputs that don't conform to the spec.\nfunction fromJsonObject (that, object) {\n var array\n var length = 0\n\n if (object.type === 'Buffer' && isArray(object.data)) {\n array = object.data\n length = checked(array.length) | 0\n }\n that = allocate(that, length)\n\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n} else {\n // pre-set for values that may exist in the future\n Buffer.prototype.length = undefined\n Buffer.prototype.parent = undefined\n}\n\nfunction allocate (that, length) {\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that.length = length\n }\n\n var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\n if (fromPool) that.parent = rootParent\n\n return that\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (subject, encoding) {\n if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\n\n var buf = new Buffer(subject, encoding)\n delete buf.parent\n return buf\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n var i = 0\n var len = Math.min(x, y)\n while (i < len) {\n if (a[i] !== b[i]) break\n\n ++i\n }\n\n if (i !== len) {\n x = a[i]\n y = b[i]\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'binary':\n case 'base64':\n case 'raw':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\n\n if (list.length === 0) {\n return new Buffer(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; i++) {\n length += list[i].length\n }\n }\n\n var buf = new Buffer(length)\n var pos = 0\n for (i = 0; i < list.length; i++) {\n var item = list[i]\n item.copy(buf, pos)\n pos += item.length\n }\n return buf\n}\n\nfunction byteLength (string, encoding) {\n if (typeof string !== 'string') string = '' + string\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'binary':\n // Deprecated\n case 'raw':\n case 'raws':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n start = start | 0\n end = end === undefined || end === Infinity ? this.length : end | 0\n\n if (!encoding) encoding = 'utf8'\n if (start < 0) start = 0\n if (end > this.length) end = this.length\n if (end <= start) return ''\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'binary':\n return binarySlice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return 0\n return Buffer.compare(this, b)\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\n if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\n else if (byteOffset < -0x80000000) byteOffset = -0x80000000\n byteOffset >>= 0\n\n if (this.length === 0) return -1\n if (byteOffset >= this.length) return -1\n\n // Negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n if (typeof val === 'string') {\n if (val.length === 0) return -1 // special case: looking for empty string always fails\n return String.prototype.indexOf.call(this, val, byteOffset)\n }\n if (Buffer.isBuffer(val)) {\n return arrayIndexOf(this, val, byteOffset)\n }\n if (typeof val === 'number') {\n if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n }\n return arrayIndexOf(this, [ val ], byteOffset)\n }\n\n function arrayIndexOf (arr, val, byteOffset) {\n var foundIndex = -1\n for (var i = 0; byteOffset + i < arr.length; i++) {\n if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\n } else {\n foundIndex = -1\n }\n }\n return -1\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; i++) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) throw new Error('Invalid hex string')\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n var swap = encoding\n encoding = offset\n offset = length | 0\n length = swap\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'binary':\n return binaryWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction binarySlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; i++) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; i++) {\n newBuf[i] = this[i + start]\n }\n }\n\n if (newBuf.length) newBuf.parent = this.parent || this\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('value is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n if (offset < 0) throw new RangeError('index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; i--) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; i++) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// fill(value, start=0, end=buffer.length)\nBuffer.prototype.fill = function fill (value, start, end) {\n if (!value) value = 0\n if (!start) start = 0\n if (!end) end = this.length\n\n if (end < start) throw new RangeError('end < start')\n\n // Fill 0 bytes; we're done\n if (end === start) return\n if (this.length === 0) return\n\n if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n var i\n if (typeof value === 'number') {\n for (i = start; i < end; i++) {\n this[i] = value\n }\n } else {\n var bytes = utf8ToBytes(value.toString())\n var len = bytes.length\n for (i = start; i < end; i++) {\n this[i] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; i++) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; i++) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"base64-js\":19,\"ieee754\":23,\"isarray\":21}],21:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\n},{}],22:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":24}],23:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n},{}],24:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],25:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],26:[function(require,module,exports){\n(function (Buffer){\n(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.utf8, global.axios, global.base64, global.Promise);\n global.github = mod.exports;\n }\n})(this, function (module, Utf8, axios, Base64, Promise) {\n /*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n 'use strict';\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += /\\?/.test(url) ? '&' : '?';\n\n if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for (var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if (options.token || options.username && options.password) {\n config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config).then(function (response) {\n cb(null, response.data || true, response);\n }, function (response) {\n if (response.status === 304) {\n cb(null, response.data || true, response);\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '').split(',').filter(function (link) {\n return (/rel=\"next\"/.test(link)\n );\n }).map(function (link) {\n return (/<(.*)>/.exec(link) || [])[1];\n }).pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [{\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [parent],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(function () {\n that.contributors(cb, retry);\n }, retry);\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function (owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function (owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function (owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function (options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function (id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function (id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function (id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function (options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function (option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function () {\n this.getRateLimit = function (cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function () {\n return new Github.RateLimit();\n };\n\n module.exports = Github;\n});\n\n}).call(this,require(\"buffer\").Buffer)\n\n},{\"axios\":1,\"base-64\":18,\"buffer\":20,\"es6-promise\":22,\"utf8\":25}]},{},[26])(26)\n});\n\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar transformData = require('./../helpers/transformData');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar btoa = window.btoa || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(resolve, reject, config) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n if (window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onload = function handleLoad() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = ['text', ''].indexOf(config.responseType || '') !== -1 ? request.responseText : request.response;\n var response = {\n data: transformData(\n responseData,\n responseHeaders,\n config.transformResponse\n ),\n // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n // Resolve or reject the Promise based on the status\n ((response.status >= 200 && response.status < 300) ||\n (!('status' in request) && response.responseText) ?\n resolve :\n reject)(response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new Error('Network Error'));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = config.withCredentials || isURLSameOrigin(config.url) ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (request.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n if (utils.isArrayBuffer(requestData)) {\n requestData = new DataView(requestData);\n }\n\n // Send the request\n request.send(requestData);\n};\n","'use strict';\n\nvar defaults = require('./defaults');\nvar utils = require('./utils');\nvar dispatchRequest = require('./core/dispatchRequest');\nvar InterceptorManager = require('./core/InterceptorManager');\nvar isAbsoluteURL = require('./helpers/isAbsoluteURL');\nvar combineURLs = require('./helpers/combineURLs');\nvar bind = require('./helpers/bind');\nvar transformData = require('./helpers/transformData');\n\nfunction Axios(defaultConfig) {\n this.defaults = utils.merge({}, defaultConfig);\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Don't allow overriding defaults.withCredentials\n config.withCredentials = config.withCredentials || this.defaults.withCredentials;\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nvar defaultInstance = new Axios(defaults);\nvar axios = module.exports = bind(Axios.prototype.request, defaultInstance);\n\naxios.create = function create(defaultConfig) {\n return new Axios(defaultConfig);\n};\n\n// Expose defaults\naxios.defaults = defaultInstance.defaults;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose interceptors\naxios.interceptors = defaultInstance.interceptors;\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n axios[method] = bind(Axios.prototype[method], defaultInstance);\n});\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\n/**\n * Dispatch a request to the server using whichever adapter\n * is supported by the current environment.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n return new Promise(function executor(resolve, reject) {\n try {\n var adapter;\n\n if (typeof config.adapter === 'function') {\n // For custom adapter support\n adapter = config.adapter;\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n\n if (typeof adapter === 'function') {\n adapter(resolve, reject, config);\n }\n } catch (e) {\n reject(e);\n }\n });\n};\n\n","'use strict';\n\nvar utils = require('./utils');\n\nvar PROTECTION_PREFIX = /^\\)\\]\\}',?\\n/;\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nmodule.exports = {\n transformRequest: [function transformResponseJSON(data, headers) {\n if (utils.isFormData(data)) {\n return data;\n }\n if (utils.isArrayBuffer(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isObject(data) && !utils.isFile(data) && !utils.isBlob(data)) {\n // Set application/json if no Content-Type has been specified\n if (!utils.isUndefined(headers)) {\n utils.forEach(headers, function processContentTypeHeader(val, key) {\n if (key.toLowerCase() === 'content-type') {\n headers['Content-Type'] = val;\n }\n });\n\n if (utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = 'application/json;charset=utf-8';\n }\n }\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponseJSON(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n data = data.replace(PROTECTION_PREFIX, '');\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n },\n patch: utils.merge(DEFAULT_CONTENT_TYPE),\n post: utils.merge(DEFAULT_CONTENT_TYPE),\n put: utils.merge(DEFAULT_CONTENT_TYPE)\n },\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN'\n};\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\nInvalidCharacterError.prototype = new Error;\nInvalidCharacterError.prototype.code = 5;\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new InvalidCharacterError('INVALID_CHARACTER_ERR: DOM Exception 5');\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '');\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return toString.call(val) === '[object FormData]';\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * typeof document.createElement -> undefined\n */\nfunction isStandardBrowserEnv() {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof document.createElement === 'function'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object' && !isArray(obj)) {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n trim: trim\n};\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n var i\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var len = code.length\n\n for (i = 0; i < len; i++) {\n lookup[i] = code[i]\n }\n\n for (i = 0; i < len; ++i) {\n revLookup[code.charCodeAt(i)] = i\n }\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp & 0xFF0000) >> 16\n arr[L++] = (tmp & 0xFF00) >> 8\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\nBuffer.poolSize = 8192 // not used by this implementation\n\nvar rootParent = {}\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.foo = function () { return 42 }\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\nfunction Buffer (arg) {\n if (!(this instanceof Buffer)) {\n // Avoid going through an ArgumentsAdaptorTrampoline in the common case.\n if (arguments.length > 1) return new Buffer(arg, arguments[1])\n return new Buffer(arg)\n }\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n this.length = 0\n this.parent = undefined\n }\n\n // Common case.\n if (typeof arg === 'number') {\n return fromNumber(this, arg)\n }\n\n // Slightly less common case.\n if (typeof arg === 'string') {\n return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')\n }\n\n // Unusual.\n return fromObject(this, arg)\n}\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction fromNumber (that, length) {\n that = allocate(that, length < 0 ? 0 : checked(length) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < length; i++) {\n that[i] = 0\n }\n }\n return that\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'\n\n // Assumption: byteLength() return value is always < kMaxLength.\n var length = byteLength(string, encoding) | 0\n that = allocate(that, length)\n\n that.write(string, encoding)\n return that\n}\n\nfunction fromObject (that, object) {\n if (Buffer.isBuffer(object)) return fromBuffer(that, object)\n\n if (isArray(object)) return fromArray(that, object)\n\n if (object == null) {\n throw new TypeError('must start with number, buffer, array or string')\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (object.buffer instanceof ArrayBuffer) {\n return fromTypedArray(that, object)\n }\n if (object instanceof ArrayBuffer) {\n return fromArrayBuffer(that, object)\n }\n }\n\n if (object.length) return fromArrayLike(that, object)\n\n return fromJsonObject(that, object)\n}\n\nfunction fromBuffer (that, buffer) {\n var length = checked(buffer.length) | 0\n that = allocate(that, length)\n buffer.copy(that, 0, 0, length)\n return that\n}\n\nfunction fromArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Duplicate of fromArray() to keep fromArray() monomorphic.\nfunction fromTypedArray (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n // Truncating the elements is probably not what people expect from typed\n // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior\n // of the old Buffer constructor.\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(array)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromTypedArray(that, new Uint8Array(array))\n }\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = checked(array.length) | 0\n that = allocate(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\n// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.\n// Returns a zero-length buffer for inputs that don't conform to the spec.\nfunction fromJsonObject (that, object) {\n var array\n var length = 0\n\n if (object.type === 'Buffer' && isArray(object.data)) {\n array = object.data\n length = checked(array.length) | 0\n }\n that = allocate(that, length)\n\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n} else {\n // pre-set for values that may exist in the future\n Buffer.prototype.length = undefined\n Buffer.prototype.parent = undefined\n}\n\nfunction allocate (that, length) {\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that.length = length\n }\n\n var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1\n if (fromPool) that.parent = rootParent\n\n return that\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (subject, encoding) {\n if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)\n\n var buf = new Buffer(subject, encoding)\n delete buf.parent\n return buf\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n var i = 0\n var len = Math.min(x, y)\n while (i < len) {\n if (a[i] !== b[i]) break\n\n ++i\n }\n\n if (i !== len) {\n x = a[i]\n y = b[i]\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'binary':\n case 'base64':\n case 'raw':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')\n\n if (list.length === 0) {\n return new Buffer(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; i++) {\n length += list[i].length\n }\n }\n\n var buf = new Buffer(length)\n var pos = 0\n for (i = 0; i < list.length; i++) {\n var item = list[i]\n item.copy(buf, pos)\n pos += item.length\n }\n return buf\n}\n\nfunction byteLength (string, encoding) {\n if (typeof string !== 'string') string = '' + string\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'binary':\n // Deprecated\n case 'raw':\n case 'raws':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n start = start | 0\n end = end === undefined || end === Infinity ? this.length : end | 0\n\n if (!encoding) encoding = 'utf8'\n if (start < 0) start = 0\n if (end > this.length) end = this.length\n if (end <= start) return ''\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'binary':\n return binarySlice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return 0\n return Buffer.compare(this, b)\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset) {\n if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff\n else if (byteOffset < -0x80000000) byteOffset = -0x80000000\n byteOffset >>= 0\n\n if (this.length === 0) return -1\n if (byteOffset >= this.length) return -1\n\n // Negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n if (typeof val === 'string') {\n if (val.length === 0) return -1 // special case: looking for empty string always fails\n return String.prototype.indexOf.call(this, val, byteOffset)\n }\n if (Buffer.isBuffer(val)) {\n return arrayIndexOf(this, val, byteOffset)\n }\n if (typeof val === 'number') {\n if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n }\n return arrayIndexOf(this, [ val ], byteOffset)\n }\n\n function arrayIndexOf (arr, val, byteOffset) {\n var foundIndex = -1\n for (var i = 0; byteOffset + i < arr.length; i++) {\n if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex\n } else {\n foundIndex = -1\n }\n }\n return -1\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; i++) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) throw new Error('Invalid hex string')\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n var swap = encoding\n encoding = offset\n offset = length | 0\n length = swap\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'binary':\n return binaryWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction binarySlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; i++) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; i++) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; i++) {\n newBuf[i] = this[i + start]\n }\n }\n\n if (newBuf.length) newBuf.parent = this.parent || this\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('value is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = value < 0 ? 1 : 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('index out of range')\n if (offset < 0) throw new RangeError('index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; i--) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; i++) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// fill(value, start=0, end=buffer.length)\nBuffer.prototype.fill = function fill (value, start, end) {\n if (!value) value = 0\n if (!start) start = 0\n if (!end) end = this.length\n\n if (end < start) throw new RangeError('end < start')\n\n // Fill 0 bytes; we're done\n if (end === start) return\n if (this.length === 0) return\n\n if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n var i\n if (typeof value === 'number') {\n for (i = start; i < end; i++) {\n this[i] = value\n }\n } else {\n var bytes = utf8ToBytes(value.toString())\n var len = bytes.length\n for (i = start; i < end; i++) {\n this[i] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; i++) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; i++) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; i++) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! https://mths.be/utf8js v2.0.0 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tvar byte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.0.0',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n","/*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n'use strict';\n\nvar Utf8 = require('utf8');\nvar axios = require('axios');\nvar Base64 = require('base-64');\nvar Promise = require('es6-promise');\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += ((/\\?/).test(url) ? '&' : '?');\n\n if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for(var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') +\n (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if ((options.token) || (options.username && options.password)) {\n config.headers.Authorization = options.token ?\n 'token ' + options.token :\n 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config)\n .then(function (response) {\n cb(\n null,\n response.data || true,\n response\n );\n }, function (response) {\n if (response.status === 304) {\n cb(\n null,\n response.data || true,\n response\n );\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '')\n .split(',')\n .filter(function(link) {\n return /rel=\"next\"/.test(link);\n })\n .map(function(link) {\n return (/<(.*)>/.exec(link) || [])[1];\n })\n .pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''),\n null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [\n {\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }\n ]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [\n parent\n ],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(\n function () {\n that.contributors(cb, retry);\n },\n retry\n );\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''),\n null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function(owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function(owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function(owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function(options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function(id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function(id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function(id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function(options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function(option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function() {\n this.getRateLimit = function(cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function() {\n return new Github.RateLimit();\n };\n\nmodule.exports = Github;\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.js b/dist/github.js deleted file mode 100644 index b5dd38a2..00000000 --- a/dist/github.js +++ /dev/null @@ -1,1136 +0,0 @@ -(function (global, factory) { - if (typeof define === "function" && define.amd) { - define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory); - } else if (typeof exports !== "undefined") { - factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise')); - } else { - var mod = { - exports: {} - }; - factory(mod, global.utf8, global.axios, global.base64, global.Promise); - global.github = mod.exports; - } -})(this, function (module, Utf8, axios, Base64, Promise) { - /*! - * @overview Github.js - * - * @copyright (c) 2013 Michael Aufreiter, Development Seed - * Github.js is freely distributable. - * - * @license Licensed under BSD-3-Clause-Clear - * - * For all details and documentation: - * http://substance.io/michael/github - */ - 'use strict'; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; - }; - - function b64encode(string) { - return Base64.encode(Utf8.encode(string)); - } - - if (Promise.polyfill) { - Promise.polyfill(); - } - - // Initial Setup - // ------------- - - function Github(options) { - options = options || {}; - - var API_URL = options.apiUrl || 'https://api.github.com'; - - // HTTP Request Abstraction - // ======= - // - // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec. - - var _request = Github._request = function _request(method, path, data, cb, raw) { - function getURL() { - var url = path.indexOf('//') >= 0 ? path : API_URL + path; - - url += /\?/.test(url) ? '&' : '?'; - - if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { - for (var param in data) { - if (data.hasOwnProperty(param)) { - url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); - } - } - } - - return url.replace(/(×tamp=\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); - } - - var config = { - headers: { - Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - method: method, - data: data ? data : {}, - url: getURL() - }; - - if (options.token || options.username && options.password) { - config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password); - } - - return axios(config).then(function (response) { - cb(null, response.data || true, response); - }, function (response) { - if (response.status === 304) { - cb(null, response.data || true, response); - } else { - cb({ - path: path, - request: response, - error: response.status - }); - } - }); - }; - - var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) { - var results = []; - - (function iterate() { - _request('GET', path, null, function (err, res, xhr) { - if (err) { - return cb(err); - } - - if (!(res instanceof Array)) { - res = [res]; - } - - results.push.apply(results, res); - - var next = (xhr.headers.link || '').split(',').filter(function (link) { - return (/rel="next"/.test(link) - ); - }).map(function (link) { - return (/<(.*)>/.exec(link) || [])[1]; - }).pop(); - - if (!next || singlePage) { - cb(err, results, xhr); - } else { - path = next; - iterate(); - } - }); - })(); - }; - - // User API - // ======= - - Github.User = function () { - this.repos = function (options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - options = options || {}; - - var url = '/user/repos'; - var params = []; - - params.push('type=' + encodeURIComponent(options.type || 'all')); - params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore - - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } - - url += '?' + params.join('&'); - - _requestAllPages(url, !!options.page, cb); - }; - - // List user organizations - // ------- - - this.orgs = function (cb) { - _request('GET', '/user/orgs', null, cb); - }; - - // List authenticated user's gists - // ------- - - this.gists = function (cb) { - _request('GET', '/gists', null, cb); - }; - - // List authenticated user's unread notifications - // ------- - - this.notifications = function (options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - options = options || {}; - var url = '/notifications'; - var params = []; - - if (options.all) { - params.push('all=true'); - } - - if (options.participating) { - params.push('participating=true'); - } - - if (options.since) { - var since = options.since; - - if (since.constructor === Date) { - since = since.toISOString(); - } - - params.push('since=' + encodeURIComponent(since)); - } - - if (options.before) { - var before = options.before; - - if (before.constructor === Date) { - before = before.toISOString(); - } - - params.push('before=' + encodeURIComponent(before)); - } - - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } - - if (params.length > 0) { - url += '?' + params.join('&'); - } - - _request('GET', url, null, cb); - }; - - // Show user information - // ------- - - this.show = function (username, cb) { - var command = username ? '/users/' + username : '/user'; - - _request('GET', command, null, cb); - }; - - // List user repositories - // ------- - - this.userRepos = function (username, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - var url = '/users/' + username + '/repos'; - var params = []; - - params.push('type=' + encodeURIComponent(options.type || 'all')); - params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore - - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } - - url += '?' + params.join('&'); - - _requestAllPages(url, !!options.page, cb); - }; - - // List user starred repositories - // ------- - - this.userStarred = function (username, cb) { - // Github does not always honor the 1000 limit so we want to iterate over the data set. - var request = '/users/' + username + '/starred?type=all&per_page=100'; - _requestAllPages(request, false, cb); - }; - - // List a user's gists - // ------- - - this.userGists = function (username, cb) { - _request('GET', '/users/' + username + '/gists', null, cb); - }; - - // List organization repositories - // ------- - - this.orgRepos = function (orgname, cb) { - // Github does not always honor the 1000 limit so we want to iterate over the data set. - var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc'; - _requestAllPages(request, false, cb); - }; - - // Follow user - // ------- - - this.follow = function (username, cb) { - _request('PUT', '/user/following/' + username, null, cb); - }; - - // Unfollow user - // ------- - - this.unfollow = function (username, cb) { - _request('DELETE', '/user/following/' + username, null, cb); - }; - - // Create a repo - // ------- - this.createRepo = function (options, cb) { - _request('POST', '/user/repos', options, cb); - }; - }; - - // Repository API - // ======= - - Github.Repository = function (options) { - var repo = options.name; - var user = options.user; - var fullname = options.fullname; - - var that = this; - var repoPath; - - if (fullname) { - repoPath = '/repos/' + fullname; - } else { - repoPath = '/repos/' + user + '/' + repo; - } - - var currentTree = { - branch: null, - sha: null - }; - - // Uses the cache if branch has not been changed - // ------- - - function updateTree(branch, cb) { - if (branch === currentTree.branch && currentTree.sha) { - return cb(null, currentTree.sha); - } - - that.getRef('heads/' + branch, function (err, sha) { - currentTree.branch = branch; - currentTree.sha = sha; - cb(err, sha); - }); - } - - // Get a particular reference - // ------- - - this.getRef = function (ref, cb) { - _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.object.sha, xhr); - }); - }; - - // Create a new reference - // -------- - // - // { - // "ref": "refs/heads/my-new-branch-name", - // "sha": "827efc6d56897b048c772eb4087f854f46256132" - // } - - this.createRef = function (options, cb) { - _request('POST', repoPath + '/git/refs', options, cb); - }; - - // Delete a reference - // -------- - // - // Repo.deleteRef('heads/gh-pages') - // repo.deleteRef('tags/v1.0') - - this.deleteRef = function (ref, cb) { - _request('DELETE', repoPath + '/git/refs/' + ref, options, cb); - }; - - // Delete a repo - // -------- - - this.deleteRepo = function (cb) { - _request('DELETE', repoPath, options, cb); - }; - - // List all tags of a repository - // ------- - - this.listTags = function (cb) { - _request('GET', repoPath + '/tags', null, cb); - }; - - // List all pull requests of a respository - // ------- - - this.listPulls = function (options, cb) { - options = options || {}; - var url = repoPath + '/pulls'; - var params = []; - - if (typeof options === 'string') { - // Backward compatibility - params.push('state=' + options); - } else { - if (options.state) { - params.push('state=' + encodeURIComponent(options.state)); - } - - if (options.head) { - params.push('head=' + encodeURIComponent(options.head)); - } - - if (options.base) { - params.push('base=' + encodeURIComponent(options.base)); - } - - if (options.sort) { - params.push('sort=' + encodeURIComponent(options.sort)); - } - - if (options.direction) { - params.push('direction=' + encodeURIComponent(options.direction)); - } - - if (options.page) { - params.push('page=' + options.page); - } - - if (options.per_page) { - params.push('per_page=' + options.per_page); - } - } - - if (params.length > 0) { - url += '?' + params.join('&'); - } - - _request('GET', url, null, cb); - }; - - // Gets details for a specific pull request - // ------- - - this.getPull = function (number, cb) { - _request('GET', repoPath + '/pulls/' + number, null, cb); - }; - - // Retrieve the changes made between base and head - // ------- - - this.compare = function (base, head, cb) { - _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb); - }; - - // List all branches of a repository - // ------- - - this.listBranches = function (cb) { - _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) { - if (err) { - return cb(err); - } - - heads = heads.map(function (head) { - return head.ref.replace(/^refs\/heads\//, ''); - }); - - cb(null, heads, xhr); - }); - }; - - // Retrieve the contents of a blob - // ------- - - this.getBlob = function (sha, cb) { - _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw'); - }; - - // For a given file path, get the corresponding sha (blob for files, tree for dirs) - // ------- - - this.getCommit = function (branch, sha, cb) { - _request('GET', repoPath + '/git/commits/' + sha, null, cb); - }; - - // For a given file path, get the corresponding sha (blob for files, tree for dirs) - // ------- - - this.getSha = function (branch, path, cb) { - if (!path || path === '') { - return that.getRef('heads/' + branch, cb); - } - - _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) { - if (err) { - return cb(err); - } - - cb(null, pathContent.sha, xhr); - }); - }; - - // Get the statuses for a particular SHA - // ------- - - this.getStatuses = function (sha, cb) { - _request('GET', repoPath + '/statuses/' + sha, null, cb); - }; - - // Retrieve the tree a commit points to - // ------- - - this.getTree = function (tree, cb) { - _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.tree, xhr); - }); - }; - - // Post a new blob object, getting a blob SHA back - // ------- - - this.postBlob = function (content, cb) { - if (typeof content === 'string') { - content = { - content: Utf8.encode(content), - encoding: 'utf-8' - }; - } else { - if (typeof Buffer !== 'undefined' && content instanceof Buffer) { - // in NodeJS - content = { - content: content.toString('base64'), - encoding: 'base64' - }; - } else if (typeof Blob !== 'undefined' && content instanceof Blob) { - content = { - content: b64encode(content), - encoding: 'base64' - }; - } else { - throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)'); - } - } - - _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.sha, xhr); - }); - }; - - // Update an existing tree adding a new blob object getting a tree SHA back - // ------- - - this.updateTree = function (baseTree, path, blob, cb) { - var data = { - base_tree: baseTree, - tree: [{ - path: path, - mode: '100644', - type: 'blob', - sha: blob - }] - }; - - _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.sha, xhr); - }); - }; - - // Post a new tree object having a file path pointer replaced - // with a new blob SHA getting a tree SHA back - // ------- - - this.postTree = function (tree, cb) { - _request('POST', repoPath + '/git/trees', { - tree: tree - }, function (err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.sha, xhr); - }); - }; - - // Create a new commit object with the current commit SHA as the parent - // and the new tree SHA, getting a commit SHA back - // ------- - - this.commit = function (parent, tree, message, cb) { - var user = new Github.User(); - - user.show(null, function (err, userData) { - if (err) { - return cb(err); - } - - var data = { - message: message, - author: { - name: options.user, - email: userData.email - }, - parents: [parent], - tree: tree - }; - - _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) { - if (err) { - return cb(err); - } - - currentTree.sha = res.sha; // Update latest commit - - cb(null, res.sha, xhr); - }); - }); - }; - - // Update the reference of your head to point to the new commit SHA - // ------- - - this.updateHead = function (head, commit, cb) { - _request('PATCH', repoPath + '/git/refs/heads/' + head, { - sha: commit - }, cb); - }; - - // Show repository information - // ------- - - this.show = function (cb) { - _request('GET', repoPath, null, cb); - }; - - // Show repository contributors - // ------- - - this.contributors = function (cb, retry) { - retry = retry || 1000; - var that = this; - - _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) { - if (err) { - return cb(err); - } - - if (xhr.status === 202) { - setTimeout(function () { - that.contributors(cb, retry); - }, retry); - } else { - cb(err, data, xhr); - } - }); - }; - - // Get contents - // -------- - - this.contents = function (ref, path, cb) { - path = encodeURI(path); - _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), { - ref: ref - }, cb); - }; - - // Fork repository - // ------- - - this.fork = function (cb) { - _request('POST', repoPath + '/forks', null, cb); - }; - - // List forks - // -------- - - this.listForks = function (cb) { - _request('GET', repoPath + '/forks', null, cb); - }; - - // Branch repository - // -------- - - this.branch = function (oldBranch, newBranch, cb) { - if (arguments.length === 2 && typeof arguments[1] === 'function') { - cb = newBranch; - newBranch = oldBranch; - oldBranch = 'master'; - } - - this.getRef('heads/' + oldBranch, function (err, ref) { - if (err && cb) { - return cb(err); - } - - that.createRef({ - ref: 'refs/heads/' + newBranch, - sha: ref - }, cb); - }); - }; - - // Create pull request - // -------- - - this.createPullRequest = function (options, cb) { - _request('POST', repoPath + '/pulls', options, cb); - }; - - // List hooks - // -------- - - this.listHooks = function (cb) { - _request('GET', repoPath + '/hooks', null, cb); - }; - - // Get a hook - // -------- - - this.getHook = function (id, cb) { - _request('GET', repoPath + '/hooks/' + id, null, cb); - }; - - // Create a hook - // -------- - - this.createHook = function (options, cb) { - _request('POST', repoPath + '/hooks', options, cb); - }; - - // Edit a hook - // -------- - - this.editHook = function (id, options, cb) { - _request('PATCH', repoPath + '/hooks/' + id, options, cb); - }; - - // Delete a hook - // -------- - - this.deleteHook = function (id, cb) { - _request('DELETE', repoPath + '/hooks/' + id, null, cb); - }; - - // Read file at given path - // ------- - - this.read = function (branch, path, cb) { - _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true); - }; - - // Remove a file - // ------- - - this.remove = function (branch, path, cb) { - that.getSha(branch, path, function (err, sha) { - if (err) { - return cb(err); - } - - _request('DELETE', repoPath + '/contents/' + path, { - message: path + ' is removed', - sha: sha, - branch: branch - }, cb); - }); - }; - - // Alias for repo.remove for backwards comapt. - // ------- - this.delete = this.remove; - - // Move a file to a new location - // ------- - - this.move = function (branch, path, newPath, cb) { - updateTree(branch, function (err, latestCommit) { - that.getTree(latestCommit + '?recursive=true', function (err, tree) { - // Update Tree - tree.forEach(function (ref) { - if (ref.path === path) { - ref.path = newPath; - } - - if (ref.type === 'tree') { - delete ref.sha; - } - }); - - that.postTree(tree, function (err, rootTree) { - that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) { - that.updateHead(branch, commit, cb); - }); - }); - }); - }); - }; - - // Write file contents to a given branch and path - // ------- - - this.write = function (branch, path, content, message, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - that.getSha(branch, encodeURI(path), function (err, sha) { - var writeOptions = { - message: message, - content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content, - branch: branch, - committer: options && options.committer ? options.committer : undefined, - author: options && options.author ? options.author : undefined - }; - - // If no error, we set the sha to overwrite an existing file - if (!(err && err.error !== 404)) { - writeOptions.sha = sha; - } - - _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb); - }); - }; - - // List commits on a repository. Takes an object of optional parameters: - // sha: SHA or branch to start listing commits from - // path: Only commits containing this file path will be returned - // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address - // since: ISO 8601 date - only commits after this date will be returned - // until: ISO 8601 date - only commits before this date will be returned - // ------- - - this.getCommits = function (options, cb) { - options = options || {}; - var url = repoPath + '/commits'; - var params = []; - - if (options.sha) { - params.push('sha=' + encodeURIComponent(options.sha)); - } - - if (options.path) { - params.push('path=' + encodeURIComponent(options.path)); - } - - if (options.author) { - params.push('author=' + encodeURIComponent(options.author)); - } - - if (options.since) { - var since = options.since; - - if (since.constructor === Date) { - since = since.toISOString(); - } - - params.push('since=' + encodeURIComponent(since)); - } - - if (options.until) { - var until = options.until; - - if (until.constructor === Date) { - until = until.toISOString(); - } - - params.push('until=' + encodeURIComponent(until)); - } - - if (options.page) { - params.push('page=' + options.page); - } - - if (options.perpage) { - params.push('per_page=' + options.perpage); - } - - if (params.length > 0) { - url += '?' + params.join('&'); - } - - _request('GET', url, null, cb); - }; - - // Check if a repository is starred. - // -------- - - this.isStarred = function (owner, repository, cb) { - _request('GET', '/user/starred/' + owner + '/' + repository, null, cb); - }; - - // Star a repository. - // -------- - - this.star = function (owner, repository, cb) { - _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); - }; - - // Unstar a repository. - // -------- - - this.unstar = function (owner, repository, cb) { - _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); - }; - - // Create a new release - // -------- - - this.createRelease = function (options, cb) { - _request('POST', repoPath + '/releases', options, cb); - }; - - // Edit a release - // -------- - - this.editRelease = function (id, options, cb) { - _request('PATCH', repoPath + '/releases/' + id, options, cb); - }; - - // Get a single release - // -------- - - this.getRelease = function (id, cb) { - _request('GET', repoPath + '/releases/' + id, null, cb); - }; - - // Remove a release - // -------- - - this.deleteRelease = function (id, cb) { - _request('DELETE', repoPath + '/releases/' + id, null, cb); - }; - }; - - // Gists API - // ======= - - Github.Gist = function (options) { - var id = options.id; - var gistPath = '/gists/' + id; - - // Read the gist - // -------- - - this.read = function (cb) { - _request('GET', gistPath, null, cb); - }; - - // Create the gist - // -------- - // { - // "description": "the description for this gist", - // "public": true, - // "files": { - // "file1.txt": { - // "content": "String file contents" - // } - // } - // } - - this.create = function (options, cb) { - _request('POST', '/gists', options, cb); - }; - - // Delete the gist - // -------- - - this.delete = function (cb) { - _request('DELETE', gistPath, null, cb); - }; - - // Fork a gist - // -------- - - this.fork = function (cb) { - _request('POST', gistPath + '/fork', null, cb); - }; - - // Update a gist with the new stuff - // -------- - - this.update = function (options, cb) { - _request('PATCH', gistPath, options, cb); - }; - - // Star a gist - // -------- - - this.star = function (cb) { - _request('PUT', gistPath + '/star', null, cb); - }; - - // Untar a gist - // -------- - - this.unstar = function (cb) { - _request('DELETE', gistPath + '/star', null, cb); - }; - - // Check if a gist is starred - // -------- - - this.isStarred = function (cb) { - _request('GET', gistPath + '/star', null, cb); - }; - }; - - // Issues API - // ========== - - Github.Issue = function (options) { - var path = '/repos/' + options.user + '/' + options.repo + '/issues'; - - this.create = function (options, cb) { - _request('POST', path, options, cb); - }; - - this.list = function (options, cb) { - var query = []; - - Object.keys(options).forEach(function (option) { - query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option])); - }); - - _requestAllPages(path + '?' + query.join('&'), !!options.page, cb); - }; - - this.comment = function (issue, comment, cb) { - _request('POST', issue.comments_url, { - body: comment - }, cb); - }; - - this.edit = function (issue, options, cb) { - _request('PATCH', path + '/' + issue, options, cb); - }; - - this.get = function (issue, cb) { - _request('GET', path + '/' + issue, null, cb); - }; - }; - - // Search API - // ========== - - Github.Search = function (options) { - var path = '/search/'; - var query = '?q=' + options.query; - - this.repositories = function (options, cb) { - _request('GET', path + 'repositories' + query, options, cb); - }; - - this.code = function (options, cb) { - _request('GET', path + 'code' + query, options, cb); - }; - - this.issues = function (options, cb) { - _request('GET', path + 'issues' + query, options, cb); - }; - - this.users = function (options, cb) { - _request('GET', path + 'users' + query, options, cb); - }; - }; - - // Rate Limit API - // ========== - - Github.RateLimit = function () { - this.getRateLimit = function (cb) { - _request('GET', '/rate_limit', null, cb); - }; - }; - - return Github; - }; - - // Top Level API - // ------- - - Github.getIssues = function (user, repo) { - return new Github.Issue({ - user: user, - repo: repo - }); - }; - - Github.getRepo = function (user, repo) { - if (!repo) { - return new Github.Repository({ - fullname: user - }); - } else { - return new Github.Repository({ - user: user, - name: repo - }); - } - }; - - Github.getUser = function () { - return new Github.User(); - }; - - Github.getGist = function (id) { - return new Github.Gist({ - id: id - }); - }; - - Github.getSearch = function (query) { - return new Github.Search({ - query: query - }); - }; - - Github.getRateLimit = function () { - return new Github.RateLimit(); - }; - - module.exports = Github; -}); -//# sourceMappingURL=github.js.map diff --git a/dist/github.js.map b/dist/github.js.map deleted file mode 100644 index eb15fe9e..00000000 --- a/dist/github.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":[],"mappings":"","sources":["github.js"],"sourcesContent":["(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.utf8, global.axios, global.base64, global.Promise);\n global.github = mod.exports;\n }\n})(this, function (module, Utf8, axios, Base64, Promise) {\n /*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n 'use strict';\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += /\\?/.test(url) ? '&' : '?';\n\n if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for (var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if (options.token || options.username && options.password) {\n config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config).then(function (response) {\n cb(null, response.data || true, response);\n }, function (response) {\n if (response.status === 304) {\n cb(null, response.data || true, response);\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '').split(',').filter(function (link) {\n return (/rel=\"next\"/.test(link)\n );\n }).map(function (link) {\n return (/<(.*)>/.exec(link) || [])[1];\n }).pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [{\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [parent],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(function () {\n that.contributors(cb, retry);\n }, retry);\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function (owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function (owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function (owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function (options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function (id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function (id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function (id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function (options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function (option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function () {\n this.getRateLimit = function (cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function () {\n return new Github.RateLimit();\n };\n\n module.exports = Github;\n});"],"file":"github.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/github.min.js b/dist/github.min.js deleted file mode 100644 index da59303e..00000000 --- a/dist/github.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){if("function"==typeof define&&define.amd)define(["module","utf8","axios","base-64","es6-promise"],t);else if("undefined"!=typeof exports)t(module,require("utf8"),require("axios"),require("base-64"),require("es6-promise"));else{var n={exports:{}};t(n,e.utf8,e.axios,e.base64,e.Promise),e.github=n.exports}}(this,function(e,t,n,o,s){"use strict";function i(e){return o.encode(t.encode(e))}function u(e){e=e||{};var o=e.apiUrl||"https://api.github.com",s=u._request=function(t,s,u,a,c){function f(){var e=s.indexOf("//")>=0?s:o+s;if(e+=/\?/.test(e)?"&":"?",u&&"object"===("undefined"==typeof u?"undefined":r(u))&&["GET","HEAD","DELETE"].indexOf(t)>-1)for(var n in u)u.hasOwnProperty(n)&&(e+="&"+encodeURIComponent(n)+"="+encodeURIComponent(u[n]));return e.replace(/(×tamp=\d+)/,"")+("undefined"!=typeof window?"×tamp="+(new Date).getTime():"")}var l={headers:{Accept:c?"application/vnd.github.v3.raw+json":"application/vnd.github.v3+json","Content-Type":"application/json;charset=UTF-8"},method:t,data:u?u:{},url:f()};return(e.token||e.username&&e.password)&&(l.headers.Authorization=e.token?"token "+e.token:"Basic "+i(e.username+":"+e.password)),n(l).then(function(e){a(null,e.data||!0,e)},function(e){304===e.status?a(null,e.data||!0,e):a({path:s,request:e,error:e.status})})},a=u._requestAllPages=function(e,t,n){var o=[];!function i(){s("GET",e,null,function(s,u,r){if(s)return n(s);u instanceof Array||(u=[u]),o.push.apply(o,u);var a=(r.headers.link||"").split(",").filter(function(e){return/rel="next"/.test(e)}).map(function(e){return(/<(.*)>/.exec(e)||[])[1]}).pop();!a||t?n(s,o,r):(e=a,i())})}()};return u.User=function(){this.repos=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/user/repos",o=[];o.push("type="+encodeURIComponent(e.type||"all")),o.push("sort="+encodeURIComponent(e.sort||"updated")),o.push("per_page="+encodeURIComponent(e.per_page||"100")),e.page&&o.push("page="+encodeURIComponent(e.page)),n+="?"+o.join("&"),a(n,!!e.page,t)},this.orgs=function(e){s("GET","/user/orgs",null,e)},this.gists=function(e){s("GET","/gists",null,e)},this.notifications=function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{};var n="/notifications",o=[];if(e.all&&o.push("all=true"),e.participating&&o.push("participating=true"),e.since){var i=e.since;i.constructor===Date&&(i=i.toISOString()),o.push("since="+encodeURIComponent(i))}if(e.before){var u=e.before;u.constructor===Date&&(u=u.toISOString()),o.push("before="+encodeURIComponent(u))}e.page&&o.push("page="+encodeURIComponent(e.page)),o.length>0&&(n+="?"+o.join("&")),s("GET",n,null,t)},this.show=function(e,t){var n=e?"/users/"+e:"/user";s("GET",n,null,t)},this.userRepos=function(e,t,n){"function"==typeof t&&(n=t,t={});var o="/users/"+e+"/repos",s=[];s.push("type="+encodeURIComponent(t.type||"all")),s.push("sort="+encodeURIComponent(t.sort||"updated")),s.push("per_page="+encodeURIComponent(t.per_page||"100")),t.page&&s.push("page="+encodeURIComponent(t.page)),o+="?"+s.join("&"),a(o,!!t.page,n)},this.userStarred=function(e,t){var n="/users/"+e+"/starred?type=all&per_page=100";a(n,!1,t)},this.userGists=function(e,t){s("GET","/users/"+e+"/gists",null,t)},this.orgRepos=function(e,t){var n="/orgs/"+e+"/repos?type=all&&page_num=100&sort=updated&direction=desc";a(n,!1,t)},this.follow=function(e,t){s("PUT","/user/following/"+e,null,t)},this.unfollow=function(e,t){s("DELETE","/user/following/"+e,null,t)},this.createRepo=function(e,t){s("POST","/user/repos",e,t)}},u.Repository=function(e){function n(e,t){return e===l.branch&&l.sha?t(null,l.sha):void f.getRef("heads/"+e,function(n,o){l.branch=e,l.sha=o,t(n,o)})}var o,r=e.name,a=e.user,c=e.fullname,f=this;o=c?"/repos/"+c:"/repos/"+a+"/"+r;var l={branch:null,sha:null};this.getRef=function(e,t){s("GET",o+"/git/refs/"+e,null,function(e,n,o){return e?t(e):void t(null,n.object.sha,o)})},this.createRef=function(e,t){s("POST",o+"/git/refs",e,t)},this.deleteRef=function(t,n){s("DELETE",o+"/git/refs/"+t,e,n)},this.deleteRepo=function(t){s("DELETE",o,e,t)},this.listTags=function(e){s("GET",o+"/tags",null,e)},this.listPulls=function(e,t){e=e||{};var n=o+"/pulls",i=[];"string"==typeof e?i.push("state="+e):(e.state&&i.push("state="+encodeURIComponent(e.state)),e.head&&i.push("head="+encodeURIComponent(e.head)),e.base&&i.push("base="+encodeURIComponent(e.base)),e.sort&&i.push("sort="+encodeURIComponent(e.sort)),e.direction&&i.push("direction="+encodeURIComponent(e.direction)),e.page&&i.push("page="+e.page),e.per_page&&i.push("per_page="+e.per_page)),i.length>0&&(n+="?"+i.join("&")),s("GET",n,null,t)},this.getPull=function(e,t){s("GET",o+"/pulls/"+e,null,t)},this.compare=function(e,t,n){s("GET",o+"/compare/"+e+"..."+t,null,n)},this.listBranches=function(e){s("GET",o+"/git/refs/heads",null,function(t,n,o){return t?e(t):(n=n.map(function(e){return e.ref.replace(/^refs\/heads\//,"")}),void e(null,n,o))})},this.getBlob=function(e,t){s("GET",o+"/git/blobs/"+e,null,t,"raw")},this.getCommit=function(e,t,n){s("GET",o+"/git/commits/"+t,null,n)},this.getSha=function(e,t,n){return t&&""!==t?void s("GET",o+"/contents/"+t+(e?"?ref="+e:""),null,function(e,t,o){return e?n(e):void n(null,t.sha,o)}):f.getRef("heads/"+e,n)},this.getStatuses=function(e,t){s("GET",o+"/statuses/"+e,null,t)},this.getTree=function(e,t){s("GET",o+"/git/trees/"+e,null,function(e,n,o){return e?t(e):void t(null,n.tree,o)})},this.postBlob=function(e,n){if("string"==typeof e)e={content:t.encode(e),encoding:"utf-8"};else if("undefined"!=typeof Buffer&&e instanceof Buffer)e={content:e.toString("base64"),encoding:"base64"};else{if(!("undefined"!=typeof Blob&&e instanceof Blob))throw new Error("Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)");e={content:i(e),encoding:"base64"}}s("POST",o+"/git/blobs",e,function(e,t,o){return e?n(e):void n(null,t.sha,o)})},this.updateTree=function(e,t,n,i){var u={base_tree:e,tree:[{path:t,mode:"100644",type:"blob",sha:n}]};s("POST",o+"/git/trees",u,function(e,t,n){return e?i(e):void i(null,t.sha,n)})},this.postTree=function(e,t){s("POST",o+"/git/trees",{tree:e},function(e,n,o){return e?t(e):void t(null,n.sha,o)})},this.commit=function(t,n,i,r){var a=new u.User;a.show(null,function(u,a){if(u)return r(u);var c={message:i,author:{name:e.user,email:a.email},parents:[t],tree:n};s("POST",o+"/git/commits",c,function(e,t,n){return e?r(e):(l.sha=t.sha,void r(null,t.sha,n))})})},this.updateHead=function(e,t,n){s("PATCH",o+"/git/refs/heads/"+e,{sha:t},n)},this.show=function(e){s("GET",o,null,e)},this.contributors=function(e,t){t=t||1e3;var n=this;s("GET",o+"/stats/contributors",null,function(o,s,i){return o?e(o):void(202===i.status?setTimeout(function(){n.contributors(e,t)},t):e(o,s,i))})},this.contents=function(e,t,n){t=encodeURI(t),s("GET",o+"/contents"+(t?"/"+t:""),{ref:e},n)},this.fork=function(e){s("POST",o+"/forks",null,e)},this.listForks=function(e){s("GET",o+"/forks",null,e)},this.branch=function(e,t,n){2===arguments.length&&"function"==typeof arguments[1]&&(n=t,t=e,e="master"),this.getRef("heads/"+e,function(e,o){return e&&n?n(e):void f.createRef({ref:"refs/heads/"+t,sha:o},n)})},this.createPullRequest=function(e,t){s("POST",o+"/pulls",e,t)},this.listHooks=function(e){s("GET",o+"/hooks",null,e)},this.getHook=function(e,t){s("GET",o+"/hooks/"+e,null,t)},this.createHook=function(e,t){s("POST",o+"/hooks",e,t)},this.editHook=function(e,t,n){s("PATCH",o+"/hooks/"+e,t,n)},this.deleteHook=function(e,t){s("DELETE",o+"/hooks/"+e,null,t)},this.read=function(e,t,n){s("GET",o+"/contents/"+encodeURI(t)+(e?"?ref="+e:""),null,n,!0)},this.remove=function(e,t,n){f.getSha(e,t,function(i,u){return i?n(i):void s("DELETE",o+"/contents/"+t,{message:t+" is removed",sha:u,branch:e},n)})},this["delete"]=this.remove,this.move=function(e,t,o,s){n(e,function(n,i){f.getTree(i+"?recursive=true",function(n,u){u.forEach(function(e){e.path===t&&(e.path=o),"tree"===e.type&&delete e.sha}),f.postTree(u,function(n,o){f.commit(i,o,"Deleted "+t,function(t,n){f.updateHead(e,n,s)})})})})},this.write=function(e,t,n,u,r,a){"function"==typeof r&&(a=r,r={}),f.getSha(e,encodeURI(t),function(c,f){var l={message:u,content:"undefined"==typeof r.encode||r.encode?i(n):n,branch:e,committer:r&&r.committer?r.committer:void 0,author:r&&r.author?r.author:void 0};c&&404!==c.error||(l.sha=f),s("PUT",o+"/contents/"+encodeURI(t),l,a)})},this.getCommits=function(e,t){e=e||{};var n=o+"/commits",i=[];if(e.sha&&i.push("sha="+encodeURIComponent(e.sha)),e.path&&i.push("path="+encodeURIComponent(e.path)),e.author&&i.push("author="+encodeURIComponent(e.author)),e.since){var u=e.since;u.constructor===Date&&(u=u.toISOString()),i.push("since="+encodeURIComponent(u))}if(e.until){var r=e.until;r.constructor===Date&&(r=r.toISOString()),i.push("until="+encodeURIComponent(r))}e.page&&i.push("page="+e.page),e.perpage&&i.push("per_page="+e.perpage),i.length>0&&(n+="?"+i.join("&")),s("GET",n,null,t)},this.isStarred=function(e,t,n){s("GET","/user/starred/"+e+"/"+t,null,n)},this.star=function(e,t,n){s("PUT","/user/starred/"+e+"/"+t,null,n)},this.unstar=function(e,t,n){s("DELETE","/user/starred/"+e+"/"+t,null,n)},this.createRelease=function(e,t){s("POST",o+"/releases",e,t)},this.editRelease=function(e,t,n){s("PATCH",o+"/releases/"+e,t,n)},this.getRelease=function(e,t){s("GET",o+"/releases/"+e,null,t)},this.deleteRelease=function(e,t){s("DELETE",o+"/releases/"+e,null,t)}},u.Gist=function(e){var t=e.id,n="/gists/"+t;this.read=function(e){s("GET",n,null,e)},this.create=function(e,t){s("POST","/gists",e,t)},this["delete"]=function(e){s("DELETE",n,null,e)},this.fork=function(e){s("POST",n+"/fork",null,e)},this.update=function(e,t){s("PATCH",n,e,t)},this.star=function(e){s("PUT",n+"/star",null,e)},this.unstar=function(e){s("DELETE",n+"/star",null,e)},this.isStarred=function(e){s("GET",n+"/star",null,e)}},u.Issue=function(e){var t="/repos/"+e.user+"/"+e.repo+"/issues";this.create=function(e,n){s("POST",t,e,n)},this.list=function(e,n){var o=[];Object.keys(e).forEach(function(t){o.push(encodeURIComponent(t)+"="+encodeURIComponent(e[t]))}),a(t+"?"+o.join("&"),!!e.page,n)},this.comment=function(e,t,n){s("POST",e.comments_url,{body:t},n)},this.edit=function(e,n,o){s("PATCH",t+"/"+e,n,o)},this.get=function(e,n){s("GET",t+"/"+e,null,n)}},u.Search=function(e){var t="/search/",n="?q="+e.query;this.repositories=function(e,o){s("GET",t+"repositories"+n,e,o)},this.code=function(e,o){s("GET",t+"code"+n,e,o)},this.issues=function(e,o){s("GET",t+"issues"+n,e,o)},this.users=function(e,o){s("GET",t+"users"+n,e,o)}},u.RateLimit=function(){this.getRateLimit=function(e){s("GET","/rate_limit",null,e)}},u}var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};s.polyfill&&s.polyfill(),u.getIssues=function(e,t){return new u.Issue({user:e,repo:t})},u.getRepo=function(e,t){return t?new u.Repository({user:e,name:t}):new u.Repository({fullname:e})},u.getUser=function(){return new u.User},u.getGist=function(e){return new u.Gist({id:e})},u.getSearch=function(e){return new u.Search({query:e})},u.getRateLimit=function(){return new u.RateLimit},e.exports=u}); -//# sourceMappingURL=github.min.js.map diff --git a/dist/github.min.js.map b/dist/github.min.js.map deleted file mode 100644 index 5d426aa9..00000000 --- a/dist/github.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["github.min.js"],"names":["global","factory","define","amd","exports","module","require","mod","utf8","axios","base64","Promise","github","this","Utf8","Base64","b64encode","string","encode","Github","options","API_URL","apiUrl","_request","method","path","data","cb","raw","getURL","url","indexOf","test","_typeof","param","hasOwnProperty","encodeURIComponent","replace","window","Date","getTime","config","headers","Accept","Content-Type","token","username","password","Authorization","then","response","status","request","error","_requestAllPages","singlePage","results","iterate","err","res","xhr","Array","push","apply","next","link","split","filter","map","exec","pop","User","repos","params","type","sort","per_page","page","join","orgs","gists","notifications","all","participating","since","constructor","toISOString","before","length","show","command","userRepos","userStarred","userGists","orgRepos","orgname","follow","unfollow","createRepo","Repository","updateTree","branch","currentTree","sha","that","getRef","repoPath","repo","name","user","fullname","ref","object","createRef","deleteRef","deleteRepo","listTags","listPulls","state","head","base","direction","getPull","number","compare","listBranches","heads","getBlob","getCommit","getSha","pathContent","getStatuses","getTree","tree","postBlob","content","encoding","Buffer","toString","Blob","Error","baseTree","blob","base_tree","mode","postTree","commit","parent","message","userData","author","email","parents","updateHead","contributors","retry","setTimeout","contents","encodeURI","fork","listForks","oldBranch","newBranch","arguments","createPullRequest","listHooks","getHook","id","createHook","editHook","deleteHook","read","remove","move","newPath","latestCommit","forEach","rootTree","write","writeOptions","committer","undefined","getCommits","until","perpage","isStarred","owner","repository","star","unstar","createRelease","editRelease","getRelease","deleteRelease","Gist","gistPath","create","update","Issue","list","query","Object","keys","option","comment","issue","comments_url","body","edit","get","Search","repositories","code","issues","users","RateLimit","getRateLimit","Symbol","iterator","obj","polyfill","getIssues","getRepo","getUser","getGist","getSearch"],"mappings":"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","file":"github.min.js","sourcesContent":["(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(['module', 'utf8', 'axios', 'base-64', 'es6-promise'], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(module, require('utf8'), require('axios'), require('base-64'), require('es6-promise'));\n } else {\n var mod = {\n exports: {}\n };\n factory(mod, global.utf8, global.axios, global.base64, global.Promise);\n global.github = mod.exports;\n }\n})(this, function (module, Utf8, axios, Base64, Promise) {\n /*!\n * @overview Github.js\n *\n * @copyright (c) 2013 Michael Aufreiter, Development Seed\n * Github.js is freely distributable.\n *\n * @license Licensed under BSD-3-Clause-Clear\n *\n * For all details and documentation:\n * http://substance.io/michael/github\n */\n 'use strict';\n\n var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n };\n\n function b64encode(string) {\n return Base64.encode(Utf8.encode(string));\n }\n\n if (Promise.polyfill) {\n Promise.polyfill();\n }\n\n // Initial Setup\n // -------------\n\n function Github(options) {\n options = options || {};\n\n var API_URL = options.apiUrl || 'https://api.github.com';\n\n // HTTP Request Abstraction\n // =======\n //\n // I'm not proud of this and neither should you be if you were responsible for the XMLHttpRequest spec.\n\n var _request = Github._request = function _request(method, path, data, cb, raw) {\n function getURL() {\n var url = path.indexOf('//') >= 0 ? path : API_URL + path;\n\n url += /\\?/.test(url) ? '&' : '?';\n\n if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) {\n for (var param in data) {\n if (data.hasOwnProperty(param)) {\n url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]);\n }\n }\n }\n\n return url.replace(/(×tamp=\\d+)/, '') + (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : '');\n }\n\n var config = {\n headers: {\n Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json',\n 'Content-Type': 'application/json;charset=UTF-8'\n },\n method: method,\n data: data ? data : {},\n url: getURL()\n };\n\n if (options.token || options.username && options.password) {\n config.headers.Authorization = options.token ? 'token ' + options.token : 'Basic ' + b64encode(options.username + ':' + options.password);\n }\n\n return axios(config).then(function (response) {\n cb(null, response.data || true, response);\n }, function (response) {\n if (response.status === 304) {\n cb(null, response.data || true, response);\n } else {\n cb({\n path: path,\n request: response,\n error: response.status\n });\n }\n });\n };\n\n var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) {\n var results = [];\n\n (function iterate() {\n _request('GET', path, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (!(res instanceof Array)) {\n res = [res];\n }\n\n results.push.apply(results, res);\n\n var next = (xhr.headers.link || '').split(',').filter(function (link) {\n return (/rel=\"next\"/.test(link)\n );\n }).map(function (link) {\n return (/<(.*)>/.exec(link) || [])[1];\n }).pop();\n\n if (!next || singlePage) {\n cb(err, results, xhr);\n } else {\n path = next;\n iterate();\n }\n });\n })();\n };\n\n // User API\n // =======\n\n Github.User = function () {\n this.repos = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n\n var url = '/user/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user organizations\n // -------\n\n this.orgs = function (cb) {\n _request('GET', '/user/orgs', null, cb);\n };\n\n // List authenticated user's gists\n // -------\n\n this.gists = function (cb) {\n _request('GET', '/gists', null, cb);\n };\n\n // List authenticated user's unread notifications\n // -------\n\n this.notifications = function (options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n options = options || {};\n var url = '/notifications';\n var params = [];\n\n if (options.all) {\n params.push('all=true');\n }\n\n if (options.participating) {\n params.push('participating=true');\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.before) {\n var before = options.before;\n\n if (before.constructor === Date) {\n before = before.toISOString();\n }\n\n params.push('before=' + encodeURIComponent(before));\n }\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Show user information\n // -------\n\n this.show = function (username, cb) {\n var command = username ? '/users/' + username : '/user';\n\n _request('GET', command, null, cb);\n };\n\n // List user repositories\n // -------\n\n this.userRepos = function (username, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n var url = '/users/' + username + '/repos';\n var params = [];\n\n params.push('type=' + encodeURIComponent(options.type || 'all'));\n params.push('sort=' + encodeURIComponent(options.sort || 'updated'));\n params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore\n\n if (options.page) {\n params.push('page=' + encodeURIComponent(options.page));\n }\n\n url += '?' + params.join('&');\n\n _requestAllPages(url, !!options.page, cb);\n };\n\n // List user starred repositories\n // -------\n\n this.userStarred = function (username, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/users/' + username + '/starred?type=all&per_page=100';\n _requestAllPages(request, false, cb);\n };\n\n // List a user's gists\n // -------\n\n this.userGists = function (username, cb) {\n _request('GET', '/users/' + username + '/gists', null, cb);\n };\n\n // List organization repositories\n // -------\n\n this.orgRepos = function (orgname, cb) {\n // Github does not always honor the 1000 limit so we want to iterate over the data set.\n var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc';\n _requestAllPages(request, false, cb);\n };\n\n // Follow user\n // -------\n\n this.follow = function (username, cb) {\n _request('PUT', '/user/following/' + username, null, cb);\n };\n\n // Unfollow user\n // -------\n\n this.unfollow = function (username, cb) {\n _request('DELETE', '/user/following/' + username, null, cb);\n };\n\n // Create a repo\n // -------\n this.createRepo = function (options, cb) {\n _request('POST', '/user/repos', options, cb);\n };\n };\n\n // Repository API\n // =======\n\n Github.Repository = function (options) {\n var repo = options.name;\n var user = options.user;\n var fullname = options.fullname;\n\n var that = this;\n var repoPath;\n\n if (fullname) {\n repoPath = '/repos/' + fullname;\n } else {\n repoPath = '/repos/' + user + '/' + repo;\n }\n\n var currentTree = {\n branch: null,\n sha: null\n };\n\n // Uses the cache if branch has not been changed\n // -------\n\n function updateTree(branch, cb) {\n if (branch === currentTree.branch && currentTree.sha) {\n return cb(null, currentTree.sha);\n }\n\n that.getRef('heads/' + branch, function (err, sha) {\n currentTree.branch = branch;\n currentTree.sha = sha;\n cb(err, sha);\n });\n }\n\n // Get a particular reference\n // -------\n\n this.getRef = function (ref, cb) {\n _request('GET', repoPath + '/git/refs/' + ref, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.object.sha, xhr);\n });\n };\n\n // Create a new reference\n // --------\n //\n // {\n // \"ref\": \"refs/heads/my-new-branch-name\",\n // \"sha\": \"827efc6d56897b048c772eb4087f854f46256132\"\n // }\n\n this.createRef = function (options, cb) {\n _request('POST', repoPath + '/git/refs', options, cb);\n };\n\n // Delete a reference\n // --------\n //\n // Repo.deleteRef('heads/gh-pages')\n // repo.deleteRef('tags/v1.0')\n\n this.deleteRef = function (ref, cb) {\n _request('DELETE', repoPath + '/git/refs/' + ref, options, cb);\n };\n\n // Delete a repo\n // --------\n\n this.deleteRepo = function (cb) {\n _request('DELETE', repoPath, options, cb);\n };\n\n // List all tags of a repository\n // -------\n\n this.listTags = function (cb) {\n _request('GET', repoPath + '/tags', null, cb);\n };\n\n // List all pull requests of a respository\n // -------\n\n this.listPulls = function (options, cb) {\n options = options || {};\n var url = repoPath + '/pulls';\n var params = [];\n\n if (typeof options === 'string') {\n // Backward compatibility\n params.push('state=' + options);\n } else {\n if (options.state) {\n params.push('state=' + encodeURIComponent(options.state));\n }\n\n if (options.head) {\n params.push('head=' + encodeURIComponent(options.head));\n }\n\n if (options.base) {\n params.push('base=' + encodeURIComponent(options.base));\n }\n\n if (options.sort) {\n params.push('sort=' + encodeURIComponent(options.sort));\n }\n\n if (options.direction) {\n params.push('direction=' + encodeURIComponent(options.direction));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.per_page) {\n params.push('per_page=' + options.per_page);\n }\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Gets details for a specific pull request\n // -------\n\n this.getPull = function (number, cb) {\n _request('GET', repoPath + '/pulls/' + number, null, cb);\n };\n\n // Retrieve the changes made between base and head\n // -------\n\n this.compare = function (base, head, cb) {\n _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb);\n };\n\n // List all branches of a repository\n // -------\n\n this.listBranches = function (cb) {\n _request('GET', repoPath + '/git/refs/heads', null, function (err, heads, xhr) {\n if (err) {\n return cb(err);\n }\n\n heads = heads.map(function (head) {\n return head.ref.replace(/^refs\\/heads\\//, '');\n });\n\n cb(null, heads, xhr);\n });\n };\n\n // Retrieve the contents of a blob\n // -------\n\n this.getBlob = function (sha, cb) {\n _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw');\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getCommit = function (branch, sha, cb) {\n _request('GET', repoPath + '/git/commits/' + sha, null, cb);\n };\n\n // For a given file path, get the corresponding sha (blob for files, tree for dirs)\n // -------\n\n this.getSha = function (branch, path, cb) {\n if (!path || path === '') {\n return that.getRef('heads/' + branch, cb);\n }\n\n _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), null, function (err, pathContent, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, pathContent.sha, xhr);\n });\n };\n\n // Get the statuses for a particular SHA\n // -------\n\n this.getStatuses = function (sha, cb) {\n _request('GET', repoPath + '/statuses/' + sha, null, cb);\n };\n\n // Retrieve the tree a commit points to\n // -------\n\n this.getTree = function (tree, cb) {\n _request('GET', repoPath + '/git/trees/' + tree, null, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.tree, xhr);\n });\n };\n\n // Post a new blob object, getting a blob SHA back\n // -------\n\n this.postBlob = function (content, cb) {\n if (typeof content === 'string') {\n content = {\n content: Utf8.encode(content),\n encoding: 'utf-8'\n };\n } else {\n if (typeof Buffer !== 'undefined' && content instanceof Buffer) {\n // in NodeJS\n content = {\n content: content.toString('base64'),\n encoding: 'base64'\n };\n } else if (typeof Blob !== 'undefined' && content instanceof Blob) {\n content = {\n content: b64encode(content),\n encoding: 'base64'\n };\n } else {\n throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)');\n }\n }\n\n _request('POST', repoPath + '/git/blobs', content, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Update an existing tree adding a new blob object getting a tree SHA back\n // -------\n\n this.updateTree = function (baseTree, path, blob, cb) {\n var data = {\n base_tree: baseTree,\n tree: [{\n path: path,\n mode: '100644',\n type: 'blob',\n sha: blob\n }]\n };\n\n _request('POST', repoPath + '/git/trees', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Post a new tree object having a file path pointer replaced\n // with a new blob SHA getting a tree SHA back\n // -------\n\n this.postTree = function (tree, cb) {\n _request('POST', repoPath + '/git/trees', {\n tree: tree\n }, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n cb(null, res.sha, xhr);\n });\n };\n\n // Create a new commit object with the current commit SHA as the parent\n // and the new tree SHA, getting a commit SHA back\n // -------\n\n this.commit = function (parent, tree, message, cb) {\n var user = new Github.User();\n\n user.show(null, function (err, userData) {\n if (err) {\n return cb(err);\n }\n\n var data = {\n message: message,\n author: {\n name: options.user,\n email: userData.email\n },\n parents: [parent],\n tree: tree\n };\n\n _request('POST', repoPath + '/git/commits', data, function (err, res, xhr) {\n if (err) {\n return cb(err);\n }\n\n currentTree.sha = res.sha; // Update latest commit\n\n cb(null, res.sha, xhr);\n });\n });\n };\n\n // Update the reference of your head to point to the new commit SHA\n // -------\n\n this.updateHead = function (head, commit, cb) {\n _request('PATCH', repoPath + '/git/refs/heads/' + head, {\n sha: commit\n }, cb);\n };\n\n // Show repository information\n // -------\n\n this.show = function (cb) {\n _request('GET', repoPath, null, cb);\n };\n\n // Show repository contributors\n // -------\n\n this.contributors = function (cb, retry) {\n retry = retry || 1000;\n var that = this;\n\n _request('GET', repoPath + '/stats/contributors', null, function (err, data, xhr) {\n if (err) {\n return cb(err);\n }\n\n if (xhr.status === 202) {\n setTimeout(function () {\n that.contributors(cb, retry);\n }, retry);\n } else {\n cb(err, data, xhr);\n }\n });\n };\n\n // Get contents\n // --------\n\n this.contents = function (ref, path, cb) {\n path = encodeURI(path);\n _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), {\n ref: ref\n }, cb);\n };\n\n // Fork repository\n // -------\n\n this.fork = function (cb) {\n _request('POST', repoPath + '/forks', null, cb);\n };\n\n // List forks\n // --------\n\n this.listForks = function (cb) {\n _request('GET', repoPath + '/forks', null, cb);\n };\n\n // Branch repository\n // --------\n\n this.branch = function (oldBranch, newBranch, cb) {\n if (arguments.length === 2 && typeof arguments[1] === 'function') {\n cb = newBranch;\n newBranch = oldBranch;\n oldBranch = 'master';\n }\n\n this.getRef('heads/' + oldBranch, function (err, ref) {\n if (err && cb) {\n return cb(err);\n }\n\n that.createRef({\n ref: 'refs/heads/' + newBranch,\n sha: ref\n }, cb);\n });\n };\n\n // Create pull request\n // --------\n\n this.createPullRequest = function (options, cb) {\n _request('POST', repoPath + '/pulls', options, cb);\n };\n\n // List hooks\n // --------\n\n this.listHooks = function (cb) {\n _request('GET', repoPath + '/hooks', null, cb);\n };\n\n // Get a hook\n // --------\n\n this.getHook = function (id, cb) {\n _request('GET', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Create a hook\n // --------\n\n this.createHook = function (options, cb) {\n _request('POST', repoPath + '/hooks', options, cb);\n };\n\n // Edit a hook\n // --------\n\n this.editHook = function (id, options, cb) {\n _request('PATCH', repoPath + '/hooks/' + id, options, cb);\n };\n\n // Delete a hook\n // --------\n\n this.deleteHook = function (id, cb) {\n _request('DELETE', repoPath + '/hooks/' + id, null, cb);\n };\n\n // Read file at given path\n // -------\n\n this.read = function (branch, path, cb) {\n _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), null, cb, true);\n };\n\n // Remove a file\n // -------\n\n this.remove = function (branch, path, cb) {\n that.getSha(branch, path, function (err, sha) {\n if (err) {\n return cb(err);\n }\n\n _request('DELETE', repoPath + '/contents/' + path, {\n message: path + ' is removed',\n sha: sha,\n branch: branch\n }, cb);\n });\n };\n\n // Alias for repo.remove for backwards comapt.\n // -------\n this.delete = this.remove;\n\n // Move a file to a new location\n // -------\n\n this.move = function (branch, path, newPath, cb) {\n updateTree(branch, function (err, latestCommit) {\n that.getTree(latestCommit + '?recursive=true', function (err, tree) {\n // Update Tree\n tree.forEach(function (ref) {\n if (ref.path === path) {\n ref.path = newPath;\n }\n\n if (ref.type === 'tree') {\n delete ref.sha;\n }\n });\n\n that.postTree(tree, function (err, rootTree) {\n that.commit(latestCommit, rootTree, 'Deleted ' + path, function (err, commit) {\n that.updateHead(branch, commit, cb);\n });\n });\n });\n });\n };\n\n // Write file contents to a given branch and path\n // -------\n\n this.write = function (branch, path, content, message, options, cb) {\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n that.getSha(branch, encodeURI(path), function (err, sha) {\n var writeOptions = {\n message: message,\n content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content,\n branch: branch,\n committer: options && options.committer ? options.committer : undefined,\n author: options && options.author ? options.author : undefined\n };\n\n // If no error, we set the sha to overwrite an existing file\n if (!(err && err.error !== 404)) {\n writeOptions.sha = sha;\n }\n\n _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb);\n });\n };\n\n // List commits on a repository. Takes an object of optional parameters:\n // sha: SHA or branch to start listing commits from\n // path: Only commits containing this file path will be returned\n // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address\n // since: ISO 8601 date - only commits after this date will be returned\n // until: ISO 8601 date - only commits before this date will be returned\n // -------\n\n this.getCommits = function (options, cb) {\n options = options || {};\n var url = repoPath + '/commits';\n var params = [];\n\n if (options.sha) {\n params.push('sha=' + encodeURIComponent(options.sha));\n }\n\n if (options.path) {\n params.push('path=' + encodeURIComponent(options.path));\n }\n\n if (options.author) {\n params.push('author=' + encodeURIComponent(options.author));\n }\n\n if (options.since) {\n var since = options.since;\n\n if (since.constructor === Date) {\n since = since.toISOString();\n }\n\n params.push('since=' + encodeURIComponent(since));\n }\n\n if (options.until) {\n var until = options.until;\n\n if (until.constructor === Date) {\n until = until.toISOString();\n }\n\n params.push('until=' + encodeURIComponent(until));\n }\n\n if (options.page) {\n params.push('page=' + options.page);\n }\n\n if (options.perpage) {\n params.push('per_page=' + options.perpage);\n }\n\n if (params.length > 0) {\n url += '?' + params.join('&');\n }\n\n _request('GET', url, null, cb);\n };\n\n // Check if a repository is starred.\n // --------\n\n this.isStarred = function (owner, repository, cb) {\n _request('GET', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Star a repository.\n // --------\n\n this.star = function (owner, repository, cb) {\n _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Unstar a repository.\n // --------\n\n this.unstar = function (owner, repository, cb) {\n _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb);\n };\n\n // Create a new release\n // --------\n\n this.createRelease = function (options, cb) {\n _request('POST', repoPath + '/releases', options, cb);\n };\n\n // Edit a release\n // --------\n\n this.editRelease = function (id, options, cb) {\n _request('PATCH', repoPath + '/releases/' + id, options, cb);\n };\n\n // Get a single release\n // --------\n\n this.getRelease = function (id, cb) {\n _request('GET', repoPath + '/releases/' + id, null, cb);\n };\n\n // Remove a release\n // --------\n\n this.deleteRelease = function (id, cb) {\n _request('DELETE', repoPath + '/releases/' + id, null, cb);\n };\n };\n\n // Gists API\n // =======\n\n Github.Gist = function (options) {\n var id = options.id;\n var gistPath = '/gists/' + id;\n\n // Read the gist\n // --------\n\n this.read = function (cb) {\n _request('GET', gistPath, null, cb);\n };\n\n // Create the gist\n // --------\n // {\n // \"description\": \"the description for this gist\",\n // \"public\": true,\n // \"files\": {\n // \"file1.txt\": {\n // \"content\": \"String file contents\"\n // }\n // }\n // }\n\n this.create = function (options, cb) {\n _request('POST', '/gists', options, cb);\n };\n\n // Delete the gist\n // --------\n\n this.delete = function (cb) {\n _request('DELETE', gistPath, null, cb);\n };\n\n // Fork a gist\n // --------\n\n this.fork = function (cb) {\n _request('POST', gistPath + '/fork', null, cb);\n };\n\n // Update a gist with the new stuff\n // --------\n\n this.update = function (options, cb) {\n _request('PATCH', gistPath, options, cb);\n };\n\n // Star a gist\n // --------\n\n this.star = function (cb) {\n _request('PUT', gistPath + '/star', null, cb);\n };\n\n // Untar a gist\n // --------\n\n this.unstar = function (cb) {\n _request('DELETE', gistPath + '/star', null, cb);\n };\n\n // Check if a gist is starred\n // --------\n\n this.isStarred = function (cb) {\n _request('GET', gistPath + '/star', null, cb);\n };\n };\n\n // Issues API\n // ==========\n\n Github.Issue = function (options) {\n var path = '/repos/' + options.user + '/' + options.repo + '/issues';\n\n this.create = function (options, cb) {\n _request('POST', path, options, cb);\n };\n\n this.list = function (options, cb) {\n var query = [];\n\n Object.keys(options).forEach(function (option) {\n query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option]));\n });\n\n _requestAllPages(path + '?' + query.join('&'), !!options.page, cb);\n };\n\n this.comment = function (issue, comment, cb) {\n _request('POST', issue.comments_url, {\n body: comment\n }, cb);\n };\n\n this.edit = function (issue, options, cb) {\n _request('PATCH', path + '/' + issue, options, cb);\n };\n\n this.get = function (issue, cb) {\n _request('GET', path + '/' + issue, null, cb);\n };\n };\n\n // Search API\n // ==========\n\n Github.Search = function (options) {\n var path = '/search/';\n var query = '?q=' + options.query;\n\n this.repositories = function (options, cb) {\n _request('GET', path + 'repositories' + query, options, cb);\n };\n\n this.code = function (options, cb) {\n _request('GET', path + 'code' + query, options, cb);\n };\n\n this.issues = function (options, cb) {\n _request('GET', path + 'issues' + query, options, cb);\n };\n\n this.users = function (options, cb) {\n _request('GET', path + 'users' + query, options, cb);\n };\n };\n\n // Rate Limit API\n // ==========\n\n Github.RateLimit = function () {\n this.getRateLimit = function (cb) {\n _request('GET', '/rate_limit', null, cb);\n };\n };\n\n return Github;\n };\n\n // Top Level API\n // -------\n\n Github.getIssues = function (user, repo) {\n return new Github.Issue({\n user: user,\n repo: repo\n });\n };\n\n Github.getRepo = function (user, repo) {\n if (!repo) {\n return new Github.Repository({\n fullname: user\n });\n } else {\n return new Github.Repository({\n user: user,\n name: repo\n });\n }\n };\n\n Github.getUser = function () {\n return new Github.User();\n };\n\n Github.getGist = function (id) {\n return new Github.Gist({\n id: id\n });\n };\n\n Github.getSearch = function (query) {\n return new Github.Search({\n query: query\n });\n };\n\n Github.getRateLimit = function () {\n return new Github.RateLimit();\n };\n\n module.exports = Github;\n});"],"sourceRoot":"/source/"} \ No newline at end of file From 5e9249bf6fb3d06205bcb636730d7a296b66741b Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 26 Apr 2016 07:34:42 -0500 Subject: [PATCH 086/217] refactor: move codebase to ES2015 --- CHANGELOG.md | 56 + README.md | 558 +--------- src/Gist.js | 112 ++ src/Issue.js | 85 ++ src/Organization.js | 35 + src/Ratelimit.js | 35 + src/Repository.js | 673 +++++++++++ src/Requestable.js | 260 +++++ src/Search.js | 89 ++ src/User.js | 188 ++++ src/github.js | 1235 ++------------------- test/{helpers.js => helpers/callbacks.js} | 26 +- test/mocha.opts | 3 + test/test.auth.js | 25 +- test/test.gist.js | 18 +- test/test.issue.js | 26 +- test/test.org.js | 32 +- test/test.rate-limit.js | 17 +- test/test.repo.js | 265 +++-- test/test.search.js | 37 +- test/test.user.js | 27 +- 21 files changed, 1873 insertions(+), 1929 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 src/Gist.js create mode 100644 src/Issue.js create mode 100644 src/Organization.js create mode 100644 src/Ratelimit.js create mode 100644 src/Repository.js create mode 100644 src/Requestable.js create mode 100644 src/Search.js create mode 100644 src/User.js rename test/{helpers.js => helpers/callbacks.js} (55%) create mode 100644 test/mocha.opts diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..d61c1c43 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,56 @@ +## Change Log + +### 1.0.0 +Complete rewrite in ES2015. + +* Renamed many of the APIs for better internal consistency. +* Promise-ified the API +* Modularized code to potentially allow for custom builds +* Refactored tests to run primarially in mocha +* Auto-generation of documentation + +### 0.10.X + +Create and delete repositories +Repos - getCommit + +### 0.9.X + +Paging (introduced at tail end of 0.8.X, note: different callbacks for success & errors now) + +### 0.8.X + +Fixes and tweaks, simpler auth, CI tests, node.js support, Raw+JSON, UTF8, plus: +Users - follow, unfollow, get info, notifications +Gists - create +Issues - get +Repos - createRepo, deleteRepo, createBranch, star, unstar, isStarred, getCommits, listTags, listPulls, getPull, compare +Hooks - listHooks, getHook, createHook, editHook, deleteHook + +### 0.7.X + +Switched to a native `request` implementation (thanks @mattpass). Adds support for GitHub gists, forks and pull requests. + +### 0.6.X + +Adds support for organizations and fixes an encoding issue. + +### 0.5.X + +Smart caching of latest commit sha. + +### 0.4.X + +Added support for [OAuth](http://developer.github.com/v3/oauth/). + +### 0.3.X + +Support for Moving and removing files. + +### 0.2.X + +Consider commit messages. + +### 0.1.X + +Initial version. diff --git a/README.md b/README.md index 12101c09..3a5b2090 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,20 @@ # Github.js -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/michael/github?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Stories in Ready](https://badge.waffle.io/michael/github.png?label=ready&title=Ready)](https://waffle.io/michael/github) [![Build Status](https://travis-ci.org/michael/github.svg?branch=master)](https://travis-ci.org/michael/github) [![codecov.io](https://codecov.io/github/michael/github/coverage.svg?branch=master)](https://codecov.io/github/michael/github?branch=master) +[![Downloads per month](https://img.shields.io/npm/dm/github-api.svg?maxAge=2592000)][npm-package] +[![Latest version](https://img.shields.io/npm/v/github-api.svg?maxAge=2592000)][npm-package] +[![Gitter](https://img.shields.io/gitter/room/michael/github.js.svg?maxAge=2592000)][gitter] +[![Travis](https://img.shields.io/travis/michael/github.svg?maxAge=2592000)][travis-ci] +[![Codecov](https://img.shields.io/codecov/c/github/michael/github.svg?maxAge=2592000)][codecov] -Github.js provides a minimal higher-level wrapper around git's [plumbing commands](http://git-scm.com/book/en/Git-Internals-Plumbing-and-Porcelain), exposing an API for manipulating GitHub repositories on the file level. It was formerly developed in the context of [Prose](http://prose.io), a content editor for GitHub. +Github.js provides a minimal higher-level wrapper around Github's API. It was concieved in the context of +[Prose][prose], a content editor for GitHub. ## Installation - -Either grab `github.js` from this repo or install Github.js via npm: +Github.js is available from `npm` or `bower`. ``` npm install github-api ``` - -Alternatively, you can install the library using Bower: - ``` bower install github-api ``` @@ -22,9 +23,8 @@ bower install github-api [![Sauce Test Status](https://saucelabs.com/browser-matrix/githubjs.svg)](https://saucelabs.com/u/githubjs) -**Note**: Starting from version 0.10.8, Github.js supports **Internet Explorer 9**. However, the underlying -methodology used under the hood to perform CORS requests (the `XDomainRequest` object), -[has limitations](http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx). +**Note**: Starting from version 0.10.8, Github.js supports **Internet Explorer 9**. However, the underlying methodology +used under the hood to perform CORS requests (the `XDomainRequest` object), [has limitations](xhr-link). In particular, requests must be targeted to the same scheme as the hosting page. This means that if a page is at http://example.com, your target URL must also begin with HTTP. Similarly, if your page is at https://example.com, then your target URL must also begin with HTTPS. For this reason, if your requests are sent to the GitHub API (the default), @@ -36,535 +36,13 @@ The team behind Github.js has created a whole organization, called [GitHub Tools dedicated to GitHub and its API. In the near future this repository could be moved under the GitHub Tools organization as well. In the meantime, we recommend you to take a look at other projects of the organization. -## Usage - -Create a Github instance. - -```js -var github = new Github({ - username: "YOU_USER", - password: "YOUR_PASSWORD", - auth: "basic" -}); -``` - -Or if you prefer OAuth, it looks like this: - -```js -var github = new Github({ - token: "OAUTH_TOKEN", - auth: "oauth" -}); -``` - -Some information, such as public Gists, can be accessed without any authentication. For such use cases, you can create -a Github instance as follows: - -```js -var github = new Github(); -``` - -In conclusion, you can use: -* Authorised App Tokens (via client/secret pairs), used for bigger applications, created in web-flows/on the fly -* Personal Access Tokens (simpler to set up), used on command lines, scripts etc, created in GitHub web UI -* No authorization - -See these pages for more info: - -[Creating an access token for command-line use](https://help.github.com/articles/creating-an-access-token-for-command-line-use) - -[Github API OAuth Overview](http://developer.github.com/v3/oauth) - -Enterprise Github instances may be specified using the `apiUrl` option: - -```js -var github = new Github({ - apiUrl: "https://serverName/api/v3", - ... -}); -``` - -## Repository API - - -```js -var repo = github.getRepo(username, reponame); -``` - -Show repository information - -```js -repo.show(function(err, repo) {}); -``` - -Delete a repository - -```js -repo.deleteRepo(function(err, res) {}); -``` - -Get contents at a particular path in a particular branch. - -```js -repo.contents(branch, "path/to/dir", function(err, contents) {}); -``` - -Fork repository. This operation runs asynchronously. You may want to poll for `repo.contents` until the forked repo is ready. - -```js -repo.fork(function(err) {}); -``` - -List forks. - -```js -repo.listForks(function(err, forks) {}); -``` - -Create new branch for repo. You can omit oldBranchName to default to "master". - -```js -repo.branch(oldBranchName, newBranchName, function(err) {}); -``` - -List Pull Requests. - -```js -var state = 'open'; //or 'closed', or 'all' -repo.listPulls(state, function(err, pullRequests) {}); -``` - -Get details of a Pull Request. - -```js -var pullRequestID = 123; -repo.getPull(pullRequestID, function(err, pullRequestInfo) {}); -``` - -Create Pull Request. - -```js -var pull = { - title: message, - body: "This pull request has been automatically generated by Prose.io.", - base: "gh-pages", - head: "michael" + ":" + "prose-patch" -}; -repo.createPullRequest(pull, function(err, pullRequest) {}); -``` - -Retrieve all available branches (aka heads) of a repository. - -```js -repo.listBranches(function(err, branches) {}); -``` - -Get list of statuses for a particular commit. - -```js -repo.getStatuses(sha, function(err, statuses) {}); -``` - -Store content at a certain path. If the file specified in the path exists, the content is updated. If the file doesn't exist, it's created on the fly. You can also provide an optional object literal, (`options` in the example below) containing information about the author and the committer. - -```js -var options = { - author: {name: 'Author Name', email: 'author@example.com'}, - committer: {name: 'Committer Name', email: 'committer@example.com'}, - encode: true // Whether to base64 encode the file. (default: true) -} -repo.write('master', 'path/to/file', 'YOUR_NEW_CONTENTS', 'YOUR_COMMIT_MESSAGE', options, function(err) {}); -``` - -Not only can you can write files, you can of course read them. - -```js -repo.read('master', 'path/to/file', function(err, data) {}); -``` - -Move a file from A to B. - -```js -repo.move('master', 'path/to/file', 'path/to/new_file', function(err) {}); -``` - -Remove a file. - -```js -repo.remove('master', 'path/to/file', function(err) {}); -``` - -Get information about a particular commit. - -```js -repo.getCommit('master', sha, function(err, commit) {}); -``` - -Exploring files of a repository is easy too by accessing the top level tree object. - -```js -repo.getTree('master', function(err, tree) {}); -``` - -If you want to access all blobs and trees recursively, you can add `?recursive=true`. - -```js -repo.getTree('master?recursive=true', function(err, tree) {}); -``` - -Given a filepath, retrieve the reference blob or tree sha. - -```js -repo.getSha('master', '/path/to/file', function(err, sha) {}); -``` - -For a given reference, get the corresponding commit sha. - -```js -repo.getRef('heads/master', function(err, sha) {}); -``` - -Create a new reference. - -```js -var refSpec = { - "ref": "refs/heads/my-new-branch-name", - "sha": "827efc6d56897b048c772eb4087f854f46256132" -}; -repo.createRef(refSpec, function(err) {}); -``` - -Delete a reference. - -```js -repo.deleteRef('heads/gh-pages', function(err) {}); -``` - -Get contributors list with additions, deletions, and commit counts. - -```js -repo.contributors(function(err, data) {}); -``` - -Get collaborators list. - -```js -repo.collaborators(function(err, data) {}); -``` - -Check if user is a collaborator on the repository. - -```js -repo.isCollaborator(username, function(err) {}); -``` - -Check if a repository is starred. - -```js -repo.isStarred(owner, repository, function(err) {}); -``` - -Star a repository. - -```js -repo.star(owner, repository, function(err) {}); -``` - -Unstar a repository. - -```js -repo.unstar(owner, repository, function(err) {}); -``` - -## Organization API - - -```js -var organization = github.getOrg(); -``` - -Create a new organization repository for the authenticated user - -```js -var repo = { - orgname: 'github-api-tests', - name: 'test' -}; - -organization.createRepo(repo, function(err, res) {}); -``` - -The repository description, homepage, private/public can also be set. [For a full list of options see the documentation](https://developer.github.com/v3/repos/#create). - -## User API - - -```js -var user = github.getUser(); -``` - -List repositories of the authenticated user, including private repositories and repositories in which the user is a -collaborator and not an owner. - -```js -user.repos(options, function(err, repos) {}); -``` - -List organizations the authenticated user belongs to. - -```js -user.orgs(function(err, orgs) {}); -``` - -List authenticated user's gists. - -```js -user.gists(function(err, gists) {}); -``` - -List unread notifications for the authenticated user. - -```js -user.notifications(options, function(err, notifications) {}); -``` - -Show user information for a particular username. Also works for organizations. Pass in a falsy value (null, '', etc) -for 'username' to retrieve user information for the currently authorized user. - -```js -user.show(username, function(err, user) {}); -``` - -List public repositories for a particular user. - -```js -user.userRepos(username, options, function(err, repos) {}); -``` - -List starred repositories for a particular user. - -```js -user.userStarred(username, function(err, repos) {}); -``` - -Create a new repo for the authenticated user - -```js -user.createRepo({"name": "test"}, function(err, res) {}); -``` -Repo description, homepage, private/public can also be set. -For a full list of options see the docs [here](https://developer.github.com/v3/repos/#create) - - -List repositories for a particular organization. Includes private repositories if you are authorized. - -```js -user.orgRepos(orgname, function(err, repos) {}); -``` - -List all gists of a particular user. If username is ommitted gists of the current authenticated user are returned. - -```js -user.userGists(username, function(err, gists) {}); -``` - -## Gist API - -```js -var gist = github.getGist(3165654); -``` - -Read the contents of a Gist. - -```js -gist.read(function(err, gist) { - -}); -``` - -Updating the contents of a Gist. Please consult the documentation on [GitHub](http://developer.github.com/v3/gists/). - -```js -var delta = { - "description": "the description for this gist", - "files": { - "file1.txt": { - "content": "updated file contents" - }, - "old_name.txt": { - "filename": "new_name.txt", - "content": "modified contents" - }, - "new_file.txt": { - "content": "a new file" - }, - "delete_this_file.txt": null - } -}; - -gist.update(delta, function(err, gist) { - -}); -``` -## Issues API - -```js -var issues = github.getIssues(username, reponame); -``` - -To read all the issues of a given repository - -```js -issues.list(options, function(err, issues) {}); -``` - -To create an issue - -```js -var options = { - title: "Found a bug", - body: "I'm having a problem with this.", - assignee: "assignee_username", - milestone: 1, - labels: [ - "Label1", - "Label2" - ] -}; - -issues.create(options, function(err, issue) {}); -``` - -To comment in a issue - -```js -issues.comment(issue, comment, function(err, comment) {}); -``` - -To edit an issue - -```js -var options = { - title: "Found a bug", - body: "I'm having a problem with this.", - assignee: "assignee_username", - milestone: 1, - state: "open", - labels: [ - "Label1", - "Label2" - ] -}; - -issues.edit(issue, options, function (err, issue) {}); -``` - -To get an issue - -```js -issues.get(issue, function (err, issue) {}); -``` - -## Search API - -```js -var search = github.getSearch(query); -``` - -### Search repositories - -Suppose you want to search for popular Tetris repositories written in Assembly. Your query might look like this: - -```js -var search = github.getSearch("tetris+language:assembly&sort=stars&order=desc"); -search.repositories(options, function (err, repositories) {}); -``` - -### Search code - -Suppose you want to find the definition of the addClass function inside jQuery. Your query would look something like this: - -```js -var search = github.getSearch("addClass+in:file+language:js+repo:jquery/jquery"); -search.code(options, function (err, codes) {}); -``` - -### Search issues - -Let’s say you want to find the oldest unresolved Python bugs on Windows. Your query might look something like this: - -```js -var search = github.getSearch("windows+label:bug+language:python+state:open&sort=created&order=asc"); -search.issues(options, function (err, issues) {}); -``` - -### Search users - -Imagine you’re looking for a list of popular users. You might try out this query: - -```js -var search = github.getSearch("tom+repos:%3E42+followers:%3E1000"); -search.users(options, function (err, users) {}); -``` - -Here, we’re looking at users with the name Tom. We’re only interested in those with more than 42 repositories, and only if they have over 1,000 followers. - -## Rate Limit API - -```js -var rateLimit = github.getRateLimit(); -``` - -Get the rate limit. - -```js -rateLimit.getRateLimit(function (err, rateInfo) {}); -``` - -## Change Log - -### 0.10.X - -Create and delete repositories -Repos - getCommit - -### 0.9.X - -Paging (introduced at tail end of 0.8.X, note: different callbacks for success & errors now) - -### 0.8.X - -Fixes and tweaks, simpler auth, CI tests, node.js support, Raw+JSON, UTF8, plus: -Users - follow, unfollow, get info, notifications -Gists - create -Issues - get -Repos - createRepo, deleteRepo, createBranch, star, unstar, isStarred, getCommits, listTags, listPulls, getPull, compare -Hooks - listHooks, getHook, createHook, editHook, deleteHook - -### 0.7.X - -Switched to a native `request` implementation (thanks @mattpass). Adds support for GitHub gists, forks and pull requests. - -### 0.6.X - -Adds support for organizations and fixes an encoding issue. - -### 0.5.X - -Smart caching of latest commit sha. - -### 0.4.X - -Added support for [OAuth](http://developer.github.com/v3/oauth/). - -### 0.3.X - -Support for Moving and removing files. - -### 0.2.X - -Consider commit messages. +## Example -### 0.1.X +**TODO** -Initial version. +[codecov]: https://codecov.io/github/michael/github?branch=master +[travis-ci]: https://travis-ci.org/michael/github +[gitter]: https://gitter.im/michael/github +[npm-package]: https://www.npmjs.com/package/github-api +[prose]: http://prose.io +[xhr-link]: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx diff --git a/src/Gist.js b/src/Gist.js new file mode 100644 index 00000000..a24917b5 --- /dev/null +++ b/src/Gist.js @@ -0,0 +1,112 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; + +/** + * A Gist can retrieve and modify gists. + */ +class Gist extends Requestable { + /** + * Create a Gist. + * @param {string} id - the id of the gist (not required when creating a gist) + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(id, auth, apiBase) { + super(auth, apiBase); + this.id = id; + } + + /** + * Fetch a gist. + * @see https://developer.github.com/v3/gists/#get-a-single-gist + * @param {Requestable.callback} [cb] - will receive the gist + * @return {Promise} - the Promise for the http request + */ + read(cb) { + return this._request('GET', `/gists/${this.id}`, null, cb); + } + + /** + * Create a new gist. + * @see https://developer.github.com/v3/gists/#create-a-gist + * @param {Object} gist - the data for the new gist + * @param {Requestable.callback} [cb] - will receive the new gist upon creation + * @return {Promise} - the Promise for the http request + */ + create(gist, cb) { + return this._request('POST', '/gists', gist, cb) + .then((response) => { + this.id = response.data.id; + return response; + }); + } + + /** + * Delete a gist. + * @see https://developer.github.com/v3/gists/#delete-a-gist + * @param {Requestable.callback} [cb] - will receive true if the request succeeds + * @return {Promise} - the Promise for the http request + */ + delete(cb) { + return this._request('DELETE', `/gists/${this.id}`, null, cb); + } + + /** + * Fork a gist. + * @see https://developer.github.com/v3/gists/#fork-a-gist + * @param {Requestable.callback} [cb] - the function that will receive the gist + * @return {Promise} - the Promise for the http request + */ + fork(cb) { + return this._request('POST', `/gists/${this.id}/forks`, null, cb); + } + + /** + * Modify a gist. + * @see https://developer.github.com/v3/gists/#edit-a-gist + * @param {Object} gist - the data for the new gist + * @param {Requestable.callback} [cb] - the function that receives the API result + * @return {Promise} - the Promise for the http request + */ + update(gist, cb) { + return this._request('PATCH', `/gists/${this.id}`, gist, cb); + } + + /** + * Star a gist. + * @see https://developer.github.com/v3/gists/#star-a-gist + * @param {Requestable.callback} [cb] - will receive true if the request is successful + * @return {Promise} - the Promise for the http request + */ + star(cb) { + return this._request('PUT', `/gists/${this.id}/star`, null, cb); + } + + /** + * Unstar a gist. + * @see https://developer.github.com/v3/gists/#unstar-a-gist + * @param {Requestable.callback} [cb] - will receive true if the request is successful + * @return {Promise} - the Promise for the http request + */ + unstar(cb) { + return this._request('DELETE', `/gists/${this.id}/star`, null, cb); + } + + /** + * Check if a gist is starred by the user. + * @see https://developer.github.com/v3/gists/#check-if-a-gist-is-starred + * @param {Requestable.callback} [cb] - will receive true if the gist is starred and false if the gist is not starred + * @return {Promise} - the Promise for the http request + */ + isStarred(cb) { + return this._request204or404(`/gists/${this.id}/star`, null, cb); + } +} + +module.exports = Gist; diff --git a/src/Issue.js b/src/Issue.js new file mode 100644 index 00000000..67155599 --- /dev/null +++ b/src/Issue.js @@ -0,0 +1,85 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; + +/** + * Issue wraps the functionality to get issues for repositories + */ +class Issue extends Requestable { + /** + * Create a new Issue + * @param {string} repoPath - the full name (:user/:repo) to get issues for + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(repoPath, auth, apiBase) { + super(auth, apiBase); + this.__issuesPath = `/repos/${repoPath}/issues`; + } + + /** + * Create a new issue + * @see https://developer.github.com/v3/issues/#create-an-issue + * @param {Object} issueData - the issue to create + * @param {Requestable.callback} [cb] - will receive the created issue + * @return {Promise} - the promise for the http request + */ + create(issueData, cb) { + this._request('POST', this.__issuesPath, issueData, cb); + } + + /** + * List the issues for the repository + * @see https://developer.github.com/v3/issues/#list-issues-for-a-repository + * @param {Object} options - filtering options + * @param {Requestable.callback} [cb] - will receive the array of issues + * @return {Promise} - the promise for the http request + */ + list(options, cb) { + this._requestAllPages(this.__issuesPath, options, cb); + } + + /** + * Comment on an issue + * @see https://developer.github.com/v3/issues/comments/#create-a-comment + * @param {Object} issue - an issue object fetched from GitHub + * @param {string} comment - the comment to add + * @param {Requestable.callback} [cb] - will receive the created comment + * @return {Promise} - the promise for the http request + */ + comment(issue, comment, cb) { + // path should change to be `${this.__issuesPath}/${issue}/comments` + this._request('POST', issue.comments_url, {body: comment}, cb); // jscs:ignore + } + + /** + * Edit an issue + * @see https://developer.github.com/v3/issues/#edit-an-issue + * @param {number} issue - the issue number to edit + * @param {Object} issueData - the new issue data + * @param {Requestable.callback} [cb] - will receive the modified issue + * @return {Promise} - the promise for the http request + */ + edit(issue, issueData, cb) { + this._request('PATCH', `${this.__issuesPath}/${issue}`, issueData, cb); + } + + /** + * Get a particular issue + * @see https://developer.github.com/v3/issues/#get-a-single-issue + * @param {number} issue - the issue number to fetch + * @param {Requestable.callback} [cb] - will receive the issue + * @return {Promise} - the promise for the http request + */ + get(issue, cb) { + this._request('GET', `${this.__issuesPath}/${issue}`, null, cb); + } + +} + +module.exports = Issue; diff --git a/src/Organization.js b/src/Organization.js new file mode 100644 index 00000000..d6bd441d --- /dev/null +++ b/src/Organization.js @@ -0,0 +1,35 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; + +/** + * Organization encapsulates the functionality to create repositories in organizations + */ +class Organization extends Requestable { + /** + * Create a new Organization + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(auth, apiBase) { + super(auth, apiBase); + } + + /** + * Create a repository in an organization + * @see https://developer.github.com/v3/repos/#create + * @param {Object} options - contains the organization name and repository definition + * @param {Requestable.callback} [cb] - will receive the created repository + * @return {Promise} - the promise for the http request + */ + createRepo(options, cb) { + this._request('POST', '/orgs/' + options.orgname + '/repos', options, cb); + } +} + +module.exports = Organization; diff --git a/src/Ratelimit.js b/src/Ratelimit.js new file mode 100644 index 00000000..cdc1fd24 --- /dev/null +++ b/src/Ratelimit.js @@ -0,0 +1,35 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; + +/** + * RateLimit allows users to query their rate-limit status + */ +class RateLimit extends Requestable { + /** + * construct a RateLimit + * @param {Requestable.auth} auth - the credentials to authenticate to GitHub + * @param {string} [apiBase] - the base Github API URL + * @return {Promise} - the promise for the http request + */ + constructor(auth, apiBase) { + super(auth, apiBase); + } + + /** + * Query the current rate limit + * @see https://developer.github.com/v3/rate_limit/ + * @param {Requestable.callback} [cb] - will receive the rate-limit data + * @return {Promise} - the promise for the http request + */ + getRateLimit(cb) { + return this._request('GET', '/rate_limit', null, cb); + } +} + +module.exports = RateLimit; diff --git a/src/Repository.js b/src/Repository.js new file mode 100644 index 00000000..009a9f3f --- /dev/null +++ b/src/Repository.js @@ -0,0 +1,673 @@ +'use strict'; +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; +import Utf8 from 'utf8'; +import {Base64} from 'js-base64'; +import debug from 'debug'; +const log = debug('github:repository'); + +/** + * Respository encapsulates the functionality to create, query, and modify files. + */ +class Repository extends Requestable { + /** + * Create a Repository. + * @param {string} fullname - the full name of the repository + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(fullname, auth, apiBase) { + super(auth, apiBase); + this.__repoPath = `/repos/${fullname}`; + this.__currentTree = { + branch: null, + sha: null + }; + } + + /** + * Get a reference + * @see https://developer.github.com/v3/git/refs/#get-a-reference + * @param {string} ref - the reference to get + * @param {Requestable.callback} [cb] - will receive the reference's refSpec or a list of refSpecs that match `ref` + * @return {Promise} - the promise for the http request + */ + getRef(ref, cb) { + return this._request('GET', `${this.__repoPath}/git/refs/${ref}`, null, cb); + } + + /** + * Create a reference + * @see https://developer.github.com/v3/git/refs/#create-a-reference + * @param {Object} options - the object describing the ref + * @param {Requestable.callback} [cb] - will receive the ref + * @return {Promise} - the promise for the http request + */ + createRef(options, cb) { + return this._request('POST', `${this.__repoPath}/git/refs`, options, cb); + } + + /** + * Delete a reference + * @see https://developer.github.com/v3/git/refs/#delete-a-reference + * @param {string} ref - the name of the ref to delte + * @param {Requestable.callback} [cb] - will receive true if the request is successful + * @return {Promise} - the promise for the http request + */ + deleteRef(ref, cb) { + return this._request('DELETE', `${this.__repoPath}/git/refs/${ref}`, null, cb); + } + + /** + * Delete a repository + * @see https://developer.github.com/v3/repos/#delete-a-repository + * @param {Requestable.callback} [cb] - will receive true if the request is successful + * @return {Promise} - the promise for the http request + */ + deleteRepo(cb) { + return this._request('DELETE', this.__repoPath, null, cb); + } + + /** + * List the tags on a repository + * @see https://developer.github.com/v3/repos/#list-tags + * @param {Requestable.callback} [cb] - will receive the tag data + * @return {Promise} - the promise for the http request + */ + listTags(cb) { + return this._request('GET', `${this.__repoPath}/tags`, null, cb); + } + + /** + * List the open pull requests on the repository + * @see https://developer.github.com/v3/pulls/#list-pull-requests + * @param {Object} options - options to filter the search + * @param {Requestable.callback} [cb] - will receive the list of PRs + * @return {Promise} - the promise for the http request + */ + listPulls(options, cb) { + options = options || {}; + return this._request('GET', `${this.__repoPath}/pulls`, options, cb); + } + + /** + * Get information about a specific pull request + * @see https://developer.github.com/v3/pulls/#get-a-single-pull-request + * @param {number} number - the PR you wish to fetch + * @param {Requestable.callback} [cb] - will receive the PR from the API + * @return {Promise} - the promise for the http request + */ + getPull(number, cb) { + return this._request('GET', `${this.__repoPath}/pulls/${number}`, null, cb); + } + + /** + * Compare two branches/commits/repositories + * @see https://developer.github.com/v3/repos/commits/#compare-two-commits + * @param {string} base - the base commit + * @param {string} head - the head commit + * @param {Requestable.callback} cb - will receive the comparison + * @return {Promise} - the promise for the http request + */ + compare(base, head, cb) { + return this._request('GET', `${this.__repoPath}/compare/${base}...${head}`, null, cb); + } + + /** + * List all the branches for the repository + * @see https://developer.github.com/v3/repos/#list-branches + * @param {Requestable.callback} cb - will receive the list of branches + * @return {Promise} - the promise for the http request + */ + listBranches(cb) { + return this._request('GET', `${this.__repoPath}/branches`, null, cb); + } + + /** + * Get a raw blob from the repository + * @see https://developer.github.com/v3/git/blobs/#get-a-blob + * @param {string} sha - the sha of the blob to fetch + * @param {Requestable.callback} cb - will receive the blob from the API + * @return {Promise} - the promise for the http request + */ + getBlob(sha, cb) { + return this._request('GET', `${this.__repoPath}/git/blobs/${sha}`, null, cb, 'raw'); + } + + /** + * Get a commit from the repository + * @see https://developer.github.com/v3/repos/commits/#get-a-single-commit + * @param {string} branch - unused + * @param {string} sha - the sha for the commit to fetch + * @param {Requestable.callback} cb - will receive the commit data + * @return {Promise} - the promise for the http request + */ + getCommit(branch, sha, cb) { + return this._request('GET', `${this.__repoPath}/git/commits/${sha}`, null, cb); + } + + /** + * Get tha sha for a particular object in the repository. This is a convenience function + * @see https://developer.github.com/v3/repos/contents/#get-contents + * @param {string} [branch] - the branch to look in, or the repository's default branch if omitted + * @param {string} path - the path of the file or directory + * @param {Requestable.callback} cb - will receive a description of the requested object, including a `SHA` property + * @return {Promise} - the promise for the http request + */ + getSha(branch, path, cb) { + branch = branch ? `?ref=${branch}` : ''; + return this._request('GET', `${this.__repoPath}/contents/${path}${branch}`, null, cb); + } + + /** + * List the commit statuses for a particular sha, branch, or tag + * @see https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref + * @param {string} sha - the sha, branch, or tag to get statuses for + * @param {Requestable.callback} cb - will receive the list of statuses + * @return {Promise} - the promise for the http request + */ + getStatuses(sha, cb) { + return this._request('GET', `${this.__repoPath}/commits/${sha}/statuses`, null, cb); + } + + /** + * Get a description of a git tree + * @see https://developer.github.com/v3/git/trees/#get-a-tree + * @param {string} treeSHA - the SHA of the tree to fetch + * @param {Requestable.callback} cb - will receive the callback data + * @return {Promise} - the promise for the http request + */ + getTree(treeSHA, cb) { + return this._request('GET', `${this.__repoPath}/git/trees/${treeSHA}`, null, cb); + } + + /** + * Create a blob + * @see https://developer.github.com/v3/git/blobs/#create-a-blob + * @param {(string|Buffer|Blob)} content - the content to add to the repository + * @param {Requestable.callback} cb - will receive the details of the created blob + * @return {Promise} - the promise for the http request + */ + postBlob(content, cb) { + let postBody = this._getContentObject(content); + + return this._request('POST', this.__repoPath + '/git/blobs', postBody, cb); + } + + _getContentObject(content) { + if (typeof content === 'string') { + log('contet is a string'); + return { + content: Utf8.encode(content), + encoding: 'utf-8' + }; + } else if (typeof Buffer !== 'undefined' && content instanceof Buffer) { + log('We appear to be in Node'); + return { + content: content.toString('base64'), + encoding: 'base64' + }; + } else if (typeof Blob !== 'undefined' && content instanceof Blob) { + log('We appear to be in the browser'); + return { + content: Base64.encode(content), + encoding: 'base64' + }; + } else { + log(`Not sure what this content is: ${typeof content}, ${JSON.stringify(content)}`); + throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)'); + } + } + + /** + * Update a tree in Git + * @see https://developer.github.com/v3/git/trees/#create-a-tree + * @param {string} baseTreeSHA - the SHA of the tree to update + * @param {string} path - the path for the new file + * @param {string} blobSHA - the SHA for the blob to put at `path` + * @param {Requestable.callback} cb - will receive the new tree that is created + * @return {Promise} - the promise for the http request + * @deprecated use {@link Repository#postTree} instead + */ + updateTree(baseTreeSHA, path, blobSHA, cb) { + let newTree = { + 'base_tree': baseTreeSHA, + 'tree': [{ + path: path, + sha: blobSHA, + mode: '100644', + type: 'blob' + }] + }; + + return this._request('POST', `${this.__repoPath}/git/trees`, newTree, cb); + } + + /** + * Create a new tree in git + * @see https://developer.github.com/v3/git/trees/#create-a-tree + * @param {Object} tree - the tree to create + * @param {string} baseSHA - the root sha of the tree + * @param {Requestable.callback} cb - will receive the new tree that is created + * @return {Promise} - the promise for the http request + */ + postTree(tree, baseSHA, cb) { + return this._request('POST', `${this.__repoPath}/git/trees`, {tree, base_tree: baseSHA}, cb); // jscs:ignore + } + + /** + * Add a commit to the repository + * @see https://developer.github.com/v3/git/commits/#create-a-commit + * @param {string} parent - the SHA of the parent commit + * @param {Object} tree - the tree that describes this commit + * @param {string} message - the commit message + * @param {Function} cb - will receive the commit that is created + * @return {Promise} - the promise for the http request {[type]} [description] + */ + commit(parent, tree, message, cb) { + let data = { + message, + tree, + parents: [parent] + }; + + return this._request('POST', `${this.__repoPath}/git/commits`, data, cb) + .then((response) => { + this.__currentTree.sha = response.sha; // Update latest commit + return response; + }); + } + + /** + * Update a ref + * @see https://developer.github.com/v3/git/refs/#update-a-reference + * @param {string} ref - the ref to update + * @param {string} commitSHA - the SHA to point the reference to + * @param {Function} cb - will receive the updated ref back + * @return {Promise} - the promise for the http request {[type]} [description] + */ + updateHead(ref, commitSHA, cb) { + return this._request('PATCH', `${this.__repoPath}/git/refs/${ref}`, {sha: commitSHA}, cb); + } + + /** + * Get information about the repository + * @see https://developer.github.com/v3/repos/#get + * @param {Function} cb - will receive the information about the repository + * @return {Promise} - the promise for the http request {[type]} [description] + */ + show(cb) { + return this._request('GET', this.__repoPath, null, cb); + } + + /** + * List the contributors to the repository + * @see https://developer.github.com/v3/repos/#list-contributors + * @param {Function} cb - will receive the list of contributors + * @return {Promise} - the promise for the http request {[type]} [description] + */ + contributors(cb) { + + return this._request('GET', `${this.__repoPath}/stats/contributors`, null, cb); + } + + /** + * List the users who are collaborators on the repository + * @see https://developer.github.com/v3/repos/collaborators/#list-collaborators + * @param {Function} cb - will receive the list of collaborators + * @return {Promise} - the promise for the http request {[type]} [description] + */ + collaborators(cb) { + return this._request('GET', `${this.__repoPath}/collaborators`, null, cb); + } + + /** + * Check if a user is a collaborator on the repository + * @see https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-collaborator + * @param {string} username - the user to check + * @param {Function} cb - will receive true if the user is a collaborator and false if they are not + * @return {Promise} - the promise for the http request {Boolean} [description] + */ + isCollaborator(username, cb) { + return this._request('GET', `${this.__repoPath}/collaborators/${username}`, null, cb); + } + + /** + * Get the contents of a repository + * @see https://developer.github.com/v3/repos/contents/#get-contents + * @param {string} ref - the ref to check + * @param {string} path - the path containing the content to fetch + * @param {Function} cb - will receive the fetched data + * @return {Promise} - the promise for the http request {[type]} [description] + */ + contents(ref, path, cb) { + path = path ? `${encodeURI(path)}` : ''; + return this._request('GET', `${this.__repoPath}/contents/${path}`, {ref}, cb); + } + + /** + * Fork a repository + * @see https://developer.github.com/v3/repos/forks/#create-a-fork + * @param {Function} cb - will receive the information about the newly created fork + * @return {Promise} - the promise for the http request {[type]} [description] + */ + fork(cb) { + return this._request('POST', `${this.__repoPath}/forks`, null, cb); + } + + /** + * List a repository's forks + * @see https://developer.github.com/v3/repos/forks/#list-forks + * @param {Function} cb - will receive the list of repositories forked from this one + * @return {Promise} - the promise for the http request {[type]} [description] + */ + listForks(cb) { + return this._request('GET', `${this.__repoPath}/forks`, null, cb); + } + + /** + * Create a new branch from an existing branch. + * @param {string} [oldBranch=master] - the name of the existing branch + * @param {string} newBranch - the name of the new branch + * @param {Function} cb - will receive the commit data for the head of the new branch + * @return {Promise} - the promise for the http request {[type]} [description] + */ + branch(oldBranch, newBranch, cb) { + if (typeof newBranch === 'function') { + cb = newBranch; + newBranch = oldBranch; + oldBranch = 'master'; + } + + return this.getRef(`heads/${oldBranch}`) + .then((response) => { + let sha = response.data.object.sha; + return this.createRef({sha, ref: `refs/heads/${newBranch}`}, cb); + }); + } + + /** + * Create a new pull request + * @see https://developer.github.com/v3/pulls/#create-a-pull-request + * @param {Object} options - the pull request description + * @param {Function} cb - will receive the new pull request + * @return {Promise} - the promise for the http request {[type]} [description] + */ + createPullRequest(options, cb) { + return this._request('POST', `${this.__repoPath}/pulls`, options, cb); + } + + /** + * List the hooks for the repository + * @see https://developer.github.com/v3/repos/hooks/#list-hooks + * @param {Function} cb - will receive the list of hooks + * @return {Promise} - the promise for the http request {[type]} [description] + */ + listHooks(cb) { + return this._request('GET', `${this.__repoPath}/hooks`, null, cb); + } + + /** + * Get a hook for the repository + * @see https://developer.github.com/v3/repos/hooks/#get-single-hook + * @param {number} id - the id of the webook + * @param {Function} cb - will receive the details of the webook + * @return {Promise} - the promise for the http request {[type]} [description] + */ + getHook(id, cb) { + return this._request('GET', `${this.__repoPath}/hooks/${id}`, null, cb); + } + + /** + * Add a new hook to the repository + * @see https://developer.github.com/v3/repos/hooks/#create-a-hook + * @param {Object} options - the configuration describing the new hook + * @param {Function} cb - will receive the new webhook + * @return {Promise} - the promise for the http request {[type]} [description] + */ + createHook(options, cb) { + return this._request('POST', `${this.__repoPath}/hooks`, options, cb); + } + + /** + * Edit an existing webhook + * @see https://developer.github.com/v3/repos/hooks/#edit-a-hook + * @param {number} id - the id of the webhook + * @param {Object} options - the new description of the webhook + * @param {Function} cb - will receive the updated webhook + * @return {Promise} - the promise for the http request {[type]} [description] + */ + editHook(id, options, cb) { + return this._request('PATCH', `${this.__repoPath}/hooks/${id}`, options, cb); + } + + /** + * Delete a webhook + * @see https://developer.github.com/v3/repos/hooks/#delete-a-hook + * @param {number} id - the id of the webhook to be deleted + * @param {Function} cb - will receive true if the call is successful + * @return {Promise} - the promise for the http request {[type]} [description] + */ + deleteHook(id, cb) { + return this._request('DELETE', this.__repoPath + '/hooks/' + id, null, cb); + } + + /** + * Get the raw contents of a file in a branch + * @see https://developer.github.com/v3/repos/contents/#get-contents + * @param {string} branch - the name of the branch to read from, or the default branch if not specified + * @param {string} path - the path to read from + * @param {Function} cb - will receive the raw file contents + * @return {Promise} - the promise for the http request {[type]} [description] + */ + read(branch, path, cb) { + path = path ? encodeURI(path) : ''; + return this._request('GET', `${this.__repoPath}/contents/${path}`, {ref: branch}, cb, 'raw'); + } + + /** + * Delete a file from a branch + * @see https://developer.github.com/v3/repos/contents/#delete-a-file + * @param {string} branch - the branch to delete from, or the default branch if not specified + * @param {string} path - the path of the file to remove + * @param {Function} cb - will receive the commit in which the delete occurred + * @return {Promise} - the promise for the http request {[type]} [description] + */ + remove(branch, path, cb) { + this.getSha(branch, path) + .then((response) => { + const deleteCommit = { + message: `Delete the file at '${path}'`, + sha: response.data.sha, + branch + }; + return this._request('DELETE', `${this.__repoPath}/contents/${path}`, deleteCommit, cb); + }); + } + + // Move a file to a new location + // ------- + move(branch, path, newPath, cb) { + return this._updateTree(branch, function(err, latestCommit) { + this.getTree(latestCommit + '?recursive=true', function(err, tree) { + // Update Tree + tree.forEach(function(ref) { + if (ref.path === path) { + ref.path = newPath; + } + + if (ref.type === 'tree') { + delete ref.sha; + } + }); + + this.postTree(tree, function(err, rootTree) { + this.commit(latestCommit, rootTree, 'Deleted ' + path, function(err, commit) { + this.updateHead(branch, commit, cb); + }); + }); + }); + }); + } + + _updateTree(branch, cb) { + if (branch === this.__currentTree.branch && this.__currentTree.sha) { + return cb(null, this.__currentTree.sha); + } + + this.getRef(`heads/${branch}`, function(err, sha) { + this.__currentTree.branch = branch; + this.__currentTree.sha = sha; + cb(err, sha); + }); + } + + /** + * Write a file to the repository + * @see https://developer.github.com/v3/repos/contents/#update-a-file + * @param {string} branch - the name of the branch + * @param {string} path - the path for the file + * @param {string} content - the contents of the file + * @param {string} message - the commit message + * @param {Object} [options] + * @param {Object} [options.author] - the author of the commit + * @param {Object} [options.commit] - the committer + * @param {boolean} [options.encode] - true if the content should be base64 encoded + * @param {Function} cb - will receive the new commit + * @return {Promise} - the promise for the http request {[type]} [description] + */ + write(branch, path, content, message, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + let filePath = path ? encodeURI(path) : ''; + let shouldEncode = options.encode !== false; + let commit = { + branch, + message, + author: options.author, + committer: options.committer, + content: shouldEncode ? Base64.encode(content) : content + }; + + return this.getSha(branch, filePath) + .then((response) => { + commit.sha = response.data.sha; + return this._request('PUT', `${this.__repoPath}/contents/${filePath}`, commit, cb); + }, () => { + return this._request('PUT', `${this.__repoPath}/contents/${filePath}`, commit, cb); + }); + } + + /** + * List the commits on a repository, optionally filtering by path, author or time range + * @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository + * @param {Object} [options] - options to filter by + * @param {string} [options.sha] - the SHA or branch to start from + * @param {string} [options.path] - the path to search on + * @param {string} [options.author] - the commit author + * @param {(Date|string)} [options.since] - only commits after this date will be returned + * @param {(Date|string)} [options.until] - only commits before this date will be returned + * @param {Requestable.callback} cb - will receive the list of commits found matching the criteria + * @return {Promise} - the promise for the http request + */ + getCommits(options, cb) { + options = options || {}; + + options.since = this._dateToISO(options.since); + options.until = this._dateToISO(options.until); + + return this._request('GET', `${this.__repoPath}/commits`, options, cb); + } + + /** + * Check if a repository is starred by you + * @see https://developer.github.com/v3/activity/starring/#check-if-you-are-starring-a-repository + * @param {string} owner - the owner of the repository + * @param {string} repository - the name of the repository + * @param {Requestable.callback} cb - will receive true if the repository is starred and false if the repository + * is not starred + * @return {Promise} - the promise for the http request {Boolean} [description] + */ + isStarred(owner, repository, cb) { + return this._request204or404('/user/starred/' + owner + '/' + repository, null, cb); + } + + /** + * Star a repository + * @see https://developer.github.com/v3/activity/starring/#star-a-repository + * @param {string} owner - the owner of the repository + * @param {string} repository - the repository name + * @param {Requestable.callback} cb - will receive true if the repository is starred + * @return {Promise} - the promise for the http request + */ + star(owner, repository, cb) { + return this._request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); + } + + /** + * Unstar a repository + * @see https://developer.github.com/v3/activity/starring/#unstar-a-repository + * @param {string} owner - the owner of the repository + * @param {string} repository - the repository name + * @param {Requestable.callback} cb - will receive true if the repository is unstarred + * @return {Promise} - the promise for the http request + */ + unstar(owner, repository, cb) { + return this._request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); + } + + /** + * Create a new release + * @see https://developer.github.com/v3/repos/releases/#create-a-release + * @param {Object} options - the description of the release + * @param {Requestable.callback} cb - will receive the newly created release + * @return {Promise} - the promise for the http request + */ + createRelease(options, cb) { + return this._request('POST', this.__repoPath + '/releases', options, cb); + } + + /** + * Edit a release + * @see https://developer.github.com/v3/repos/releases/#edit-a-release + * @param {string} id - the id of the release + * @param {Object} options - the description of the release + * @param {Requestable.callback} cb - will receive the modified release + * @return {Promise} - the promise for the http request + */ + editRelease(id, options, cb) { + return this._request('PATCH', this.__repoPath + '/releases/' + id, options, cb); + } + + /** + * Get information about a release + * @see https://developer.github.com/v3/repos/releases/#get-a-single-release + * @param {strign} id - the id of the release + * @param {Requestable.callback} cb - will receive the release information + * @return {Promise} - the promise for the http request + */ + getRelease(id, cb) { + return this._request('GET', this.__repoPath + '/releases/' + id, null, cb); + } + + /** + * Delete a release + * @see https://developer.github.com/v3/repos/releases/#delete-a-release + * @param {string} id - the release to be deleted + * @param {Requestable.callback} cb - will receive true if the operation is successful + * @return {Promise} - the promise for the http request + */ + deleteRelease(id, cb) { + return this._request('DELETE', this.__repoPath + '/releases/' + id, null, cb); + } +} + +module.exports = Repository; diff --git a/src/Requestable.js b/src/Requestable.js new file mode 100644 index 00000000..ae2bfa4c --- /dev/null +++ b/src/Requestable.js @@ -0,0 +1,260 @@ +/** + * @file + * @copyright 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import axios from 'axios'; +import debug from 'debug'; +import {Base64} from 'js-base64'; + +const log = debug('github:request'); + +/** + * Requestable wraps the logic for making http requests to the API + */ +class Requestable { + /** + * Either a username and password or an oauth token for Github + * @typedef {Object} Requestable.auth + * @prop {string} [username] - the Github username + * @prop {string} [password] - the user's password + * @prop {token} [token] - an OAuth token + */ + /** + * Initialize the http internals. + * @param {Requestable.auth} [auth] - the credentials to authenticate to Github. If auth is + * not provided request will be made unauthenticated + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(auth, apiBase) { + this.__apiBase = apiBase || 'https://api.github.com'; + this.__auth = { + token: auth.token, + username: auth.username, + password: auth.password + }; + + if (auth.token) { + this.__authorizationHeader = 'token ' + auth.token; + } else if (auth.username && auth.password) { + this.__authorizationHeader = 'Basic ' + Base64.encode(auth.username + ':' + auth.password); + } + } + + /** + * Compute the URL to use to make a request. + * @private + * @param {string} path - either a URL relative to the API base or an absolute URL + * @return {string} - the URL to use + */ + __getURL(path) { + let url = path; + + if (path.indexOf('//') === -1) { + url = this.__apiBase + path; + } + + let newCacheBuster = 'timestamp=' + new Date().getTime(); + return url.replace(/(timestamp=\d+)/, newCacheBuster); + } + + /** + * Compute the headers required for an API request. + * @private + * @param {boolean} raw - if the request should be treated as JSON or as a raw request + * @return {Object} - the headers to use in the request + */ + __getRequestHeaders(raw) { + let headers = { + 'Accept': raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', + 'Content-Type': 'application/json;charset=UTF-8' + }; + + if (this.__authorizationHeader) { + headers.Authorization = this.__authorizationHeader; + } + + return headers; + } + + /** + * Sets the default options for API requests + * @protected + * @param {Object} [requestOptions={}] - the current options for the request + * @return - the options to pass to the request + */ + _getOptionsWithDefaults(requestOptions = {}) { + requestOptions.type = requestOptions.type || 'all'; + requestOptions.sort = requestOptions.sort || 'updated'; + requestOptions.per_page = requestOptions.per_page || '100'; // jscs:ignore + + return requestOptions; + } + + /** + * if a `Date` is passed to this function it will be converted to an ISO string + * @param {*} date - the object to attempt to cooerce into an ISO date string + * @return {string} - the ISO representation of `date` or whatever was passed in if it was not a date + */ + _dateToISO(date) { + if (date && (date instanceof Date)) { + date = date.toISOString(); + } + + return date; + } + + /** + * A function that receives the result of the API request. + * @callback Requestable.callback + * @param {Requestable.Error} error - the error returned by the API or `null` + * @param {(Object|true)} result - the data returned by the API or `true` if the API returns `204 No Content` + * @param {Object} request - the raw {@linkcode https://github.com/mzabriskie/axios#response-schema Response} + */ + /** + * Make a request. + * @param {string} method - the method for the request (GET, PUT, POST, DELETE) + * @param {string} path - the path for the request + * @param {*} [data] - the data to send to the server. For HTTP methods that don't have a body the data + * will be sent as query parameters + * @param {Requestable.callback} [cb] - the callback for the request + * @param {boolean} [raw=false] - if the request should be sent as raw. If this is a falsy value then the + * request will be made as JSON + * @return {Promise} - the Promise for the http request + */ + _request(method, path, data, cb, raw) { + const url = this.__getURL(path); + const headers = this.__getRequestHeaders(raw); + let queryParams = {}; + + const shouldUseDataAsParams = data && (typeof data === 'object') && methodHasNoBody(method); + if (shouldUseDataAsParams) { + queryParams = data; + data = undefined; + } + + const config = { + url: url, + method: method, + headers: headers, + params: queryParams, + data: data, + responseType: raw ? 'text' : 'json' + }; + + log(`${config.method} to ${config.url}`); + const requestPromise = axios(config).catch(callbackErrorOrThrow(cb, path)); + + if (cb) { + requestPromise.then((response) => { + cb(null, response.data || true, response); + }); + } + + return requestPromise; + } + + /** + * Make a request to an endpoint the returns 204 when true and 404 when false + * @param {string} path - the path to request + * @param {Object} data - any query parameters for the request + * @param {Requestable.callback} cb - the callback that will receive `true` or `false` + * @return {Promise} - the promise for the http request + */ + _request204or404(path, data, cb) { + return this._request('GET', path, data) + .then(function success(response) { + if (cb) { + cb(null, true, response); + } + return true; + }, function failure(response) { + if (response.status === 404) { + if (cb) { + cb(null, false, response); + } + return false; + } + + if (cb) { + cb(response); + } + throw response; + }); + } + + /** + * Make a request and fetch all the available data. Github will paginate responses so for queries + * that might span multiple pages this method is preferred to {@link Requestable#request} + * @param {string} path - the path to request + * @param {Object} options - the query parameters to include + * @param {Requestable.callback} [cb] - the function to receive the data. The returned data will always be an array. + * @param {Object[]} results - the partial results. This argument is intended for interal use only. + * @return {Promise} - a promise which will resolve when all pages have been fetched + * @deprecated This will be folded into {@link Requestable#_request} in the 2.0 release. + */ + _requestAllPages(path, options, cb, results) { + results = results || []; + + return this._request('GET', path, null) + .then((response) => { + results.push.apply(results, response.data); + + const nextUrl = getNextPage(response.headers.link); + if (nextUrl) { + log(`getting next page: ${nextUrl}`); + return this._requestAllPages(nextUrl, options, cb, results); + } + + if (cb) { + cb(null, results, response); + } + + return results; + }).catch(callbackErrorOrThrow(cb, path)); + } +} + +export default Requestable; + +// ////////////////////////// // +// Private helper functions // +// ////////////////////////// // +export function buildError(path, response) { + return { + path: path, + request: response.config, + response: response, + status: response.status + }; +} + +const METHODS_WITH_NO_BODY = ['GET', 'HEAD', 'DELETE']; +function methodHasNoBody(method) { + return METHODS_WITH_NO_BODY.indexOf(method) !== -1; +} + +function getNextPage(linksHeader = '') { + const links = linksHeader.split(/\s*,\s*/); // splits and strips the urls + return links.reduce(function(nextUrl, link) { + if (link.search(/rel="next"/) !== -1) { + return (link.match(/<(.*)>/) || [])[1]; + } + + return nextUrl; + }, undefined); +} + +function callbackErrorOrThrow(cb, path) { + return function handler(response) { + log(`error making request ${response.config.method} ${response.config.url} ${JSON.stringify(response.data)}`); + let error = buildError(path, response); + if (cb) { + cb(error); + } else { + throw error; + } + }; +} diff --git a/src/Search.js b/src/Search.js new file mode 100644 index 00000000..e08a6024 --- /dev/null +++ b/src/Search.js @@ -0,0 +1,89 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; +import debug from 'debug'; +const log = debug('github:search'); + +/** + * Wrap the Search API + */ +class Search extends Requestable { + /** + * Create a Search + * @param {Object} defaults - defaults for the search + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(defaults, auth, apiBase) { + super(auth, apiBase); + this.__defaults = this._getOptionsWithDefaults(defaults); + } + + /** + * Perform a search on the GitHub API + * @private + * @param {string} path - the scope of the search + * @param {Object} [withOptions] - additional parameters for the search + * @param {Requestable.callback} [cb] - will receive the results of the search + * @return {Promise} - the promise for the http request + */ + _search(path, withOptions = {}, cb = undefined) { + let requestOptions = {}; + Object.keys(this.__defaults).forEach((prop) => requestOptions[prop] = this.__defaults[prop]); + Object.keys(withOptions).forEach((prop) => requestOptions[prop] = withOptions[prop]); + + log(`searching ${path} with options:`, requestOptions); + return this._request('GET', `/search/${path}`, requestOptions, cb); + } + + /** + * Search in repositories + * @see https://developer.github.com/v3/search/#search-repositories + * @param {Object} [options] - additional parameters for the search + * @param {Requestable.callback} [cb] - will receive the results of the search + * @return {Promise} - the promise for the http request + */ + repositories(options, cb) { + return this._search('repositories', options, cb); + } + + /** + * Search amongst code + * @see https://developer.github.com/v3/search/#search-code + * @param {Object} [options] - additional parameters for the search + * @param {Requestable.callback} [cb] - will receive the results of the search + * @return {Promise} - the promise for the http request + */ + code(options, cb) { + return this._search('code', options, cb); + } + + /** + * Search issues + * @see https://developer.github.com/v3/search/#search-issues + * @param {Object} [options] - additional parameters for the search + * @param {Requestable.callback} [cb] - will receive the results of the search + * @return {Promise} - the promise for the http request + */ + issues(options, cb) { + return this._search('issues', options, cb); + } + + /** + * Search for users + * @see https://developer.github.com/v3/search/#search-users + * @param {Object} [options] - additional parameters for the search + * @param {Requestable.callback} [cb] - will receive the results of the search + * @return {Promise} - the promise for the http request + */ + users(options, cb) { + return this._search('users', options, cb); + } +} + +module.exports = Search; diff --git a/src/User.js b/src/User.js new file mode 100644 index 00000000..719fdc03 --- /dev/null +++ b/src/User.js @@ -0,0 +1,188 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; +import debug from 'debug'; +const log = debug('github:user'); + +/** + * A User allows scoping of API requests to a particular Github user. + */ +class User extends Requestable { + /** + * Create a User. + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(auth, apiBase) { + super(auth, apiBase); + } + + /** + * List the user's repositories + * @see https://developer.github.com/v3/repos/#list-your-repositories + * @param {Object} [options={}] - any options to refine the search + * @param {Requestable.callback} [cb] - will receive the list of repositories + * @return {Promise} - the promise for the http request + */ + repos(options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + options = this._getOptionsWithDefaults(options); + + log(`Fetching repositories with options: ${JSON.stringify(options)}`); + return this._requestAllPages('/user/repos', options, cb); + } + + /** + * List the orgs that the user belongs to + * @param {Requestable.callback} [cb] - will receive the list of organizations + * @return {Promise} - the promise for the http request + */ + orgs(cb) { + return this._request('GET', '/user/orgs', null, cb); + } + + /** + * List the user's gists + * @param {Requestable.callback} [cb] - will receive the list of gists + * @return {Promise} - the promise for the http request + */ + gists(cb) { + return this._request('GET', '/gists', null, cb); + } + + /** + * List the user's notifications + * @see https://developer.github.com/v3/activity/notifications/#list-your-notifications + * @param {Object} [options={}] - any options to refine the search + * @param {Requestable.callback} [cb] - will receive the list of repositories + * @return {Promise} - the promise for the http request + */ + notifications(options, cb) { + options = options || {}; + if (typeof options === 'function') { + cb = options; + options = {}; + } + + options.since = this._dateToISO(options.since); + options.before = this._dateToISO(options.before); + + return this._request('GET', '/notifications', options, cb); + } + + /** + * Show a user + * @see https://developer.github.com/v3/users/#get-a-single-user + * @param {string} [username] - the user to show, defaults to the current user + * @param {Requestable.callback} [cb] - will receive the user's information + * @return {Promise} - the promise for the http request + */ + show(username, cb) { + if (typeof username === 'function') { + cb = username; + username = undefined; + } + const url = username ? '/users/' + username : '/user'; + + return this._request('GET', url, null, cb); + } + + /** + * Get a user's repositories + * @see https://developer.github.com/v3/repos/#list-user-repositories + * @param {string} username - the user's repositories we are interested in + * @param {Object} options - filtering options + * @param {Requestable.callback} [cb] - will receive the list of repositories + * @return {Promise} - the promise for the http request + */ + userRepos(username, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + + options = this._getOptionsWithDefaults(options); + + return this._requestAllPages(`/users/${username}/repos`, options, cb); + } + + /** + * Gets the list of starred repositories for a user + * @see https://developer.github.com/v3/activity/starring/#list-repositories-being-starred + * @param {string} username - the user to query + * @param {Requestable.callback} [cb] - will receive the list of starred repositories + * @return {Promise} - the promise for the http request + */ + userStarred(username, cb) { + let requestOptions = this._getOptionsWithDefaults(); + return this._requestAllPages(`/users/${username}/starred`, requestOptions, cb); + } + + /** + * List a user's gists + * @see https://developer.github.com/v3/gists/#list-a-users-gists + * @param {string} username - the user's gists to list + * @param {Requestable.callback} [cb] - receives the list of gists + * @return {Promise} - the promise for the http request + */ + userGists(username, cb) { + return this._request('GET', `/users/${username}/gists`, null, cb); + } + + /** + * List the repositories in an organization + * @see https://developer.github.com/v3/repos/#list-organization-repositories + * @param {string} orgname - the name of the organization + * @param {Requestable.callback} [cb] - will receive the list of repositories + * @return {Promise} - the promise for the http request + */ + orgRepos(orgname, cb) { + let requestOptions = this._getOptionsWithDefaults({direction: 'desc'}); + + return this._requestAllPages(`/orgs/${orgname}/repos`, requestOptions, cb); + } + + /** + * Follow a user + * @see https://developer.github.com/v3/users/followers/#follow-a-user + * @param {string} username - the user to follow + * @param {Requestable.callback} [cb] - will receive true if the request succeeds + * @return {Promise} - the promise for the http request + */ + follow(username, cb) { + return this._request('PUT', `/user/following/${username}`, null, cb); + } + + /** + * Unfollow a user + * @see https://developer.github.com/v3/users/followers/#follow-a-user + * @param {string} username - the user to unfollow + * @param {Requestable.callback} [cb] - receives true if the request succeeds + * @return {Promise} - the promise for the http request + */ + unfollow(username, cb) { + return this._request('DELETE', `/user/following/${username}`, null, cb); + } + + /** + * Create a new user repository + * @see https://developer.github.com/v3/repos/#create + * @param {object} options - the repository definition + * @param {Requestable.callback} [cb] - will receive the API response + * @return {Promise} - the promise for the http request + */ + createRepo(options, cb) { + return this._request('POST', '/user/repos', options, cb); + } +} + +module.exports = User; diff --git a/src/github.js b/src/github.js index 3fa635d2..80eee152 100644 --- a/src/github.js +++ b/src/github.js @@ -1,1164 +1,103 @@ -/*! - * @overview Github.js - * - * @copyright (c) 2013 Michael Aufreiter, Development Seed - * Github.js is freely distributable. - * - * @license Licensed under BSD-3-Clause-Clear - * - * For all details and documentation: - * http://substance.io/michael/github +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. */ -'use strict'; -var Utf8 = require('utf8'); -var axios = require('axios'); -var Base64 = require('base-64'); -var Promise = require('es6-promise'); +import Gist from './Gist'; +import User from './User'; +import Issue from './Issue'; +import Search from './Search'; +import RateLimit from './RateLimit'; +import Repository from './Repository'; +import Organization from './Organization'; -function b64encode(string) { - return Base64.encode(Utf8.encode(string)); -} - -if (Promise.polyfill) { - Promise.polyfill(); -} - -// Initial Setup -// ------------- - -function Github(options) { - options = options || {}; - - var API_URL = options.apiUrl || 'https://api.github.com'; - - var _request = Github._request = function _request(method, path, data, cb, raw) { - function getURL() { - var url = path.indexOf('//') >= 0 ? path : API_URL + path; - - url += ((/\?/).test(url) ? '&' : '?'); - - if (data && typeof data === 'object' && ['GET', 'HEAD', 'DELETE'].indexOf(method) > -1) { - for(var param in data) { - if (data.hasOwnProperty(param)) { - url += '&' + encodeURIComponent(param) + '=' + encodeURIComponent(data[param]); - } - } - } - - return url.replace(/(×tamp=\d+)/, '') + - (typeof window !== 'undefined' ? '×tamp=' + new Date().getTime() : ''); - } - - var config = { - headers: { - Accept: raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', - 'Content-Type': 'application/json;charset=UTF-8' - }, - method: method, - data: data ? data : {}, - url: getURL() - }; - - if ((options.token) || (options.username && options.password)) { - config.headers.Authorization = options.token ? - 'token ' + options.token : - 'Basic ' + b64encode(options.username + ':' + options.password); - } - - return axios(config) - .then(function(response) { - cb( - null, - response.data || true, - response - ); - }, function(response) { - if (response.status === 304) { - cb( - null, - response.data || true, - response - ); - } else { - cb({ - path: path, - request: response, - error: response.status - }); - } - }); - }; - - var _requestAllPages = Github._requestAllPages = function _requestAllPages(path, singlePage, cb) { - var results = []; - - (function iterate() { - _request('GET', path, null, function(err, res, xhr) { - if (err) { - return cb(err); - } - - if (!(res instanceof Array)) { - res = [res]; - } - - results.push.apply(results, res); - - var next = (xhr.headers.link || '') - .split(',') - .filter(function(link) { - return /rel="next"/.test(link); - }) - .map(function(link) { - return (/<(.*)>/.exec(link) || [])[1]; - }) - .pop(); - - if (!next || singlePage) { - cb(err, results, xhr); - } else { - path = next; - iterate(); - } - }); - })(); - }; - - // User API - // ======= - - Github.User = function() { - this.repos = function(options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - options = options || {}; - - var url = '/user/repos'; - var params = []; - - params.push('type=' + encodeURIComponent(options.type || 'all')); - params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore - - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } - - url += '?' + params.join('&'); - - _requestAllPages(url, !!options.page, cb); - }; - - // List user organizations - // ------- - - this.orgs = function(cb) { - _request('GET', '/user/orgs', null, cb); - }; - - // List authenticated user's gists - // ------- - - this.gists = function(cb) { - _request('GET', '/gists', null, cb); - }; - - // List authenticated user's unread notifications - // ------- - - this.notifications = function(options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - options = options || {}; - var url = '/notifications'; - var params = []; - - if (options.all) { - params.push('all=true'); - } - - if (options.participating) { - params.push('participating=true'); - } - - if (options.since) { - var since = options.since; - - if (since.constructor === Date) { - since = since.toISOString(); - } - - params.push('since=' + encodeURIComponent(since)); - } - - if (options.before) { - var before = options.before; - - if (before.constructor === Date) { - before = before.toISOString(); - } - - params.push('before=' + encodeURIComponent(before)); - } - - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } - - if (params.length > 0) { - url += '?' + params.join('&'); - } - - _request('GET', url, null, cb); - }; - - // Show user information - // ------- - - this.show = function(username, cb) { - var command = username ? '/users/' + username : '/user'; - - _request('GET', command, null, cb); - }; - - // List user repositories - // ------- - - this.userRepos = function(username, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - var url = '/users/' + username + '/repos'; - var params = []; - - params.push('type=' + encodeURIComponent(options.type || 'all')); - params.push('sort=' + encodeURIComponent(options.sort || 'updated')); - params.push('per_page=' + encodeURIComponent(options.per_page || '100')); // jscs:ignore - - if (options.page) { - params.push('page=' + encodeURIComponent(options.page)); - } - - url += '?' + params.join('&'); - - _requestAllPages(url, !!options.page, cb); - }; - - // List user starred repositories - // ------- - - this.userStarred = function(username, cb) { - // Github does not always honor the 1000 limit so we want to iterate over the data set. - var request = '/users/' + username + '/starred?type=all&per_page=100'; - - _requestAllPages(request, false, cb); - }; - - // List a user's gists - // ------- - - this.userGists = function(username, cb) { - _request('GET', '/users/' + username + '/gists', null, cb); - }; - - // List organization repositories - // ------- - - this.orgRepos = function(orgname, cb) { - // Github does not always honor the 1000 limit so we want to iterate over the data set. - var request = '/orgs/' + orgname + '/repos?type=all&&page_num=100&sort=updated&direction=desc'; - - _requestAllPages(request, false, cb); - }; - - this.follow = function(username, cb) { - _request('PUT', '/user/following/' + username, null, cb); - }; - - // Unfollow user - // ------- - - this.unfollow = function(username, cb) { - _request('DELETE', '/user/following/' + username, null, cb); - }; - - // Create a repo - // ------- - this.createRepo = function(options, cb) { - _request('POST', '/user/repos', options, cb); - }; - }; +/** + * GitHub encapsulates the functionality to create various API wrapper objects. + */ +class GitHub { + /** + * Create a new GitHub. + * @param {Requestable.auth} [auth] - the credentials to authenticate to Github. If auth is + * not provided requests will be made unauthenticated + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(auth, apiBase = 'https://api.github.com') { + this.__apiBase = apiBase; + this.__auth = auth || {}; + } - Github.Organization = function() { - // Create an Organization repo - // ------- - this.createRepo = function(options, cb) { - _request('POST', '/orgs/' + options.orgname + '/repos', options, cb); - }; - }; + /** + * Create a new Gist wrapper + * @param {number} id - the id for the gist, leave undefined when creating a new gist + */ + getGist(id) { + return new Gist(id, this.__auth, this.__apiBase); + } - // Repository API - // ======= + /** + * Create a new User wrapper + * @return {User} + */ + getUser() { + return new User(this.__auth, this.__apiBase); + } - Github.Repository = function(options) { - var repo = options.name; - var user = options.user; - var fullname = options.fullname; + /** + * Create a new Organization wrapper + * @return {Organization} + */ + getOrg() { + return new Organization(this.__auth, this.__apiBase); + } - var that = this; - var repoPath; + /** + * Create a new Repository wrapper + * @param {string} user - the user who owns the respository + * @param {string} repo - the name of the repository + * @return {Repository} + */ + getRepo(user, repo) { + return new Repository(this._getFullName(user, repo), this.__auth, this.__apiBase); + } - if (fullname) { - repoPath = '/repos/' + fullname; - } else { - repoPath = '/repos/' + user + '/' + repo; - } + /** + * Create a new Issue wrapper + * @param {string} user - the user who owns the respository + * @param {string} repo - the name of the repository + * @return {Issue} + */ + getIssues(user, repo) { + return new Issue(this._getFullName(user, repo), this.__auth, this.__apiBase); + } - var currentTree = { - branch: null, - sha: null - }; + /** + * Create a new Search wrapper + * @param {string} query - the query to search for + * @return {Search} + */ + search(query) { + return new Search(query, this.__auth, this.__apiBase); + } - // Uses the cache if branch has not been changed - // ------- + /** + * Create a new RateLimit wrapper + * @return {RateLimit} + */ + getRateLimit() { + return new RateLimit(this.__auth, this.__apiBase); + } - function updateTree(branch, cb) { - if (branch === currentTree.branch && currentTree.sha) { - return cb(null, currentTree.sha); - } + _getFullName(user, repo) { + let fullname = user; - that.getRef('heads/' + branch, function(err, sha) { - currentTree.branch = branch; - currentTree.sha = sha; - cb(err, sha); - }); + if (repo) { + fullname = `${user}/${repo}`; } - // Get a particular reference - // ------- - - this.getRef = function(ref, cb) { - _request('GET', repoPath + '/git/refs/' + ref, null, function(err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.object.sha, xhr); - }); - }; - - // Create a new reference - // -------- - // - // { - // "ref": "refs/heads/my-new-branch-name", - // "sha": "827efc6d56897b048c772eb4087f854f46256132" - // } - - this.createRef = function(options, cb) { - _request('POST', repoPath + '/git/refs', options, cb); - }; - - // Delete a reference - // -------- - // - // Repo.deleteRef('heads/gh-pages') - // repo.deleteRef('tags/v1.0') - - this.deleteRef = function(ref, cb) { - _request('DELETE', repoPath + '/git/refs/' + ref, options, cb); - }; - - // Delete a repo - // -------- - - this.deleteRepo = function(cb) { - _request('DELETE', repoPath, options, cb); - }; - - // List all tags of a repository - // ------- - - this.listTags = function(cb) { - _request('GET', repoPath + '/tags', null, cb); - }; - - // List all pull requests of a respository - // ------- - - this.listPulls = function(options, cb) { - options = options || {}; - var url = repoPath + '/pulls'; - var params = []; - - if (typeof options === 'string') { - // Backward compatibility - params.push('state=' + options); - } else { - if (options.state) { - params.push('state=' + encodeURIComponent(options.state)); - } - - if (options.head) { - params.push('head=' + encodeURIComponent(options.head)); - } - - if (options.base) { - params.push('base=' + encodeURIComponent(options.base)); - } - - if (options.sort) { - params.push('sort=' + encodeURIComponent(options.sort)); - } - - if (options.direction) { - params.push('direction=' + encodeURIComponent(options.direction)); - } - - if (options.page) { - params.push('page=' + options.page); - } - - if (options.per_page) { - params.push('per_page=' + options.per_page); - } - } - - if (params.length > 0) { - url += '?' + params.join('&'); - } - - _request('GET', url, null, cb); - }; - - // Gets details for a specific pull request - // ------- - - this.getPull = function(number, cb) { - _request('GET', repoPath + '/pulls/' + number, null, cb); - }; - - // Retrieve the changes made between base and head - // ------- - - this.compare = function(base, head, cb) { - _request('GET', repoPath + '/compare/' + base + '...' + head, null, cb); - }; - - // List all branches of a repository - // ------- - - this.listBranches = function(cb) { - _request('GET', repoPath + '/git/refs/heads', null, function(err, heads, xhr) { - if (err) { - return cb(err); - } - - heads = heads.map(function(head) { - return head.ref.replace(/^refs\/heads\//, ''); - }); - - cb(null, heads, xhr); - }); - }; - - // Retrieve the contents of a blob - // ------- - - this.getBlob = function(sha, cb) { - _request('GET', repoPath + '/git/blobs/' + sha, null, cb, 'raw'); - }; - - // For a given file path, get the corresponding sha (blob for files, tree for dirs) - // ------- - - this.getCommit = function(branch, sha, cb) { - _request('GET', repoPath + '/git/commits/' + sha, null, cb); - }; - - // For a given file path, get the corresponding sha (blob for files, tree for dirs) - // ------- - - this.getSha = function(branch, path, cb) { - if (!path || path === '') { - return that.getRef('heads/' + branch, cb); - } - - _request('GET', repoPath + '/contents/' + path + (branch ? '?ref=' + branch : ''), - null, function(err, pathContent, xhr) { - if (err) { - return cb(err); - } - - cb(null, pathContent.sha, xhr); - }); - }; - - // Get the statuses for a particular SHA - // ------- - - this.getStatuses = function(sha, cb) { - _request('GET', repoPath + '/statuses/' + sha, null, cb); - }; - - // Retrieve the tree a commit points to - // ------- - - this.getTree = function(tree, cb) { - _request('GET', repoPath + '/git/trees/' + tree, null, function(err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.tree, xhr); - }); - }; - - // Post a new blob object, getting a blob SHA back - // ------- - - this.postBlob = function(content, cb) { - if (typeof content === 'string') { - content = { - content: Utf8.encode(content), - encoding: 'utf-8' - }; - } else { - if (typeof Buffer !== 'undefined' && content instanceof Buffer) { - // When we're in Node - content = { - content: content.toString('base64'), - encoding: 'base64' - }; - } else if (typeof Blob !== 'undefined' && content instanceof Blob) { - content = { - content: b64encode(content), - encoding: 'base64' - }; - } else { - throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)'); - } - } - - _request('POST', repoPath + '/git/blobs', content, function(err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.sha, xhr); - }); - }; - - // Update an existing tree adding a new blob object getting a tree SHA back - // ------- - - this.updateTree = function(baseTree, path, blob, cb) { - var data = { - base_tree: baseTree, - tree: [ - { - path: path, - mode: '100644', - type: 'blob', - sha: blob - } - ] - }; - - _request('POST', repoPath + '/git/trees', data, function(err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.sha, xhr); - }); - }; - - // Post a new tree object having a file path pointer replaced - // with a new blob SHA getting a tree SHA back - // ------- - - this.postTree = function(tree, cb) { - _request('POST', repoPath + '/git/trees', { - tree: tree - }, function(err, res, xhr) { - if (err) { - return cb(err); - } - - cb(null, res.sha, xhr); - }); - }; - - // Create a new commit object with the current commit SHA as the parent - // and the new tree SHA, getting a commit SHA back - // ------- - - this.commit = function(parent, tree, message, cb) { - var user = new Github.User(); - - user.show(null, function(err, userData) { - if (err) { - return cb(err); - } - - var data = { - message: message, - author: { - name: options.user, - email: userData.email - }, - parents: [ - parent - ], - tree: tree - }; - - _request('POST', repoPath + '/git/commits', data, function(err, res, xhr) { - if (err) { - return cb(err); - } - - currentTree.sha = res.sha; // Update latest commit - - cb(null, res.sha, xhr); - }); - }); - }; - - // Update the reference of your head to point to the new commit SHA - // ------- - - this.updateHead = function(head, commit, cb) { - _request('PATCH', repoPath + '/git/refs/heads/' + head, { - sha: commit - }, cb); - }; - - // Show repository information - // ------- - - this.show = function(cb) { - _request('GET', repoPath, null, cb); - }; - - // Show repository contributors - // ------- - - this.contributors = function(cb, retry) { - retry = retry || 1000; - var that = this; - - _request('GET', repoPath + '/stats/contributors', null, function(err, data, xhr) { - if (err) { - return cb(err); - } - - if (xhr.status === 202) { - setTimeout( - function() { - that.contributors(cb, retry); - }, - retry - ); - } else { - cb(err, data, xhr); - } - }); - }; - - // Show repository collaborators - // ------- - - this.collaborators = function(cb) { - _request('GET', repoPath + '/collaborators', null, cb); - }; - - // Check whether user is a collaborator on the repository - // ------- - - this.isCollaborator = function(username, cb) { - _request('GET', repoPath + '/collaborators/' + username, null, cb); - }; - - // Get contents - // -------- - - this.contents = function(ref, path, cb) { - path = encodeURI(path); - _request('GET', repoPath + '/contents' + (path ? '/' + path : ''), { - ref: ref - }, cb); - }; - - // Fork repository - // ------- - - this.fork = function(cb) { - _request('POST', repoPath + '/forks', null, cb); - }; - - // List forks - // -------- - - this.listForks = function(cb) { - _request('GET', repoPath + '/forks', null, cb); - }; - - // Branch repository - // -------- - - this.branch = function(oldBranch, newBranch, cb) { - if (arguments.length === 2 && typeof arguments[1] === 'function') { - cb = newBranch; - newBranch = oldBranch; - oldBranch = 'master'; - } - - this.getRef('heads/' + oldBranch, function(err, ref) { - if (err && cb) { - return cb(err); - } - - that.createRef({ - ref: 'refs/heads/' + newBranch, - sha: ref - }, cb); - }); - }; - - // Create pull request - // -------- - - this.createPullRequest = function(options, cb) { - _request('POST', repoPath + '/pulls', options, cb); - }; - - // List hooks - // -------- - - this.listHooks = function(cb) { - _request('GET', repoPath + '/hooks', null, cb); - }; - - // Get a hook - // -------- - - this.getHook = function(id, cb) { - _request('GET', repoPath + '/hooks/' + id, null, cb); - }; - - // Create a hook - // -------- - - this.createHook = function(options, cb) { - _request('POST', repoPath + '/hooks', options, cb); - }; - - // Edit a hook - // -------- - - this.editHook = function(id, options, cb) { - _request('PATCH', repoPath + '/hooks/' + id, options, cb); - }; - - // Delete a hook - // -------- - - this.deleteHook = function(id, cb) { - _request('DELETE', repoPath + '/hooks/' + id, null, cb); - }; - - // Read file at given path - // ------- - - this.read = function(branch, path, cb) { - _request('GET', repoPath + '/contents/' + encodeURI(path) + (branch ? '?ref=' + branch : ''), - null, cb, true); - }; - - // Remove a file - // ------- - - this.remove = function(branch, path, cb) { - that.getSha(branch, path, function(err, sha) { - if (err) { - return cb(err); - } - - _request('DELETE', repoPath + '/contents/' + path, { - message: path + ' is removed', - sha: sha, - branch: branch - }, cb); - }); - }; - - // Alias for repo.remove for backwards comapt. - // ------- - this.delete = this.remove; - - // Move a file to a new location - // ------- - - this.move = function(branch, path, newPath, cb) { - updateTree(branch, function(err, latestCommit) { - that.getTree(latestCommit + '?recursive=true', function(err, tree) { - // Update Tree - tree.forEach(function(ref) { - if (ref.path === path) { - ref.path = newPath; - } - - if (ref.type === 'tree') { - delete ref.sha; - } - }); - - that.postTree(tree, function(err, rootTree) { - that.commit(latestCommit, rootTree, 'Deleted ' + path, function(err, commit) { - that.updateHead(branch, commit, cb); - }); - }); - }); - }); - }; - - // Write file contents to a given branch and path - // ------- - - this.write = function(branch, path, content, message, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - that.getSha(branch, encodeURI(path), function(err, sha) { - var writeOptions = { - message: message, - content: typeof options.encode === 'undefined' || options.encode ? b64encode(content) : content, - branch: branch, - committer: options && options.committer ? options.committer : undefined, - author: options && options.author ? options.author : undefined - }; - - // If no error, we set the sha to overwrite an existing file - if (!(err && err.error !== 404)) { - writeOptions.sha = sha; - } - - _request('PUT', repoPath + '/contents/' + encodeURI(path), writeOptions, cb); - }); - }; - - // List commits on a repository. Takes an object of optional parameters: - // sha: SHA or branch to start listing commits from - // path: Only commits containing this file path will be returned - // author: Only commits by this author will be returned. Its value can be the GitHub login or the email address - // since: ISO 8601 date - only commits after this date will be returned - // until: ISO 8601 date - only commits before this date will be returned - // ------- - - this.getCommits = function(options, cb) { - options = options || {}; - var url = repoPath + '/commits'; - var params = []; - - if (options.sha) { - params.push('sha=' + encodeURIComponent(options.sha)); - } - - if (options.path) { - params.push('path=' + encodeURIComponent(options.path)); - } - - if (options.author) { - params.push('author=' + encodeURIComponent(options.author)); - } - - if (options.since) { - var since = options.since; - - if (since.constructor === Date) { - since = since.toISOString(); - } - - params.push('since=' + encodeURIComponent(since)); - } - - if (options.until) { - var until = options.until; - - if (until.constructor === Date) { - until = until.toISOString(); - } - - params.push('until=' + encodeURIComponent(until)); - } - - if (options.page) { - params.push('page=' + options.page); - } - - if (options.perpage) { - params.push('per_page=' + options.perpage); - } - - if (params.length > 0) { - url += '?' + params.join('&'); - } - - _request('GET', url, null, cb); - }; - - // Check if a repository is starred. - // -------- - - this.isStarred = function(owner, repository, cb) { - _request('GET', '/user/starred/' + owner + '/' + repository, null, cb); - }; - - // Star a repository. - // -------- - - this.star = function(owner, repository, cb) { - _request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); - }; - - // Unstar a repository. - // -------- - - this.unstar = function(owner, repository, cb) { - _request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); - }; - - // Create a new release - // -------- - - this.createRelease = function(options, cb) { - _request('POST', repoPath + '/releases', options, cb); - }; - - // Edit a release - // -------- - - this.editRelease = function(id, options, cb) { - _request('PATCH', repoPath + '/releases/' + id, options, cb); - }; - - // Get a single release - // -------- - - this.getRelease = function(id, cb) { - _request('GET', repoPath + '/releases/' + id, null, cb); - }; - - // Remove a release - // -------- - - this.deleteRelease = function(id, cb) { - _request('DELETE', repoPath + '/releases/' + id, null, cb); - }; - }; - - // Gists API - // ======= - - Github.Gist = function(options) { - var id = options.id; - var gistPath = '/gists/' + id; - - // Read the gist - // -------- - - this.read = function(cb) { - _request('GET', gistPath, null, cb); - }; - - // Create the gist - // -------- - // { - // "description": "the description for this gist", - // "public": true, - // "files": { - // "file1.txt": { - // "content": "String file contents" - // } - // } - // } - - this.create = function(options, cb) { - _request('POST', '/gists', options, cb); - }; - - // Delete the gist - // -------- - - this.delete = function(cb) { - _request('DELETE', gistPath, null, cb); - }; - - // Fork a gist - // -------- - - this.fork = function(cb) { - _request('POST', gistPath + '/fork', null, cb); - }; - - // Update a gist with the new stuff - // -------- - - this.update = function(options, cb) { - _request('PATCH', gistPath, options, cb); - }; - - // Star a gist - // -------- - - this.star = function(cb) { - _request('PUT', gistPath + '/star', null, cb); - }; - - // Untar a gist - // -------- - - this.unstar = function(cb) { - _request('DELETE', gistPath + '/star', null, cb); - }; - - // Check if a gist is starred - // -------- - - this.isStarred = function(cb) { - _request('GET', gistPath + '/star', null, cb); - }; - }; - - // Issues API - // ========== - - Github.Issue = function(options) { - var path = '/repos/' + options.user + '/' + options.repo + '/issues'; - - this.create = function(options, cb) { - _request('POST', path, options, cb); - }; - - this.list = function(options, cb) { - var query = []; - - Object.keys(options).forEach(function(option) { - query.push(encodeURIComponent(option) + '=' + encodeURIComponent(options[option])); - }); - - _requestAllPages(path + '?' + query.join('&'), !!options.page, cb); - }; - - this.comment = function(issue, comment, cb) { - _request('POST', issue.comments_url, { - body: comment - }, cb); - }; - - this.edit = function(issue, options, cb) { - _request('PATCH', path + '/' + issue, options, cb); - }; - - this.get = function(issue, cb) { - _request('GET', path + '/' + issue, null, cb); - }; - }; - - // Search API - // ========== - - Github.Search = function(options) { - var path = '/search/'; - var query = '?q=' + options.query; - - this.repositories = function(options, cb) { - _request('GET', path + 'repositories' + query, options, cb); - }; - - this.code = function(options, cb) { - _request('GET', path + 'code' + query, options, cb); - }; - - this.issues = function(options, cb) { - _request('GET', path + 'issues' + query, options, cb); - }; - - this.users = function(options, cb) { - _request('GET', path + 'users' + query, options, cb); - }; - }; - - // Rate Limit API - // ========== - - Github.RateLimit = function() { - this.getRateLimit = function(cb) { - _request('GET', '/rate_limit', null, cb); - }; - }; - - return Github; -} - -// Top Level API -// ------- - -Github.getIssues = function(user, repo) { - return new Github.Issue({ - user: user, - repo: repo - }); -}; - -Github.getRepo = function(user, repo) { - if (!repo) { - return new Github.Repository({ - fullname: user - }); - } else { - return new Github.Repository({ - user: user, - name: repo - }); + return fullname; } -}; - -Github.getUser = function() { - return new Github.User(); -}; - -Github.getOrg = function() { - return new Github.Organization(); -}; - -Github.getGist = function(id) { - return new Github.Gist({ - id: id - }); -}; - -Github.getSearch = function(query) { - return new Github.Search({ - query: query - }); -}; - -Github.getRateLimit = function() { - return new Github.RateLimit(); -}; +} -module.exports = Github; +module.exports = GitHub; diff --git a/test/helpers.js b/test/helpers/callbacks.js similarity index 55% rename from test/helpers.js rename to test/helpers/callbacks.js index d85f3f94..bd7d0143 100644 --- a/test/helpers.js +++ b/test/helpers/callbacks.js @@ -1,49 +1,43 @@ -'use strict'; +import expect from 'must'; -var expect = require('must'); -var STANDARD_DELAY = 200; // 200ms between nested calls to the API so things settle +const STANDARD_DELAY = 200; // 200ms between nested calls to the API so things settle -function assertSuccessful(done, cb) { - return function(err, res, xhr) { +export function assertSuccessful(done, cb) { + return function successCallback(err, res, xhr) { try { expect(err).not.to.exist(); expect(res).to.exist(); expect(xhr).to.be.an.object(); if (cb) { - setTimeout(function () { + setTimeout(function() { cb(err, res, xhr); }, STANDARD_DELAY); } else { done(); } - } catch(e) { + } catch (e) { done(e); } }; } -function assertFailure(done, cb) { - return function(err) { +export function assertFailure(done, cb) { + return function failureCallback(err) { try { expect(err).to.exist(); expect(err).to.have.ownProperty('path'); expect(err.request).to.exist(); if (cb) { - setTimeout(function () { + setTimeout(function() { cb(err); }, STANDARD_DELAY); } else { done(); } - } catch(e) { + } catch (e) { done(e); } }; } - -module.exports = { - assertSuccessful: assertSuccessful, - assertFailure: assertFailure -}; diff --git a/test/mocha.opts b/test/mocha.opts new file mode 100644 index 00000000..4944011d --- /dev/null +++ b/test/mocha.opts @@ -0,0 +1,3 @@ +--compilers js:babel-register +--timeout 15000 +--slow 5000 diff --git a/test/test.auth.js b/test/test.auth.js index 09d0cc0b..a24b5dbd 100644 --- a/test/test.auth.js +++ b/test/test.auth.js @@ -1,14 +1,12 @@ -'use strict'; +import expect from 'must'; -var Github = require('../src/github.js'); - -var expect = require('must'); -var testUser = require('./fixtures/user.json'); -var assertSuccessful = require('./helpers').assertSuccessful; -var assertFailure = require('./helpers').assertFailure; +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import {assertSuccessful, assertFailure} from './helpers/callbacks'; describe('Github', function() { - var github, user; + let github; + let user; describe('with authentication', function() { before(function() { @@ -42,7 +40,7 @@ describe('Github', function() { }); it('should read public information', function(done) { - var gist = github.getGist('f1c0f84e53aa6b98ec03'); + let gist = github.getGist('f1c0f84e53aa6b98ec03'); gist.read(function(err, res, xhr) { try { @@ -51,14 +49,13 @@ describe('Github', function() { expect(xhr).to.be.an.object(); done(); - } catch(e) { + } catch (e) { try { if (err && err.request.headers['x-ratelimit-remaining'] === '0') { done(); - return; } - } catch(e2) { + } catch (e2) { done(e); } @@ -86,8 +83,8 @@ describe('Github', function() { it('should fail authentication and return err', function(done) { user.notifications(assertFailure(done, function(err) { - expect(err.error).to.be.equal(401, 'Return 401 status for bad auth'); - expect(err.request.data.message).to.equal('Bad credentials'); + expect(err.status).to.be.equal(401, 'Return 401 status for bad auth'); + expect(err.response.data.message).to.equal('Bad credentials'); done(); })); diff --git a/test/test.gist.js b/test/test.gist.js index 2f8bc8a4..880d42bc 100644 --- a/test/test.gist.js +++ b/test/test.gist.js @@ -1,14 +1,14 @@ -'use strict'; +import expect from 'must'; -var Github = require('../src/github.js'); +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import testGist from './fixtures/gist.json'; +import {assertSuccessful} from './helpers/callbacks'; -var expect = require('must'); -var testUser = require('./fixtures/user.json'); -var testGist = require('./fixtures/gist.json'); -var assertSuccessful = require('./helpers').assertSuccessful; - -describe('Github.Gist', function() { - var gist, gistId, github; +describe('Gist', function() { + let gist; + let gistId; + let github; before(function() { github = new Github({ diff --git a/test/test.issue.js b/test/test.issue.js index 1b8e8058..b8ff0ad1 100644 --- a/test/test.issue.js +++ b/test/test.issue.js @@ -1,13 +1,13 @@ -'use strict'; +import expect from 'must'; -var Github = require('../src/github.js'); +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import {assertSuccessful} from './helpers/callbacks'; -var expect = require('must'); -var testUser = require('./fixtures/user.json'); -var assertSuccessful = require('./helpers').assertSuccessful; - -describe('Github.Issue', function() { - var github, remoteIssues, remoteIssue; +describe('Issue', function() { + let github; + let remoteIssues; + let remoteIssue; before(function() { github = new Github({ @@ -45,15 +45,15 @@ describe('Github.Issue', function() { }); it('should create issue', function(done) { - var issue = { + const newIssue = { title: 'New issue', body: 'New issue body' }; - remoteIssues.create(issue, assertSuccessful(done, function(err, issue) { + remoteIssues.create(newIssue, assertSuccessful(done, function(err, issue) { expect(issue).to.have.own('url'); - expect(issue).to.have.own('title', issue.title); - expect(issue).to.have.own('body', issue.body); + expect(issue).to.have.own('title', newIssue.title); + expect(issue).to.have.own('body', newIssue.body); done(); })); @@ -68,7 +68,7 @@ describe('Github.Issue', function() { }); it('should edit issues title', function(done) { - var newProps = { + const newProps = { title: 'Edited title' }; diff --git a/test/test.org.js b/test/test.org.js index 1c7b1a3a..b687d4c6 100644 --- a/test/test.org.js +++ b/test/test.org.js @@ -1,24 +1,29 @@ -'use strict'; +// jscs:disable requireCamelCaseOrUpperCaseIdentifiers +import expect from 'must'; -var Github = require('../src/github.js'); -var testUser = require('./user.json'); -var github, organization; +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import {assertSuccessful} from './helpers/callbacks'; + +describe('Organization', function() { + let github; + let organization; -describe('Github.Organization', function() { before(function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, auth: 'basic' }); + organization = github.getOrg(); }); it('should create an organisation repo', function(done) { - var repoTest = Math.floor(Math.random() * 100000); - var options = { + const testRepoName = Math.floor(Math.random() * 100000).toString(); + const options = { orgname: testUser.ORGANIZATION, - name: repoTest, + name: testRepoName, description: 'test create organization repo', homepage: 'https://github.com/', private: false, @@ -27,13 +32,10 @@ describe('Github.Organization', function() { has_downloads: true }; - organization.createRepo(options, function(err, res, xhr) { - should.not.exist(err); - xhr.should.be.instanceof(XMLHttpRequest); - res.name.should.equal(repoTest.toString()); - res.full_name.should.equal(testUser.ORGANIZATION + '/' + repoTest.toString()); - + organization.createRepo(options, assertSuccessful(done, function(err, repo) { + expect(repo.name).to.equal(testRepoName); + expect(repo.full_name).to.equal(`${testUser.ORGANIZATION}/${testRepoName}`); done(); - }); + })); }); }); diff --git a/test/test.rate-limit.js b/test/test.rate-limit.js index b3d85fb4..6fa75dc4 100644 --- a/test/test.rate-limit.js +++ b/test/test.rate-limit.js @@ -1,13 +1,12 @@ -'use strict'; +import expect from 'must'; -var Github = require('../src/github.js'); +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import {assertSuccessful} from './helpers/callbacks'; -var expect = require('must'); -var testUser = require('./fixtures/user.json'); -var assertSuccessful = require('./helpers').assertSuccessful; - -describe('Github.RateLimit', function() { - var github, rateLimit; +describe('RateLimit', function() { + let github; + let rateLimit; before(function() { github = new Github({ @@ -21,7 +20,7 @@ describe('Github.RateLimit', function() { it('should get rate limit', function(done) { rateLimit.getRateLimit(assertSuccessful(done, function(err, rateInfo) { - var rate = rateInfo.rate; + const rate = rateInfo.rate; expect(rate).to.be.an.object(); expect(rate).to.have.own('limit'); diff --git a/test/test.repo.js b/test/test.repo.js index e291c000..5e2a780e 100644 --- a/test/test.repo.js +++ b/test/test.repo.js @@ -1,24 +1,24 @@ -'use strict'; - -var Github = require('../src/github.js'); - -var expect = require('must'); -var testUser = require('./fixtures/user.json'); -var loadImage = require('./fixtures/imageBlob'); -var assertSuccessful = require('./helpers').assertSuccessful; -var assertFailure = require('./helpers').assertFailure; - -describe('Github.Repository', function() { - var github, remoteRepo, user, imageB64, imageBlob; - var testRepoName = Math.floor(Math.random() * 100000).toString(); - var v10_4sha = '20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; - var statusUrl = 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; +import expect from 'must'; + +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import loadImage from './fixtures/imageBlob'; +import {assertSuccessful, assertFailure} from './helpers/callbacks'; + +describe('Repository', function() { + let github; + let remoteRepo; + let user; + let imageB64; + let imageBlob; + const testRepoName = Math.floor(Math.random() * 100000).toString(); + const v10SHA = '20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; + const statusUrl = 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; before(function(done) { github = new Github({ username: testUser.USERNAME, - password: testUser.PASSWORD, - auth: 'basic' + password: testUser.PASSWORD }); loadImage(function(b64, blob) { @@ -42,8 +42,8 @@ describe('Github.Repository', function() { }); it('should get blob', function(done) { - remoteRepo.getSha('master', 'README.md', assertSuccessful(done, function(err, sha) { - remoteRepo.getBlob(sha, assertSuccessful(done, function(err, content) { + remoteRepo.getSha('master', 'README.md', assertSuccessful(done, function(err, response) { + remoteRepo.getBlob(response.sha, assertSuccessful(done, function(err, content) { expect(content).to.be.include('# Github.js'); done(); @@ -55,7 +55,7 @@ describe('Github.Repository', function() { remoteRepo.contents('master', '', assertSuccessful(done, function(err, contents) { expect(contents).to.be.an.array(); - var readme = contents.filter(function(content) { + const readme = contents.filter(function(content) { return content.path === 'README.md'; }); @@ -67,7 +67,8 @@ describe('Github.Repository', function() { }); it('should get tree', function(done) { - remoteRepo.getTree('master', assertSuccessful(done, function(err, tree) { + remoteRepo.getTree('master', assertSuccessful(done, function(err, response) { + let {tree} = response; expect(tree).to.be.an.array(); expect(tree.length).to.be.above(0); @@ -100,26 +101,26 @@ describe('Github.Repository', function() { }); it('should list commits with all options', function(done) { - var sinceDate = new Date(2015, 0, 1); - var untilDate = new Date(2016, 0, 20); - var options = { + const since = new Date(2015, 0, 1); + const until = new Date(2016, 0, 20); + const options = { sha: 'master', path: 'test', author: 'AurelioDeRosa', - since: sinceDate, - until: untilDate + since, + until }; remoteRepo.getCommits(options, assertSuccessful(done, function(err, commits) { expect(commits).to.be.an.array(); expect(commits.length).to.be.above(0); - var commit = commits[0]; - var commitDate = new Date(commit.commit.author.date); + const commit = commits[0]; + const commitDate = new Date(commit.commit.author.date); expect(commit).to.have.own('commit'); expect(commit.author).to.have.own('login', 'AurelioDeRosa'); - expect(commitDate.getTime()).to.be.between(sinceDate.getTime(), untilDate.getTime()); + expect(commitDate.getTime()).to.be.between(since.getTime(), until.getTime()); done(); })); }); @@ -129,7 +130,7 @@ describe('Github.Repository', function() { expect(contributors).to.be.an.array(); expect(contributors.length).to.be.above(1); - var contributor = contributors[0]; + const contributor = contributors[0]; expect(contributor).to.have.own('author'); expect(contributor).to.have.own('total'); @@ -139,21 +140,6 @@ describe('Github.Repository', function() { })); }); - it('should show repo collaborators', function(done) { - remoteRepo.collaborators(assertSuccessful(done, function(err, collaborators) { - expect(collaborators).to.be.an.array(); - expect(collaborators).to.have.length(1); - - var collaborator = collaborators[0]; - - expect(collaborator).to.have.own('login', testUser.USERNAME); - expect(collaborator).to.have.own('id'); - expect(collaborator).to.have.own('permissions'); - - done(); - })); - }); - // @TODO repo.branch, repo.pull it('should list repo branches', function(done) { @@ -169,7 +155,7 @@ describe('Github.Repository', function() { }); it('should get commit from repo', function(done) { - remoteRepo.getCommit('master', v10_4sha, assertSuccessful(done, function(err, commit) { + remoteRepo.getCommit('master', v10SHA, assertSuccessful(done, function(err, commit) { expect(commit.message).to.equal('v0.10.4'); expect(commit.author.date).to.equal('2015-03-20T17:01:42Z'); @@ -178,11 +164,11 @@ describe('Github.Repository', function() { }); it('should get statuses for a SHA from a repo', function(done) { - remoteRepo.getStatuses(v10_4sha, assertSuccessful(done, function(err, statuses) { + remoteRepo.getStatuses(v10SHA, assertSuccessful(done, function(err, statuses) { expect(statuses).to.be.an.array(); expect(statuses.length).to.equal(6); - var correctUrls = statuses.every(function(status) { + const correctUrls = statuses.every(function(status) { return status.url === statusUrl; }); @@ -197,7 +183,7 @@ describe('Github.Repository', function() { }); it('should get a repo by fullname', function(done) { - var repoByName = github.getRepo('michael/github'); + const repoByName = github.getRepo('michael/github'); repoByName.show(assertSuccessful(done, function(err, repo) { expect(repo).to.have.own('full_name', 'michael/github'); @@ -206,13 +192,9 @@ describe('Github.Repository', function() { })); }); - it('should test whether user is collaborator', function(done) { - remoteRepo.isCollaborator(testUser.USERNAME, assertSuccessful(done)); - }); - it('should check if the repo is starred', function(done) { - remoteRepo.isStarred('michael', 'github', assertFailure(done, function(err) { - expect(err.error).to.be(404); + remoteRepo.isStarred('michael', 'github', assertSuccessful(done, function(err, result) { + expect(result).to.equal(false); done(); })); @@ -220,27 +202,28 @@ describe('Github.Repository', function() { }); describe('creating/modifiying', function() { - var fileName = 'test.md'; + const fileName = 'test.md'; - var initialText = 'This is a test.'; - var initialMessage = 'Test file create.'; + const initialText = 'This is a test.'; + const initialMessage = 'This is my 44 character long commit message.'; - var updatedText = 'This file has been updated.'; - var updatedMessage = 'Test file update.'; + const updatedText = 'This file has been updated.'; + const updatedMessage = 'This is my 51 character long update commit message.'; - var fileToDelete = 'tmp.md'; - var deleteMessage = 'Removing file'; + const fileToDelete = 'tmp.md'; + const deleteMessage = 'This is my 51 character long delete commit message.'; - var unicodeFileName = '\u4E2D\u6587\u6D4B\u8BD5.md'; - var unicodeText = '\u00A1\u00D3i de m\u00ED, que verg\u00FCenza!'; - var unicodeMessage = 'Such na\u00EFvet\u00E9\u2026'; + const unicodeFileName = '\u4E2D\u6587\u6D4B\u8BD5.md'; + const unicodeText = '\u00A1\u00D3i de m\u00ED, que verg\u00FCenza!'; + const unicodeMessage = 'Such na\u00EFvet\u00E9\u2026'; - var imageFileName = 'image.png'; + const imageFileName = 'image.png'; - var releaseTag = 'foo'; - var releaseName = 'My awesome release'; - var releaseBody = 'Foo bar bazzy baz'; - var sha, releaseId; + const releaseTag = 'foo'; + const releaseName = 'My awesome release'; + const releaseBody = 'This is my 49 character long release description.'; + let sha; + let releaseId; before(function() { user = github.getUser(); @@ -253,7 +236,7 @@ describe('Github.Repository', function() { }); it('should create repo', function(done) { - var repoDef = { + const repoDef = { name: testRepoName }; @@ -264,6 +247,25 @@ describe('Github.Repository', function() { })); }); + it('should show repo collaborators', function(done) { + remoteRepo.collaborators(assertSuccessful(done, function(err, collaborators) { + expect(collaborators).to.be.an.array(); + expect(collaborators).to.have.length(1); + + const collaborator = collaborators[0]; + + expect(collaborator).to.have.own('login', testUser.USERNAME); + expect(collaborator).to.have.own('id'); + expect(collaborator).to.have.own('permissions'); + + done(); + })); + }); + + it('should test whether user is collaborator', function(done) { + remoteRepo.isCollaborator(testUser.USERNAME, assertSuccessful(done)); + }); + it('should write to repo', function(done) { remoteRepo.write('master', fileName, initialText, initialMessage, assertSuccessful(done, function() { remoteRepo.read('master', fileName, assertSuccessful(done, function(err, fileText) { @@ -274,14 +276,21 @@ describe('Github.Repository', function() { })); }); + it('should create a new branch', function(done) { + remoteRepo.branch('master', 'dev', assertSuccessful(done, function(err, branch) { + expect(branch).to.have.property('ref', 'refs/heads/dev'); + expect(branch.object).to.have.property('sha'); + + done(); + })); + }); + it('should write to repo branch', function(done) { - remoteRepo.branch('master', 'dev', assertSuccessful(done, function() { - remoteRepo.write('dev', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { - remoteRepo.read('dev', fileName, assertSuccessful(done, function(err, fileText) { - expect(fileText).to.be(updatedText); + remoteRepo.write('dev', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.read('dev', fileName, assertSuccessful(done, function(err, fileText) { + expect(fileText).to.be(updatedText); - done(); - })); + done(); })); })); }); @@ -300,24 +309,19 @@ describe('Github.Repository', function() { }); it('should submit a pull request', function(done) { - var baseBranch = 'master'; - var headBranch = 'pull-request'; - var pullRequestTitle = 'Test pull request'; - var pullRequestBody = 'This is a test pull request'; - var pr = { - title: pullRequestTitle, - body: pullRequestBody, - base: baseBranch, - head: headBranch - }; - - remoteRepo.branch(baseBranch, headBranch, assertSuccessful(done, function() { - remoteRepo.write(headBranch, fileName, updatedText, updatedMessage, assertSuccessful(done, function() { - remoteRepo.createPullRequest(pr, assertSuccessful(done, function(err, pullRequest) { + const base = 'master'; + const head = 'pull-request'; + const title = 'Test pull request'; + const body = 'This is a test pull request'; + const prSpec = {title, body, base, head}; + + remoteRepo.branch(base, head, assertSuccessful(done, function() { + remoteRepo.write(head, fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.createPullRequest(prSpec, assertSuccessful(done, function(err, pullRequest) { expect(pullRequest).to.have.own('number'); expect(pullRequest.number).to.be.above(0); - expect(pullRequest).to.have.own('title', pullRequestTitle); - expect(pullRequest).to.have.own('body', pullRequestBody); + expect(pullRequest).to.have.own('title', title); + expect(pullRequest).to.have.own('body', body); done(); })); @@ -330,12 +334,12 @@ describe('Github.Repository', function() { }); it('should create ref on repo', function(done) { - remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, sha) { - var refSpec = { - ref: 'refs/heads/new-test-branch', sha: sha + remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, refSpec) { + let newRef = { + ref: 'refs/heads/new-test-branch', + sha: refSpec.object.sha }; - - remoteRepo.createRef(refSpec, assertSuccessful(done)); + remoteRepo.createRef(newRef, assertSuccessful(done)); })); }); @@ -348,15 +352,15 @@ describe('Github.Repository', function() { }); it('should list pulls on repo', function(done) { - var options = { + const filterOpts = { state: 'all', sort: 'updated', direction: 'desc', page: 1, - per_page: 10 + per_page: 10 // jscs:ignore }; - remoteRepo.listPulls(options, assertSuccessful(done, function(err, pullRequests) { + remoteRepo.listPulls(filterOpts, assertSuccessful(done, function(err, pullRequests) { expect(pullRequests).to.be.an.array(); expect(pullRequests).to.have.length(1); @@ -365,7 +369,7 @@ describe('Github.Repository', function() { }); it('should get pull requests on repo', function(done) { - var repo = github.getRepo('michael', 'github'); + const repo = github.getRepo('michael', 'github'); repo.getPull(153, assertSuccessful(done, function(err, pr) { expect(pr).to.have.own('title'); @@ -382,28 +386,20 @@ describe('Github.Repository', function() { })); }); - it('should use repo.delete as an alias for repo.remove', function(done) { - remoteRepo.write('master', fileToDelete, initialText, deleteMessage, assertSuccessful(done, function() { - remoteRepo.delete('master', fileToDelete, assertSuccessful(done)); - })); - }); - it('should write author and committer to repo', function(done) { - var options = { - author: { - name: 'Author Name', email: 'author@example.com' - }, - committer: { - name: 'Committer Name', email: 'committer@example.com' - } + const options = { + author: {name: 'Author Name', email: 'author@example.com'}, + committer: {name: 'Committer Name', email: 'committer@example.com'} }; remoteRepo.write('dev', fileName, initialText, initialMessage, options, assertSuccessful(done, function(e, r) { remoteRepo.getCommit('dev', r.commit.sha, assertSuccessful(done, function(err, commit) { - expect(commit.author.name).to.be('Author Name'); - expect(commit.author.email).to.be('author@example.com'); - expect(commit.committer.name).to.be('Committer Name'); - expect(commit.committer.email).to.be('committer@example.com'); + const author = commit.author; + const committer = commit.committer; + expect(author.name).to.be('Author Name'); + expect(author.email).to.be('author@example.com'); + expect(committer.name).to.be('Committer Name'); + expect(committer.email).to.be('committer@example.com'); done(); })); @@ -425,12 +421,13 @@ describe('Github.Repository', function() { }); it('should pass a regression test for _request (#14)', function(done) { - remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, sha) { - var refSpec = { - ref: 'refs/heads/testing-14', sha: sha + remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, refSpec) { + let newRef = { + ref: 'refs/heads/testing-14', + sha: refSpec.object.sha }; - remoteRepo.createRef(refSpec, assertSuccessful(done, function() { + remoteRepo.createRef(newRef, assertSuccessful(done, function() { // Triggers GET: // https://api.github.com/repos/michael/cmake_cdt7_stalled/git/refs/heads/prose-integration remoteRepo.getRef('heads/master', assertSuccessful(done, function() { @@ -447,7 +444,7 @@ describe('Github.Repository', function() { }); it('should be able to write an image to the repo', function(done) { - var opts = { + const opts = { encode: false }; @@ -475,9 +472,8 @@ describe('Github.Repository', function() { it('should unstar the repo', function(done) { remoteRepo.unstar(testUser.USERNAME, testRepoName, assertSuccessful(done, function() { - remoteRepo.isStarred(testUser.USERNAME, testRepoName, assertFailure(done, function(err) { - expect(err.error).to.be(404); - + remoteRepo.isStarred(testUser.USERNAME, testRepoName, assertSuccessful(done, function(_, isStarred) { + expect(isStarred).to.be(false); done(); })); })); @@ -485,31 +481,30 @@ describe('Github.Repository', function() { it('should fail on broken commit', function(done) { remoteRepo.commit('broken-parent-hash', 'broken-tree-hash', initialMessage, assertFailure(done, function(err) { - expect(err.error).to.be(422); - + expect(err.status).to.be(422); done(); })); }); it('should create a release', function(done) { - var options = { - tag_name: releaseTag, - target_commitish: sha + const releaseDef = { + tag_name: releaseTag, // jscs:ignore + target_commitish: sha // jscs:ignore }; - remoteRepo.createRelease(options, assertSuccessful(done, function(err, res) { + remoteRepo.createRelease(releaseDef, assertSuccessful(done, function(err, res) { releaseId = res.id; done(); })); }); it('should edit a release', function(done) { - var options = { + const releaseDef = { name: releaseName, body: releaseBody }; - remoteRepo.editRelease(releaseId, options, assertSuccessful(done, function(err, release) { + remoteRepo.editRelease(releaseId, releaseDef, assertSuccessful(done, function(err, release) { expect(release).to.have.own('name', releaseName); expect(release).to.have.own('body', releaseBody); diff --git a/test/test.search.js b/test/test.search.js index bb416851..6838b13e 100644 --- a/test/test.search.js +++ b/test/test.search.js @@ -1,12 +1,9 @@ -'use strict'; +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import {assertSuccessful} from './helpers/callbacks'; -var Github = require('../src/github.js'); - -var testUser = require('./fixtures/user.json'); -var assertSuccessful = require('./helpers').assertSuccessful; - -describe('Github.Search', function() { - var github; +describe('Search', function() { + let github; before(function() { github = new Github({ @@ -17,29 +14,37 @@ describe('Github.Search', function() { }); it('should search repositories', function(done) { - var search = github.getSearch('tetris+language:assembly&sort=stars&order=desc'); - var options = null; + let search = github.search({ + q: 'tetris language:assembly', + sort: 'stars', + order: 'desc' + }); + let options = undefined; search.repositories(options, assertSuccessful(done)); }); it('should search code', function(done) { - var search = github.getSearch('addClass+in:file+language:js+repo:jquery/jquery'); - var options = null; + let search = github.search({q: 'addClass in:file language:js repo:jquery/jquery'}); + let options = undefined; search.code(options, assertSuccessful(done)); }); it('should search issues', function(done) { - var search = github.getSearch('windows+label:bug+language:python+state:open&sort=created&order=asc'); - var options = null; + let search = github.search({ + q: 'windows label:bug language:python state:open', + sort: 'created', + order: 'asc' + }); + let options = undefined; search.issues(options, assertSuccessful(done)); }); it('should search users', function(done) { - var search = github.getSearch('tom+repos:%3E42+followers:%3E1000'); - var options = null; + let search = github.search({q: 'tom repos:>42 followers:>1000'}); + let options = undefined; search.users(options, assertSuccessful(done)); }); diff --git a/test/test.user.js b/test/test.user.js index a00e2784..c3e584e0 100644 --- a/test/test.user.js +++ b/test/test.user.js @@ -1,10 +1,8 @@ -'use strict'; +import expect from 'must'; -var Github = require('../src/github.js'); - -var expect = require('must'); -var testUser = require('./fixtures/user.json'); -var assertSuccessful = require('./helpers').assertSuccessful; +import Github from '../src/Github'; +import testUser from './fixtures/user.json'; +import {assertSuccessful} from './helpers/callbacks'; function assertArray(done) { return assertSuccessful(done, function(err, result) { @@ -13,8 +11,9 @@ function assertArray(done) { }); } -describe('Github.User', function() { - var github, user; +describe('User', function() { + let github; + let user; before(function() { github = new Github({ @@ -30,14 +29,14 @@ describe('Github.User', function() { }); it('should get user repos with options', function(done) { - var options = { + const filterOpts = { type: 'owner', sort: 'updated', per_page: 90, // jscs:ignore page: 10 }; - user.repos(options, assertArray(done)); + user.repos(filterOpts, assertArray(done)); }); it('should get user orgs', function(done) { @@ -53,14 +52,14 @@ describe('Github.User', function() { }); it('should get user notifications with options', function(done) { - var options = { + const filterOpts = { all: true, participating: true, since: '2015-01-01T00:00:00Z', before: '2015-02-01T00:00:00Z' }; - user.notifications(options, assertArray(done)); + user.notifications(filterOpts, assertArray(done)); }); it('should show user', function(done) { @@ -72,14 +71,14 @@ describe('Github.User', function() { }); it('should show user\'s repos with options', function(done) { - var options = { + const filterOpts = { type: 'owner', sort: 'updated', per_page: 90, // jscs:ignore page: 1 }; - user.userRepos('aendrew', options, assertArray(done)); + user.userRepos('aendrew', filterOpts, assertArray(done)); }); it('should show user\'s starred repos', function(done) { From 7da4d28c510526ba1597f12a060a414173a685f5 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 26 Apr 2016 07:48:03 -0500 Subject: [PATCH 087/217] docs: Update Readme and Changelog --- CHANGELOG.md | 58 +++++++++------------------------------------------- README.md | 6 ++---- 2 files changed, 12 insertions(+), 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d61c1c43..464524fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,54 +3,16 @@ ### 1.0.0 Complete rewrite in ES2015. -* Renamed many of the APIs for better internal consistency. * Promise-ified the API -* Modularized code to potentially allow for custom builds -* Refactored tests to run primarially in mocha * Auto-generation of documentation +* Modularized codebase +* Refactored tests to run primarially in mocha -### 0.10.X - -Create and delete repositories -Repos - getCommit - -### 0.9.X - -Paging (introduced at tail end of 0.8.X, note: different callbacks for success & errors now) - -### 0.8.X - -Fixes and tweaks, simpler auth, CI tests, node.js support, Raw+JSON, UTF8, plus: -Users - follow, unfollow, get info, notifications -Gists - create -Issues - get -Repos - createRepo, deleteRepo, createBranch, star, unstar, isStarred, getCommits, listTags, listPulls, getPull, compare -Hooks - listHooks, getHook, createHook, editHook, deleteHook - -### 0.7.X - -Switched to a native `request` implementation (thanks @mattpass). Adds support for GitHub gists, forks and pull requests. - -### 0.6.X - -Adds support for organizations and fixes an encoding issue. - -### 0.5.X - -Smart caching of latest commit sha. - -### 0.4.X - -Added support for [OAuth](http://developer.github.com/v3/oauth/). - -### 0.3.X - -Support for Moving and removing files. - -### 0.2.X - -Consider commit messages. - -### 0.1.X - -Initial version. +#### Breaking changes +* Search API no longer takes a string it now takes an object with properties `q`, `sort`, and `order` to make + the parts of the query easier to grok and to better match GitHub's API +* `Repository.getSha` now returns the same data as GitHub's API. If the reqeusted object is not a directory then the + response will contain a property `SHA`, and if the reqeusted object is a directory then the contents of the + directory are `stat`ed +* `Repository.getRef` now returns the `refspec` from GitHub's API. +* `Repository.delete` has been removed diff --git a/README.md b/README.md index 3a5b2090..6e35c4ca 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,11 @@ Github.js provides a minimal higher-level wrapper around Github's API. It was co [Prose][prose], a content editor for GitHub. ## Installation -Github.js is available from `npm` or `bower`. +Github.js is available from `npm` or (soon) [cdnjs][cdnjs]. ``` npm install github-api ``` -``` -bower install github-api -``` ## Compatibility @@ -40,6 +37,7 @@ as well. In the meantime, we recommend you to take a look at other projects of t **TODO** +[cdnjs]: https://cdnjs.com/ [codecov]: https://codecov.io/github/michael/github?branch=master [travis-ci]: https://travis-ci.org/michael/github [gitter]: https://gitter.im/michael/github From efffc70efcab4d511d45d76232b552f3ed54a99b Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 26 Apr 2016 07:48:35 -0500 Subject: [PATCH 088/217] chore: Update infrastructure and rename/move js files --- .editorconfig | 2 +- .eslintrc | 26 ++++ .gitignore | 9 +- .jscsrc | 146 ++---------------- .jsdoc.json | 23 +++ .jshintrc | 65 -------- .travis.yml | 4 +- gulpfile.babel.js | 87 +++++++++++ gulpfile.js | 113 -------------- {src => lib}/Gist.js | 0 {src => lib}/Issue.js | 0 {src => lib}/Organization.js | 0 {src => lib}/Ratelimit.js | 0 {src => lib}/Repository.js | 0 {src => lib}/Requestable.js | 0 {src => lib}/Search.js | 0 {src => lib}/User.js | 0 {src => lib}/github.js | 0 test/mocha.opts => mocha.opts | 0 package.json | 65 +++++--- test/.eslintrc | 7 + test/.jshintrc | 9 -- test/{test.auth.js => auth.spec.js} | 0 test/{test.gist.js => gist.spec.js} | 0 test/{test.issue.js => issue.spec.js} | 0 test/{test.org.js => organization.spec.js} | 0 ...{test.rate-limit.js => rate-limit.spec.js} | 0 test/{test.repo.js => repository.spec.js} | 0 test/{test.search.js => search.spec.js} | 0 test/{test.user.js => user.spec.js} | 0 30 files changed, 207 insertions(+), 349 deletions(-) create mode 100644 .eslintrc create mode 100644 .jsdoc.json delete mode 100644 .jshintrc create mode 100644 gulpfile.babel.js delete mode 100644 gulpfile.js rename {src => lib}/Gist.js (100%) rename {src => lib}/Issue.js (100%) rename {src => lib}/Organization.js (100%) rename {src => lib}/Ratelimit.js (100%) rename {src => lib}/Repository.js (100%) rename {src => lib}/Requestable.js (100%) rename {src => lib}/Search.js (100%) rename {src => lib}/User.js (100%) rename {src => lib}/github.js (100%) rename test/mocha.opts => mocha.opts (100%) create mode 100644 test/.eslintrc delete mode 100644 test/.jshintrc rename test/{test.auth.js => auth.spec.js} (100%) rename test/{test.gist.js => gist.spec.js} (100%) rename test/{test.issue.js => issue.spec.js} (100%) rename test/{test.org.js => organization.spec.js} (100%) rename test/{test.rate-limit.js => rate-limit.spec.js} (100%) rename test/{test.repo.js => repository.spec.js} (100%) rename test/{test.search.js => search.spec.js} (100%) rename test/{test.user.js => user.spec.js} (100%) diff --git a/.editorconfig b/.editorconfig index 321b598f..693a0400 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[*.yml] +[*.yml,package.json] indent_size = 2 [*.md] diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..5a061f61 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,26 @@ +{ + "extends": "eslint:recommended", + + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + + "rules": { + "no-bitwise": 1, + "eqeqeq": 2, + "guard-for-in": 2, + "no-extend-native": 2 + }, + + "env": { + "browser": true, + "node": true + }, + + "globals": { + "require": false, + "define": false, + "escape": false + } +} diff --git a/.gitignore b/.gitignore index 23179d4d..ca27d6c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ -.DS_Store -.idea -node_modules/ +docs/ +dist/ coverage/ +node_modules/ +.nyc_output/ +.DS_Store +.idea .zuulrc npm-debug.log sauce.json diff --git a/.jscsrc b/.jscsrc index c9ed804b..0a7963d2 100644 --- a/.jscsrc +++ b/.jscsrc @@ -1,142 +1,16 @@ { - "disallowDanglingUnderscores": false, - "disallowIdentifierNames": [], - "disallowImplicitTypeConversion": [], - "disallowKeywordsOnNewLine": [ - "catch", - "else" - ], - "disallowKeywords": [ - "void", - "with" - ], - "disallowMixedSpacesAndTabs": true, - "disallowMultipleLineBreaks": true, - "disallowMultipleLineStrings": true, - "disallowMultipleSpaces": true, - "disallowMultipleVarDecl": "exceptUndefined", - "disallowNewlineBeforeBlockStatements": true, - "disallowPaddingNewlinesBeforeKeywords": [ - "case", - "typeof" - ], - "disallowPaddingNewlinesInBlocks": true, - "disallowQuotedKeysInObjects": true, - "disallowSpaceAfterKeywords": [ - "catch", - "for", - "switch", - "while" - ], - "disallowSpaceAfterObjectKeys": true, - "disallowSpaceAfterPrefixUnaryOperators": true, - "disallowSpaceBeforePostfixUnaryOperators": true, - "disallowSpacesInCallExpression": true, - "disallowSpacesInsideParentheses": true, - "disallowTrailingComma": true, - "disallowTrailingWhitespace": true, - "disallowYodaConditions": true, + "preset": "google", + + "disallowVar": true, + "jsDoc": { + "checkParamExistence": true, + "checkParamNames": true, + "checkTypes": true, + "requireParamTypes": true, + "requireHyphenBeforeDescription": true, + }, "maximumLineLength": 120, - "requireBlocksOnNewline": true, - "requireCamelCaseOrUpperCaseIdentifiers": false, - "requireCapitalizedComments": { - "allExcept": [ - "exported", - "global", - "jshint" - ] - }, - "requireCapitalizedConstructors": true, - "requireCommaBeforeLineBreak": true, - "requireCurlyBraces": [ - "catch", - "do", - "else", - "for", - "if", - "try", - "while" - ], - "requireDollarBeforejQueryAssignment": true, - "requireDotNotation": true, - "requireKeywordsOnNewLine": [ - "break", - "case", - "default" - ], - "requireLineBreakAfterVariableAssignment": true, - "requireOperatorBeforeLineBreak": true, - "requirePaddingNewLineAfterVariableDeclaration": true, - "requirePaddingNewLinesAfterBlocks": { - "allExcept": [ - "inArrayExpressions", - "inCallExpressions", - "inProperties" - ] - }, - "requirePaddingNewLinesAfterUseStrict": true, - "requirePaddingNewLinesBeforeExport": true, - "requirePaddingNewlinesBeforeKeywords": [ - "do", - "for", - "function", - "if", - "return", - "switch", - "try", - "void", - "while", - "with" - ], - "requirePaddingNewLinesBeforeLineComments": { - "allExcept": "firstAfterCurly" - }, - "requirePaddingNewLinesInObjects": true, - "requireParenthesesAroundIIFE": true, - "requireSemicolons": true, - "requireSpaceAfterBinaryOperators": true, - "requireSpaceAfterKeywords": [ - "case", - "do", - "else", - "if", - "return", - "try", - "typeof" - ], "requireSpaceAfterLineComment": true, - "requireSpaceBeforeBinaryOperators": true, - "requireSpaceBeforeBlockStatements": true, - "requireSpaceBeforeKeywords": [ - "catch", - "else" - ], - "requireSpaceBeforeObjectValues": true, - "requireSpaceBetweenArguments": true, - "requireSpacesInAnonymousFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInConditionalExpression": true, - "requireSpacesInForStatement": true, - "requireSpacesInFunctionDeclaration": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInFunction": { - "beforeOpeningCurlyBrace": true - }, - "requireSpacesInNamedFunctionExpression": { - "beforeOpeningCurlyBrace": true - }, "safeContextKeyword": ["that"], - "validateAlignedFunctionParameters": true, "validateIndentation": 3, - "validateLineBreaks": "LF", - "validateNewlineAfterArrayElements": { - "maximum": 3 - }, - "validateParameterSeparator": ", ", - "validateQuoteMarks": "'" } diff --git a/.jsdoc.json b/.jsdoc.json new file mode 100644 index 00000000..62df38bb --- /dev/null +++ b/.jsdoc.json @@ -0,0 +1,23 @@ +{ + "tags": { + "dictionaries": ["jsdoc"] + }, + "source": { + "include": ["src", "package.json", "README.md"], + "includePattern": ".js$", + "excludePattern": "(node_modules/|docs)" + }, + "plugins": [ + "plugins/markdown" + ], + "templates": { + "cleverLinks": false, + "monospaceLinks": true + }, + "opts": { + "destination": "./docs/", + "encoding": "utf8", + "recurse": true, + "template": "./node_modules/minami" + } +} diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 509fef3c..00000000 --- a/.jshintrc +++ /dev/null @@ -1,65 +0,0 @@ -{ - "maxerr" : 50, - - // Enforcing - "bitwise" : true, - "camelcase" : false, - "curly" : false, - "eqeqeq" : true, - "forin" : true, - "freeze" : true, - "immed" : false, - "indent" : 2, - "latedef" : false, - "newcap" : false, - "noarg" : true, - "noempty" : true, - "nonbsp" : true, - "nonew" : false, - "plusplus" : false, - "quotmark" : false, - "undef" : true, - "unused" : true, - "strict" : true, - "maxparams" : false, - "maxdepth" : false, - "maxstatements" : false, - "maxcomplexity" : false, - "maxlen" : false, - - // Relaxing - "asi" : false, - "boss" : false, - "debug" : false, - "eqnull" : false, - "es5" : false, - "esnext" : false, - "moz" : false, - "evil" : false, - "expr" : false, - "funcscope" : false, - "globalstrict" : false, - "iterator" : false, - "lastsemic" : false, - "laxbreak" : false, - "laxcomma" : false, - "loopfunc" : false, - "multistr" : false, - "noyield" : false, - "notypeof" : false, - "proto" : false, - "scripturl" : false, - "shadow" : false, - "sub" : false, - "supernew" : false, - "validthis" : false, - - "browser" : true, - "devel" : true, - "node" : true, - - "globals" : { - "require" : false, - "define" : false - } -} diff --git a/.travis.yml b/.travis.yml index 67df9cb4..c15e8047 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,9 +13,9 @@ cache: - node_modules before_install: - - npm i -g npm@^3.3.0 + - npm install -g npm@latest script: - gulp lint - gulp test:mocha - - npm run codecov + # - npm run codecov # disabled temporarialy while I work out how to generate accurate coverage of ES2015 code diff --git a/gulpfile.babel.js b/gulpfile.babel.js new file mode 100644 index 00000000..6b92e2c2 --- /dev/null +++ b/gulpfile.babel.js @@ -0,0 +1,87 @@ +import gulp from 'gulp'; +import jscs from 'gulp-jscs'; +import eslint from 'gulp-eslint'; +import stylish from 'gulp-jscs-stylish'; + +import babel from 'gulp-babel'; +import rename from 'gulp-rename'; + +import browserify from 'browserify'; +import buffer from 'vinyl-buffer'; +import del from 'del'; +import path from 'path'; +import {Promise} from 'es6-promise'; +import source from 'vinyl-source-stream'; +import sourcemaps from 'gulp-sourcemaps'; +import uglify from 'gulp-uglify'; + +const ALL_SOURCES = [ + path.join(__dirname, '/*.js'), + path.join(__dirname, '/src/*.js'), + path.join(__dirname, '/test/*.js') +]; + +gulp.task('lint', function() { + const opts = { + base: './' + }; + return gulp.src(ALL_SOURCES, opts) + .pipe(eslint()) + .pipe(jscs()) + .pipe(stylish.combineWithHintResults()) + .pipe(stylish()) + ; +}); + +gulp.task('clean', function() { + return Promise.all([del('dist/'), del('coverage/')]); +}); + +const browserifyConfig = { + debug: true, + entries: 'src/Github.js', + standalone: 'Github' +}; +gulp.task('build', function() { + browserify(browserifyConfig) + .transform('babelify') + .bundle() + .pipe(source('Github.js')) + .pipe(buffer()) + .pipe(sourcemaps.init({ + loadMaps: true + })) + .pipe(uglify()) + .pipe(rename({ + extname: '.bundle.min.js' + })) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist')) + ; + + browserify(browserifyConfig) + .transform('babelify') + .bundle() + .pipe(source('Github.js')) + .pipe(buffer()) + .pipe(sourcemaps.init({ + loadMaps: true + })) + .pipe(rename({ + extname: '.bundle.js' + })) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist')) + ; + + return gulp.src('src/*.js') + .pipe(babel()) + .pipe(sourcemaps.init()) + .pipe(sourcemaps.write('.')) + .pipe(gulp.dest('dist/components')) + ; +}); + +gulp.task('default', ['clean'], function() { + gulp.start('lint', 'test:mocha', 'build'); +}); diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 801abddc..00000000 --- a/gulpfile.js +++ /dev/null @@ -1,113 +0,0 @@ -'use strict'; - -var gulp = require('gulp'); - -var babel = require('gulp-babel'); -var istanbul = require('gulp-istanbul'); -var jscs = require('gulp-jscs'); -var jshint = require('gulp-jshint'); - -var mocha = require('gulp-mocha'); -var rename = require('gulp-rename'); -var stylish = require('gulp-jscs-stylish'); - -var browserify = require('browserify'); -var buffer = require('vinyl-buffer'); -var del = require('del'); -var path = require('path'); -var Promise = require('es6-promise').Promise; -var source = require('vinyl-source-stream'); -var sourcemaps = require('gulp-sourcemaps'); -var uglify = require('gulp-uglify'); - -gulp.task('lint', function() { - var sources = [ - path.join(__dirname, '/*.js'), - path.join(__dirname, '/src/*.js'), - path.join(__dirname, '/test/*.js') - ]; - var opts = { - base: './' - }; - - return gulp.src(sources, opts) - .pipe(jshint()) - .pipe(jscs()) - .pipe(stylish.combineWithHintResults()) - .pipe(jscs.reporter()) - .pipe(jshint.reporter('jshint-stylish')) - .pipe(gulp.dest('.')) - ; -}); - -gulp.task('coverage', function() { - return gulp.src('src/**/*.js') - .pipe(istanbul()) - .pipe(istanbul.hookRequire()) - ; -}); - -gulp.task('test:mocha', ['coverage'], function() { - var srcOpts = { - read: false - }; - var mochaOpts = { - timeout: 30000, - slow: 5000 - }; - - return gulp.src('test/test.*.js', srcOpts) - .pipe(mocha(mochaOpts)) - .pipe(istanbul.writeReports()) - ; -}); - -gulp.task('clean', function() { - return Promise.all([del('dist/*'), del('coverage/*')]); -}); - -gulp.task('build', function() { - var bundler = browserify({ - debug: true, - entries: 'src/github.js', - standalone: 'Github' - }); - - bundler - .transform('babelify') - .bundle() - .pipe(source('github.js')) - .pipe(buffer()) - .pipe(sourcemaps.init({ - loadMaps: true - })) - .pipe(uglify()) - .pipe(rename({ - extname: '.bundle.min.js' - })) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')) - ; - - gulp.src('src/github.js') - .pipe(babel()) - .pipe(sourcemaps.init()) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')) - ; - - return gulp.src('src/github.js') - .pipe(babel()) - .pipe(sourcemaps.init()) - .pipe(rename({ - extname: '.min.js' - })) - .pipe(uglify()) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')) - ; -}); - -gulp.task('default', ['clean'], function() { - gulp.start('lint', 'test:mocha', 'build'); -}); diff --git a/src/Gist.js b/lib/Gist.js similarity index 100% rename from src/Gist.js rename to lib/Gist.js diff --git a/src/Issue.js b/lib/Issue.js similarity index 100% rename from src/Issue.js rename to lib/Issue.js diff --git a/src/Organization.js b/lib/Organization.js similarity index 100% rename from src/Organization.js rename to lib/Organization.js diff --git a/src/Ratelimit.js b/lib/Ratelimit.js similarity index 100% rename from src/Ratelimit.js rename to lib/Ratelimit.js diff --git a/src/Repository.js b/lib/Repository.js similarity index 100% rename from src/Repository.js rename to lib/Repository.js diff --git a/src/Requestable.js b/lib/Requestable.js similarity index 100% rename from src/Requestable.js rename to lib/Requestable.js diff --git a/src/Search.js b/lib/Search.js similarity index 100% rename from src/Search.js rename to lib/Search.js diff --git a/src/User.js b/lib/User.js similarity index 100% rename from src/User.js rename to lib/User.js diff --git a/src/github.js b/lib/github.js similarity index 100% rename from src/github.js rename to lib/github.js diff --git a/test/mocha.opts b/mocha.opts similarity index 100% rename from test/mocha.opts rename to mocha.opts diff --git a/package.json b/package.json index 30c2abfc..d1d3ed13 100644 --- a/package.json +++ b/package.json @@ -1,46 +1,78 @@ { "name": "github-api", "version": "0.11.2", + "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "src/github.js", + "contributors": [ + "Ændrew Rininsland (http://www.aendrew.com)", + "Aurelio De Rosa (http://www.audero.it/)", + "Clay Reimann (http://clayreimann.me)", + "Michael Aufreiter (http://substance.io)" + ], + "readmeFilename": "README.md", + "scripts": { + "clean": "gulp clean", + "build": "gulp build", + "test": "mocha --opts ./mocha.opts test/*.spec.js", + "test-verbose": "DEBUG=github* mocha test/*.spec.js", + "lint": "gulp lint", + "codecov": "node_modules/.bin/codecov", + "show-coverage-html": "open coverage/lcov-report/index.html", + "generate-docs": "node_modules/.bin/jsdoc -c .jsdoc.json --verbose" + }, + "babel": { + "presets": [ + "es2015" + ], + "plugins": [ + [ + "transform-es2015-modules-umd", + { + "globals": { + "es6-promise": "Promise" + } + } + ] + ], + "env": { + "development": { + "sourceMaps": "inline" + } + } + }, "dependencies": { "axios": "https://github.com/github-tools/axios.git", - "base-64": "^0.1.0", "es6-promise": "^3.0.2", + "js-base64": "^2.1.9", "utf8": "^2.1.1" }, "devDependencies": { + "babel-core": "^6.7.7", "babel-plugin-transform-es2015-modules-umd": "^6.5.0", "babel-preset-es2015": "^6.5.0", + "babel-register": "^6.7.2", "babelify": "^7.2.0", "browserify": "^13.0.0", - "browserify-istanbul": "^0.2.1", "codecov": "^1.0.1", "del": "^2.2.0", "gulp": "^3.9.0", "gulp-babel": "^6.1.2", - "gulp-istanbul": "^0.10.3", + "gulp-eslint": "^2.0.0", "gulp-jscs": "^3.0.2", "gulp-jscs-stylish": "^1.3.0", "gulp-jshint": "^2.0.0", - "gulp-mocha": "^2.2.0", "gulp-rename": "^1.2.2", "gulp-sourcemaps": "^1.6.0", "gulp-uglify": "^1.5.1", - "istanbul": "^0.4.2", - "jshint": "^2.9.1", - "jshint-stylish": "^2.1.0", + "istanbul": "^0.4.3", + "jsdoc": "^3.4.0", + "minami": "^1.1.1", "mocha": "^2.3.4", "must": "^0.13.1", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" }, - "scripts": { - "test": "gulp test && gulp lint", - "lint": "gulp lint", - "codecov": "node_modules/.bin/codecov", - "show-coverage-html": "open coverage/lcov-report/index.html" - }, "repository": { "type": "git", "url": "git://github.com/michael/github.git" @@ -49,13 +81,6 @@ "github", "api" ], - "contributors": [ - "Ændrew Rininsland (http://www.aendrew.com)", - "Aurelio De Rosa (http://www.audero.it/)", - "Michael Aufreiter (http://substance.io)" - ], - "license": "BSD-3-Clause-Clear", - "readmeFilename": "README.md", "gitHead": "aa8aa3c8cd5ce5240373d4fd1d06a7ab4af41a36", "bugs": { "url": "https://github.com/michael/github/issues" diff --git a/test/.eslintrc b/test/.eslintrc new file mode 100644 index 00000000..73d8d9b7 --- /dev/null +++ b/test/.eslintrc @@ -0,0 +1,7 @@ +{ + "extends": "../.eslintrc", + + "env": { + "mocha": true + } +} diff --git a/test/.jshintrc b/test/.jshintrc deleted file mode 100644 index 910bdea2..00000000 --- a/test/.jshintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "browser": true, - "mocha": true, - "node": true, - "globals": { - "require": false, - "define": false - } -} diff --git a/test/test.auth.js b/test/auth.spec.js similarity index 100% rename from test/test.auth.js rename to test/auth.spec.js diff --git a/test/test.gist.js b/test/gist.spec.js similarity index 100% rename from test/test.gist.js rename to test/gist.spec.js diff --git a/test/test.issue.js b/test/issue.spec.js similarity index 100% rename from test/test.issue.js rename to test/issue.spec.js diff --git a/test/test.org.js b/test/organization.spec.js similarity index 100% rename from test/test.org.js rename to test/organization.spec.js diff --git a/test/test.rate-limit.js b/test/rate-limit.spec.js similarity index 100% rename from test/test.rate-limit.js rename to test/rate-limit.spec.js diff --git a/test/test.repo.js b/test/repository.spec.js similarity index 100% rename from test/test.repo.js rename to test/repository.spec.js diff --git a/test/test.search.js b/test/search.spec.js similarity index 100% rename from test/test.search.js rename to test/search.spec.js diff --git a/test/test.user.js b/test/user.spec.js similarity index 100% rename from test/test.user.js rename to test/user.spec.js From 10523ca97c6c1c96937e025aea79800a884ab66b Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 26 Apr 2016 21:34:08 -0500 Subject: [PATCH 089/217] feature: refactor API to be more uniform * Update npm for publishing * Update changelog to reflect the breaking changes * Update travis.yml to properly run tests * Update jsdoc config --- .babelrc | 10 -- .editorconfig | 2 +- .gitignore | 3 - .jsdoc.json | 2 +- .npmignore | 6 + .travis.yml | 36 +++-- CHANGELOG.md | 52 ++++++- README.md | 83 +++++++++-- gulpfile.babel.js | 102 +++++++------ lib/Gist.js | 22 +-- lib/{github.js => GitHub.js} | 14 +- lib/Issue.js | 30 ++-- lib/Organization.js | 20 ++- lib/{Ratelimit.js => RateLimit.js} | 0 lib/Repository.js | 228 +++++++++++++---------------- lib/Requestable.js | 12 +- lib/Search.js | 14 +- lib/User.js | 124 +++++++--------- package.json | 20 ++- test/auth.spec.js | 6 +- test/dist.spec/index.html | 31 ++++ test/gist.spec.js | 2 +- test/helpers/callbacks.js | 13 +- test/helpers/getTestRepoName.js | 4 + test/issue.spec.js | 18 +-- test/organization.spec.js | 64 +++++--- test/rate-limit.spec.js | 2 +- test/repository.spec.js | 125 ++++++++-------- test/search.spec.js | 10 +- test/user.spec.js | 54 ++----- 30 files changed, 623 insertions(+), 486 deletions(-) delete mode 100644 .babelrc create mode 100644 .npmignore rename lib/{github.js => GitHub.js} (82%) rename lib/{Ratelimit.js => RateLimit.js} (100%) create mode 100644 test/dist.spec/index.html create mode 100644 test/helpers/getTestRepoName.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index cb4b32ad..00000000 --- a/.babelrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "presets": ["es2015"], - "plugins": [ - ["transform-es2015-modules-umd", { - "globals": { - "es6-promise": "Promise" - } - }] - ] -} diff --git a/.editorconfig b/.editorconfig index 693a0400..a5a6e6eb 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[*.yml,package.json] +[{*.yml,package.json}] indent_size = 2 [*.md] diff --git a/.gitignore b/.gitignore index ca27d6c8..1f5a1c95 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,7 @@ docs/ dist/ coverage/ node_modules/ -.nyc_output/ .DS_Store -.idea -.zuulrc npm-debug.log sauce.json diff --git a/.jsdoc.json b/.jsdoc.json index 62df38bb..a4378ffb 100644 --- a/.jsdoc.json +++ b/.jsdoc.json @@ -3,7 +3,7 @@ "dictionaries": ["jsdoc"] }, "source": { - "include": ["src", "package.json", "README.md"], + "include": ["lib/", "package.json", "README.md"], "includePattern": ".js$", "excludePattern": "(node_modules/|docs)" }, diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000..15fff57d --- /dev/null +++ b/.npmignore @@ -0,0 +1,6 @@ +docs/ +coverage/ +node_modules/ + +.DS_Store +sauce.json diff --git a/.travis.yml b/.travis.yml index c15e8047..48cb5941 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,21 +1,27 @@ language: node_js - -sudo: false - node_js: - - "5.7" - - "4.3" - - "0.12" - - "0.10" - + - '5' + - '4' + - '0.12' + - '0.10' cache: directories: - node_modules - -before_install: - - npm install -g npm@latest - +before_install: npm install -g npm@latest +before_script: + - npm run lint + # - npm run build # will need this when we do sauce testing of compiled files script: - - gulp lint - - gulp test:mocha - # - npm run codecov # disabled temporarialy while I work out how to generate accurate coverage of ES2015 code + - npm test + # - npm run test-dist # test the compiled files +# after_success: +# - npm run codecov # disabled temporarialy while I work out how to generate accurate coverage of ES2015 code +before_deploy: + - npm run build +deploy: + provider: npm + skip_cleanup: true + on: + tags: true + api_key: + secure: TZHqJ9Kh2Qf0GAVDjEOQ01Ez6rGMYHKwVLOKTbnb7nSzF7iiGNT4UwzvYawm0T9p1k7X1WOqW3l7OEbIwoKl7/9azT4BBJm7qUMRfB9Zio5cL3rKubJVz7+LEEIW4iBeDWLanhUDgy9BO2JKCt8bfp/U2tltgXtu9Fm/UFPALI8= diff --git a/CHANGELOG.md b/CHANGELOG.md index 464524fd..075c2cdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,51 @@ Complete rewrite in ES2015. * Promise-ified the API * Auto-generation of documentation * Modularized codebase -* Refactored tests to run primarially in mocha +* Refactored tests to run primarily in mocha #### Breaking changes -* Search API no longer takes a string it now takes an object with properties `q`, `sort`, and `order` to make - the parts of the query easier to grok and to better match GitHub's API -* `Repository.getSha` now returns the same data as GitHub's API. If the reqeusted object is not a directory then the - response will contain a property `SHA`, and if the reqeusted object is a directory then the contents of the - directory are `stat`ed +Most of the breaking changes are just methods that got renamed. The changes to `User` and `Organization` are deeper +changes that now scope a particular `User` or `Organization` to the entity they were instantiated with. You will need +separate `User`s to query data about different user accounts. + +* `Github.getOrg` → `Github.getOrganization` and requires an organization name. +* `Github.getUser` now requires a username. +* `Issue.comment` → `Issue.createIssueComment` +* `Issue.create` → `Issue.createIssue` +* `Issue.edit` → `Issue.editIssue` +* `Issue.get` → `Issue.getIssue` +* `Issue.list` → `Issue.listIssues` +* `Repository.branch` → `Repository.createBranch` +* `Repository.collaborators` → `Repository.getCollaborators` +* `Repository.compare` → `Repository.compareBranches` +* `Repository.contents` → `Repository.getContents` and now takes an argument for the content type +* `Repository.delete` has been removed. +* `Repository.editHook` → `Repository.updateHook` +* `Repository.editRelease` → `Repository.updateRelease` +* `Repository.getCommit` no longer takes a branch as the first argument +* `Repository.getPull` → `Repository.getPullRequest` * `Repository.getRef` now returns the `refspec` from GitHub's API. -* `Repository.delete` has been removed +* `Repository.getSha` now returns the same data as GitHub's API. If the reqeusted object is not a directory then the + response will contain a property `SHA`, and if the reqeusted object is a directory then the contents of the directory + are `stat`ed. +* `Repository.getStatuses` → `Repository.listStatuses` +* `Repository.listPulls` → `Repository.listPullRequests` +* `Repository.postBlob` → `Repository.createBlob` +* `Repository.postTree` → `Repository.createTree` +* `Repository.read` remove in favor of `Repository.getContents` +* `Repository.remove` → `Repository.deleteFile` +* `Repository.show` → `Repository.getDetails` +* `Repository.write` → `Repository.writeFile` +* `Search.code` → `Search.forCode` +* `Search.issues` → `Search.forIssues` +* `Search.repositories` → `Search.forRepositories` +* `Search.users` → `Search.forUsers` +* The Search API no longer takes a string, it now takes an object with properties `q`, `sort`, and `order` to make the + parts of the query easier to grok and to better match GitHub's API. +* `User.gists` → `User.getGists` +* `User.notifications` → `User.getNotifications` +* `User.orgRepos` → `Organization.getRepos` +* `User.orgs` → `User.getOrgs` +* `User.repos` → `User.getRepos` +* `User.show` → `User.getProfile` and no longer takes filtering options +* `User.userStarred` → `User.getStarredRepos` diff --git a/README.md b/README.md index 6e35c4ca..478dc29a 100644 --- a/README.md +++ b/README.md @@ -17,15 +17,11 @@ npm install github-api ``` ## Compatibility - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/githubjs.svg)](https://saucelabs.com/u/githubjs) - -**Note**: Starting from version 0.10.8, Github.js supports **Internet Explorer 9**. However, the underlying methodology -used under the hood to perform CORS requests (the `XDomainRequest` object), [has limitations](xhr-link). -In particular, requests must be targeted to the same scheme as the hosting page. This means that if a page is at -http://example.com, your target URL must also begin with HTTP. Similarly, if your page is at https://example.com, then -your target URL must also begin with HTTPS. For this reason, if your requests are sent to the GitHub API (the default), -which are served via HTTPS, your page must use HTTPS too. +Github.js is tested on Node: +* 0.10 +* 0.12 +* 4.x +* 5.x ## GitHub Tools @@ -33,9 +29,74 @@ The team behind Github.js has created a whole organization, called [GitHub Tools dedicated to GitHub and its API. In the near future this repository could be moved under the GitHub Tools organization as well. In the meantime, we recommend you to take a look at other projects of the organization. -## Example +## Samples + +```javascript +/* + Data can be retrieved from the API either using callbacks (as in versions < 1.0) + or using a new promise-based API. For now the promise-based API just returns the + raw HTTP request promise; this might change in the next version. + */ +var GitHub = require('github-api'); + +// unauthenticated client +var gh = new GitHub(); +var gist = gh.getGist(); // not a gist yet +gist.create({ + public: true, + description: 'My first gist', + files: { + "file1.txt": { + contents: "Aren't gists great!" + } + } +}).then(function(httpResponse) { + // Promises! + var gist = httpResponse.data; + gist.read(function(err, gist, xhr) { + // if no error occurred then err == null + + // gist == httpResponse.data + + // xhr == httpResponse + }); +}); +``` + +```javascript +var GitHub = require('github-api'); -**TODO** +// basic auth +var gh = new GitHub({ + username: 'FOO', + password: 'NotFoo' +}); + +var me = gh.getUser(); +me.getNotification(function(err, notifcations) { + // do some stuff +}); + +var clayreimann = gh.getUser('clayreimann'); +clayreimann.getStarredRepos() + .then(function(httpPromise) { + var repos = httpPromise.data; + }); +``` + +```javascript +var GitHub = require('github-api'); + +// token auth +var gh = new GitHub({ + token: 'MY_OAUTH_TOKEN' +}); + +var yahoo = gh.getOrganization('yahoo'); +yahoo.getRepos(function(err, repos) { + // look at all the repos! +}) +``` [cdnjs]: https://cdnjs.com/ [codecov]: https://codecov.io/github/michael/github?branch=master diff --git a/gulpfile.babel.js b/gulpfile.babel.js index 6b92e2c2..9055f7b3 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -6,14 +6,14 @@ import stylish from 'gulp-jscs-stylish'; import babel from 'gulp-babel'; import rename from 'gulp-rename'; -import browserify from 'browserify'; -import buffer from 'vinyl-buffer'; -import del from 'del'; -import path from 'path'; +import browserify from 'browserify'; +import buffer from 'vinyl-buffer'; +import del from 'del'; +import path from 'path'; import {Promise} from 'es6-promise'; -import source from 'vinyl-source-stream'; -import sourcemaps from 'gulp-sourcemaps'; -import uglify from 'gulp-uglify'; +import source from 'vinyl-source-stream'; +import sourcemaps from 'gulp-sourcemaps'; +import uglify from 'gulp-uglify'; const ALL_SOURCES = [ path.join(__dirname, '/*.js'), @@ -37,51 +37,69 @@ gulp.task('clean', function() { return Promise.all([del('dist/'), del('coverage/')]); }); -const browserifyConfig = { +gulp.task('build', [ + 'build:bundled:min', + 'build:external:min', + 'build:bundled:debug', + 'build:external:debug', + 'build:components' +]); + +const bundledConfig = { debug: true, - entries: 'src/Github.js', - standalone: 'Github' + entries: 'lib/GitHub.js', + standalone: 'GitHub' }; -gulp.task('build', function() { - browserify(browserifyConfig) - .transform('babelify') - .bundle() - .pipe(source('Github.js')) - .pipe(buffer()) - .pipe(sourcemaps.init({ - loadMaps: true - })) - .pipe(uglify()) - .pipe(rename({ - extname: '.bundle.min.js' - })) +const externalConfig = { + debug: true, + entries: 'lib/GitHub.js', + standalone: 'GitHub', + external: [ + 'axios', + 'js-base64', + 'es6-promise', + 'debug', + 'utf8' + ], + bundleExternal: false +}; +gulp.task('build:bundled:min', function() { + return buildBundle(bundledConfig, '.bundle.min.js', true); +}); +gulp.task('build:external:min', function() { + return buildBundle(externalConfig, '.min.js', true); +}); +gulp.task('build:bundled:debug', function() { + return buildBundle(bundledConfig, '.bundle.js', false); +}); +gulp.task('build:external:debug', function() { + return buildBundle(externalConfig, '.js', false); +}); +gulp.task('build:components', function() { + return gulp.src('lib/*.js') + .pipe(sourcemaps.init()) + .pipe(babel()) .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')) + .pipe(gulp.dest('dist/components')) ; +}); - browserify(browserifyConfig) +function buildBundle(options, extname, minify) { + let stream = browserify(options) .transform('babelify') .bundle() - .pipe(source('Github.js')) + .pipe(source('GitHub.js')) .pipe(buffer()) .pipe(sourcemaps.init({ loadMaps: true - })) - .pipe(rename({ - extname: '.bundle.js' - })) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist')) - ; + })); - return gulp.src('src/*.js') - .pipe(babel()) - .pipe(sourcemaps.init()) + if (minify) { + stream = stream.pipe(uglify()); + } + + return stream.pipe(rename({extname})) .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist/components')) + .pipe(gulp.dest('dist')) ; -}); - -gulp.task('default', ['clean'], function() { - gulp.start('lint', 'test:mocha', 'build'); -}); +} diff --git a/lib/Gist.js b/lib/Gist.js index a24917b5..d92cc678 100644 --- a/lib/Gist.js +++ b/lib/Gist.js @@ -19,7 +19,7 @@ class Gist extends Requestable { */ constructor(id, auth, apiBase) { super(auth, apiBase); - this.id = id; + this.__id = id; } /** @@ -29,7 +29,7 @@ class Gist extends Requestable { * @return {Promise} - the Promise for the http request */ read(cb) { - return this._request('GET', `/gists/${this.id}`, null, cb); + return this._request('GET', `/gists/${this.__id}`, null, cb); } /** @@ -42,7 +42,7 @@ class Gist extends Requestable { create(gist, cb) { return this._request('POST', '/gists', gist, cb) .then((response) => { - this.id = response.data.id; + this.__id = response.data.id; return response; }); } @@ -54,7 +54,7 @@ class Gist extends Requestable { * @return {Promise} - the Promise for the http request */ delete(cb) { - return this._request('DELETE', `/gists/${this.id}`, null, cb); + return this._request('DELETE', `/gists/${this.__id}`, null, cb); } /** @@ -64,18 +64,18 @@ class Gist extends Requestable { * @return {Promise} - the Promise for the http request */ fork(cb) { - return this._request('POST', `/gists/${this.id}/forks`, null, cb); + return this._request('POST', `/gists/${this.__id}/forks`, null, cb); } /** - * Modify a gist. + * Update a gist. * @see https://developer.github.com/v3/gists/#edit-a-gist - * @param {Object} gist - the data for the new gist + * @param {Object} gist - the new data for the gist * @param {Requestable.callback} [cb] - the function that receives the API result * @return {Promise} - the Promise for the http request */ update(gist, cb) { - return this._request('PATCH', `/gists/${this.id}`, gist, cb); + return this._request('PATCH', `/gists/${this.__id}`, gist, cb); } /** @@ -85,7 +85,7 @@ class Gist extends Requestable { * @return {Promise} - the Promise for the http request */ star(cb) { - return this._request('PUT', `/gists/${this.id}/star`, null, cb); + return this._request('PUT', `/gists/${this.__id}/star`, null, cb); } /** @@ -95,7 +95,7 @@ class Gist extends Requestable { * @return {Promise} - the Promise for the http request */ unstar(cb) { - return this._request('DELETE', `/gists/${this.id}/star`, null, cb); + return this._request('DELETE', `/gists/${this.__id}/star`, null, cb); } /** @@ -105,7 +105,7 @@ class Gist extends Requestable { * @return {Promise} - the Promise for the http request */ isStarred(cb) { - return this._request204or404(`/gists/${this.id}/star`, null, cb); + return this._request204or404(`/gists/${this.__id}/star`, null, cb); } } diff --git a/lib/github.js b/lib/GitHub.js similarity index 82% rename from lib/github.js rename to lib/GitHub.js index 80eee152..3a895f9a 100644 --- a/lib/github.js +++ b/lib/GitHub.js @@ -30,7 +30,8 @@ class GitHub { /** * Create a new Gist wrapper - * @param {number} id - the id for the gist, leave undefined when creating a new gist + * @param {number} [id] - the id for the gist, leave undefined when creating a new gist + * @return {Gist} */ getGist(id) { return new Gist(id, this.__auth, this.__apiBase); @@ -38,18 +39,21 @@ class GitHub { /** * Create a new User wrapper + * @param {string} [user] - the name of the user to get information about + * leave undefined for the authenticated user * @return {User} */ - getUser() { - return new User(this.__auth, this.__apiBase); + getUser(user) { + return new User(user, this.__auth, this.__apiBase); } /** * Create a new Organization wrapper + * @param {string} organization - the name of the organization * @return {Organization} */ - getOrg() { - return new Organization(this.__auth, this.__apiBase); + getOrganization(organization) { + return new Organization(organization, this.__auth, this.__apiBase); } /** diff --git a/lib/Issue.js b/lib/Issue.js index 67155599..0acd7d4c 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -13,13 +13,13 @@ import Requestable from './Requestable'; class Issue extends Requestable { /** * Create a new Issue - * @param {string} repoPath - the full name (:user/:repo) to get issues for + * @param {string} repository - the full name of the repository (`:user/:repo`) to get issues for * @param {Requestable.auth} [auth] - information required to authenticate to Github * @param {string} [apiBase=https://api.github.com] - the base Github API URL */ - constructor(repoPath, auth, apiBase) { + constructor(repository, auth, apiBase) { super(auth, apiBase); - this.__issuesPath = `/repos/${repoPath}/issues`; + this.__repository = repository; } /** @@ -29,8 +29,8 @@ class Issue extends Requestable { * @param {Requestable.callback} [cb] - will receive the created issue * @return {Promise} - the promise for the http request */ - create(issueData, cb) { - this._request('POST', this.__issuesPath, issueData, cb); + createIssue(issueData, cb) { + this._request('POST', `/repos/${this.__repository}/issues`, issueData, cb); } /** @@ -40,21 +40,20 @@ class Issue extends Requestable { * @param {Requestable.callback} [cb] - will receive the array of issues * @return {Promise} - the promise for the http request */ - list(options, cb) { - this._requestAllPages(this.__issuesPath, options, cb); + listIssues(options, cb) { + this._requestAllPages(`/repos/${this.__repository}/issues`, options, cb); } /** * Comment on an issue * @see https://developer.github.com/v3/issues/comments/#create-a-comment - * @param {Object} issue - an issue object fetched from GitHub + * @param {number} issue - the id of the issue to comment on * @param {string} comment - the comment to add * @param {Requestable.callback} [cb] - will receive the created comment * @return {Promise} - the promise for the http request */ - comment(issue, comment, cb) { - // path should change to be `${this.__issuesPath}/${issue}/comments` - this._request('POST', issue.comments_url, {body: comment}, cb); // jscs:ignore + createIssueComment(issue, comment, cb) { + this._request('POST', `/repos/${this.__repository}/issues/${issue}/comments`, {body: comment}, cb); // jscs:ignore } /** @@ -65,8 +64,8 @@ class Issue extends Requestable { * @param {Requestable.callback} [cb] - will receive the modified issue * @return {Promise} - the promise for the http request */ - edit(issue, issueData, cb) { - this._request('PATCH', `${this.__issuesPath}/${issue}`, issueData, cb); + editIssue(issue, issueData, cb) { + this._request('PATCH', `/repos/${this.__repository}/issues/${issue}`, issueData, cb); } /** @@ -76,10 +75,9 @@ class Issue extends Requestable { * @param {Requestable.callback} [cb] - will receive the issue * @return {Promise} - the promise for the http request */ - get(issue, cb) { - this._request('GET', `${this.__issuesPath}/${issue}`, null, cb); + getIssue(issue, cb) { + this._request('GET', `/repos/${this.__repository}/issues/${issue}`, null, cb); } - } module.exports = Issue; diff --git a/lib/Organization.js b/lib/Organization.js index d6bd441d..c3d3dd70 100644 --- a/lib/Organization.js +++ b/lib/Organization.js @@ -13,22 +13,36 @@ import Requestable from './Requestable'; class Organization extends Requestable { /** * Create a new Organization + * @param {string} organization - the name of the organization * @param {Requestable.auth} [auth] - information required to authenticate to Github * @param {string} [apiBase=https://api.github.com] - the base Github API URL */ - constructor(auth, apiBase) { + constructor(organization, auth, apiBase) { super(auth, apiBase); + this.__name = organization; } /** * Create a repository in an organization * @see https://developer.github.com/v3/repos/#create - * @param {Object} options - contains the organization name and repository definition + * @param {Object} options - the repository definition * @param {Requestable.callback} [cb] - will receive the created repository * @return {Promise} - the promise for the http request */ createRepo(options, cb) { - this._request('POST', '/orgs/' + options.orgname + '/repos', options, cb); + this._request('POST', `/orgs/${this.__name}/repos`, options, cb); + } + + /** + * List the repositories in an organization + * @see https://developer.github.com/v3/repos/#list-organization-repositories + * @param {Requestable.callback} [cb] - will receive the list of repositories + * @return {Promise} - the promise for the http request + */ + getRepos(cb) { + let requestOptions = this._getOptionsWithDefaults({direction: 'desc'}); + + return this._requestAllPages(`/orgs/${this.__name}/repos`, requestOptions, cb); } } diff --git a/lib/Ratelimit.js b/lib/RateLimit.js similarity index 100% rename from lib/Ratelimit.js rename to lib/RateLimit.js diff --git a/lib/Repository.js b/lib/Repository.js index 009a9f3f..838cd5e8 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -24,7 +24,7 @@ class Repository extends Requestable { */ constructor(fullname, auth, apiBase) { super(auth, apiBase); - this.__repoPath = `/repos/${fullname}`; + this.__fullname = fullname; this.__currentTree = { branch: null, sha: null @@ -39,7 +39,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ getRef(ref, cb) { - return this._request('GET', `${this.__repoPath}/git/refs/${ref}`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/git/refs/${ref}`, null, cb); } /** @@ -50,7 +50,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ createRef(options, cb) { - return this._request('POST', `${this.__repoPath}/git/refs`, options, cb); + return this._request('POST', `/repos/${this.__fullname}/git/refs`, options, cb); } /** @@ -61,7 +61,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ deleteRef(ref, cb) { - return this._request('DELETE', `${this.__repoPath}/git/refs/${ref}`, null, cb); + return this._request('DELETE', `/repos/${this.__fullname}/git/refs/${ref}`, null, cb); } /** @@ -71,7 +71,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ deleteRepo(cb) { - return this._request('DELETE', this.__repoPath, null, cb); + return this._request('DELETE', `/repos/${this.__fullname}`, null, cb); } /** @@ -81,7 +81,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ listTags(cb) { - return this._request('GET', `${this.__repoPath}/tags`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/tags`, null, cb); } /** @@ -91,9 +91,9 @@ class Repository extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of PRs * @return {Promise} - the promise for the http request */ - listPulls(options, cb) { + listPullRequests(options, cb) { options = options || {}; - return this._request('GET', `${this.__repoPath}/pulls`, options, cb); + return this._request('GET', `/repos/${this.__fullname}/pulls`, options, cb); } /** @@ -103,8 +103,8 @@ class Repository extends Requestable { * @param {Requestable.callback} [cb] - will receive the PR from the API * @return {Promise} - the promise for the http request */ - getPull(number, cb) { - return this._request('GET', `${this.__repoPath}/pulls/${number}`, null, cb); + getPullRequest(number, cb) { + return this._request('GET', `/repos/${this.__fullname}/pulls/${number}`, null, cb); } /** @@ -115,8 +115,8 @@ class Repository extends Requestable { * @param {Requestable.callback} cb - will receive the comparison * @return {Promise} - the promise for the http request */ - compare(base, head, cb) { - return this._request('GET', `${this.__repoPath}/compare/${base}...${head}`, null, cb); + compareBranches(base, head, cb) { + return this._request('GET', `/repos/${this.__fullname}/compare/${base}...${head}`, null, cb); } /** @@ -126,7 +126,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ listBranches(cb) { - return this._request('GET', `${this.__repoPath}/branches`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/branches`, null, cb); } /** @@ -137,19 +137,39 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ getBlob(sha, cb) { - return this._request('GET', `${this.__repoPath}/git/blobs/${sha}`, null, cb, 'raw'); + return this._request('GET', `/repos/${this.__fullname}/git/blobs/${sha}`, null, cb, 'raw'); } /** * Get a commit from the repository * @see https://developer.github.com/v3/repos/commits/#get-a-single-commit - * @param {string} branch - unused * @param {string} sha - the sha for the commit to fetch * @param {Requestable.callback} cb - will receive the commit data * @return {Promise} - the promise for the http request */ - getCommit(branch, sha, cb) { - return this._request('GET', `${this.__repoPath}/git/commits/${sha}`, null, cb); + getCommit(sha, cb) { + return this._request('GET', `/repos/${this.__fullname}/git/commits/${sha}`, null, cb); + } + + /** + * List the commits on a repository, optionally filtering by path, author or time range + * @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository + * @param {Object} [options] + * @param {string} [options.sha] - the SHA or branch to start from + * @param {string} [options.path] - the path to search on + * @param {string} [options.author] - the commit author + * @param {(Date|string)} [options.since] - only commits after this date will be returned + * @param {(Date|string)} [options.until] - only commits before this date will be returned + * @param {Requestable.callback} cb - will receive the list of commits found matching the criteria + * @return {Promise} - the promise for the http request + */ + listCommits(options, cb) { + options = options || {}; + + options.since = this._dateToISO(options.since); + options.until = this._dateToISO(options.until); + + return this._request('GET', `/repos/${this.__fullname}/commits`, options, cb); } /** @@ -162,7 +182,7 @@ class Repository extends Requestable { */ getSha(branch, path, cb) { branch = branch ? `?ref=${branch}` : ''; - return this._request('GET', `${this.__repoPath}/contents/${path}${branch}`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/contents/${path}${branch}`, null, cb); } /** @@ -172,8 +192,8 @@ class Repository extends Requestable { * @param {Requestable.callback} cb - will receive the list of statuses * @return {Promise} - the promise for the http request */ - getStatuses(sha, cb) { - return this._request('GET', `${this.__repoPath}/commits/${sha}/statuses`, null, cb); + listStatuses(sha, cb) { + return this._request('GET', `/repos/${this.__fullname}/commits/${sha}/statuses`, null, cb); } /** @@ -184,7 +204,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ getTree(treeSHA, cb) { - return this._request('GET', `${this.__repoPath}/git/trees/${treeSHA}`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/git/trees/${treeSHA}`, null, cb); } /** @@ -194,10 +214,11 @@ class Repository extends Requestable { * @param {Requestable.callback} cb - will receive the details of the created blob * @return {Promise} - the promise for the http request */ - postBlob(content, cb) { + createBlob(content, cb) { let postBody = this._getContentObject(content); - return this._request('POST', this.__repoPath + '/git/blobs', postBody, cb); + log('sending content', postBody); + return this._request('POST', `/repos/${this.__fullname}/git/blobs`, postBody, cb); } _getContentObject(content) { @@ -246,7 +267,7 @@ class Repository extends Requestable { }] }; - return this._request('POST', `${this.__repoPath}/git/trees`, newTree, cb); + return this._request('POST', `/repos/${this.__fullname}/git/trees`, newTree, cb); } /** @@ -257,8 +278,8 @@ class Repository extends Requestable { * @param {Requestable.callback} cb - will receive the new tree that is created * @return {Promise} - the promise for the http request */ - postTree(tree, baseSHA, cb) { - return this._request('POST', `${this.__repoPath}/git/trees`, {tree, base_tree: baseSHA}, cb); // jscs:ignore + createTree(tree, baseSHA, cb) { + return this._request('POST', `/repos/${this.__fullname}/git/trees`, {tree, base_tree: baseSHA}, cb); // jscs:ignore } /** @@ -268,7 +289,7 @@ class Repository extends Requestable { * @param {Object} tree - the tree that describes this commit * @param {string} message - the commit message * @param {Function} cb - will receive the commit that is created - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ commit(parent, tree, message, cb) { let data = { @@ -277,7 +298,7 @@ class Repository extends Requestable { parents: [parent] }; - return this._request('POST', `${this.__repoPath}/git/commits`, data, cb) + return this._request('POST', `/repos/${this.__fullname}/git/commits`, data, cb) .then((response) => { this.__currentTree.sha = response.sha; // Update latest commit return response; @@ -290,41 +311,41 @@ class Repository extends Requestable { * @param {string} ref - the ref to update * @param {string} commitSHA - the SHA to point the reference to * @param {Function} cb - will receive the updated ref back - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ updateHead(ref, commitSHA, cb) { - return this._request('PATCH', `${this.__repoPath}/git/refs/${ref}`, {sha: commitSHA}, cb); + return this._request('PATCH', `/repos/${this.__fullname}/git/refs/${ref}`, {sha: commitSHA}, cb); } /** * Get information about the repository * @see https://developer.github.com/v3/repos/#get * @param {Function} cb - will receive the information about the repository - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - show(cb) { - return this._request('GET', this.__repoPath, null, cb); + getDetails(cb) { + return this._request('GET', `/repos/${this.__fullname}`, null, cb); } /** * List the contributors to the repository * @see https://developer.github.com/v3/repos/#list-contributors * @param {Function} cb - will receive the list of contributors - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - contributors(cb) { - - return this._request('GET', `${this.__repoPath}/stats/contributors`, null, cb); + getContributors(cb) { + return this._request('GET', `/repos/${this.__fullname}/stats/contributors`, null, cb); } /** - * List the users who are collaborators on the repository + * List the users who are collaborators on the repository. The currently authenticated user must have + * push access to use this method * @see https://developer.github.com/v3/repos/collaborators/#list-collaborators * @param {Function} cb - will receive the list of collaborators - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - collaborators(cb) { - return this._request('GET', `${this.__repoPath}/collaborators`, null, cb); + getCollaborators(cb) { + return this._request('GET', `/repos/${this.__fullname}/collaborators`, null, cb); } /** @@ -335,7 +356,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request {Boolean} [description] */ isCollaborator(username, cb) { - return this._request('GET', `${this.__repoPath}/collaborators/${username}`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/collaborators/${username}`, null, cb); } /** @@ -343,32 +364,33 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/repos/contents/#get-contents * @param {string} ref - the ref to check * @param {string} path - the path containing the content to fetch + * @param {boolean} raw - `true` if the results should be returned raw instead of GitHub's normalized format * @param {Function} cb - will receive the fetched data - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - contents(ref, path, cb) { + getContents(ref, path, raw, cb) { path = path ? `${encodeURI(path)}` : ''; - return this._request('GET', `${this.__repoPath}/contents/${path}`, {ref}, cb); + return this._request('GET', `/repos/${this.__fullname}/contents/${path}`, {ref}, cb, raw); } /** * Fork a repository * @see https://developer.github.com/v3/repos/forks/#create-a-fork * @param {Function} cb - will receive the information about the newly created fork - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ fork(cb) { - return this._request('POST', `${this.__repoPath}/forks`, null, cb); + return this._request('POST', `/repos/${this.__fullname}/forks`, null, cb); } /** * List a repository's forks * @see https://developer.github.com/v3/repos/forks/#list-forks * @param {Function} cb - will receive the list of repositories forked from this one - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ listForks(cb) { - return this._request('GET', `${this.__repoPath}/forks`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/forks`, null, cb); } /** @@ -376,9 +398,9 @@ class Repository extends Requestable { * @param {string} [oldBranch=master] - the name of the existing branch * @param {string} newBranch - the name of the new branch * @param {Function} cb - will receive the commit data for the head of the new branch - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - branch(oldBranch, newBranch, cb) { + createBranch(oldBranch, newBranch, cb) { if (typeof newBranch === 'function') { cb = newBranch; newBranch = oldBranch; @@ -397,20 +419,20 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/pulls/#create-a-pull-request * @param {Object} options - the pull request description * @param {Function} cb - will receive the new pull request - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ createPullRequest(options, cb) { - return this._request('POST', `${this.__repoPath}/pulls`, options, cb); + return this._request('POST', `/repos/${this.__fullname}/pulls`, options, cb); } /** * List the hooks for the repository * @see https://developer.github.com/v3/repos/hooks/#list-hooks * @param {Function} cb - will receive the list of hooks - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ listHooks(cb) { - return this._request('GET', `${this.__repoPath}/hooks`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/hooks`, null, cb); } /** @@ -418,10 +440,10 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/repos/hooks/#get-single-hook * @param {number} id - the id of the webook * @param {Function} cb - will receive the details of the webook - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ getHook(id, cb) { - return this._request('GET', `${this.__repoPath}/hooks/${id}`, null, cb); + return this._request('GET', `/repos/${this.__fullname}/hooks/${id}`, null, cb); } /** @@ -429,10 +451,10 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/repos/hooks/#create-a-hook * @param {Object} options - the configuration describing the new hook * @param {Function} cb - will receive the new webhook - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ createHook(options, cb) { - return this._request('POST', `${this.__repoPath}/hooks`, options, cb); + return this._request('POST', `/repos/${this.__fullname}/hooks`, options, cb); } /** @@ -441,10 +463,10 @@ class Repository extends Requestable { * @param {number} id - the id of the webhook * @param {Object} options - the new description of the webhook * @param {Function} cb - will receive the updated webhook - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - editHook(id, options, cb) { - return this._request('PATCH', `${this.__repoPath}/hooks/${id}`, options, cb); + updateHook(id, options, cb) { + return this._request('PATCH', `/repos/${this.__fullname}/hooks/${id}`, options, cb); } /** @@ -452,23 +474,10 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/repos/hooks/#delete-a-hook * @param {number} id - the id of the webhook to be deleted * @param {Function} cb - will receive true if the call is successful - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ deleteHook(id, cb) { - return this._request('DELETE', this.__repoPath + '/hooks/' + id, null, cb); - } - - /** - * Get the raw contents of a file in a branch - * @see https://developer.github.com/v3/repos/contents/#get-contents - * @param {string} branch - the name of the branch to read from, or the default branch if not specified - * @param {string} path - the path to read from - * @param {Function} cb - will receive the raw file contents - * @return {Promise} - the promise for the http request {[type]} [description] - */ - read(branch, path, cb) { - path = path ? encodeURI(path) : ''; - return this._request('GET', `${this.__repoPath}/contents/${path}`, {ref: branch}, cb, 'raw'); + return this._request('DELETE', `${this.__repoPath}/hooks/${id}`, null, cb); } /** @@ -477,9 +486,9 @@ class Repository extends Requestable { * @param {string} branch - the branch to delete from, or the default branch if not specified * @param {string} path - the path of the file to remove * @param {Function} cb - will receive the commit in which the delete occurred - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - remove(branch, path, cb) { + deleteFile(branch, path, cb) { this.getSha(branch, path) .then((response) => { const deleteCommit = { @@ -487,7 +496,7 @@ class Repository extends Requestable { sha: response.data.sha, branch }; - return this._request('DELETE', `${this.__repoPath}/contents/${path}`, deleteCommit, cb); + return this._request('DELETE', `/repos/${this.__fullname}/contents/${path}`, deleteCommit, cb); }); } @@ -537,12 +546,12 @@ class Repository extends Requestable { * @param {string} message - the commit message * @param {Object} [options] * @param {Object} [options.author] - the author of the commit - * @param {Object} [options.commit] - the committer + * @param {Object} [options.commiter] - the committer * @param {boolean} [options.encode] - true if the content should be base64 encoded * @param {Function} cb - will receive the new commit - * @return {Promise} - the promise for the http request {[type]} [description] + * @return {Promise} - the promise for the http request */ - write(branch, path, content, message, options, cb) { + writeFile(branch, path, content, message, options, cb) { if (typeof options === 'function') { cb = options; options = {}; @@ -560,68 +569,41 @@ class Repository extends Requestable { return this.getSha(branch, filePath) .then((response) => { commit.sha = response.data.sha; - return this._request('PUT', `${this.__repoPath}/contents/${filePath}`, commit, cb); + return this._request('PUT', `/repos/${this.__fullname}/contents/${filePath}`, commit, cb); }, () => { - return this._request('PUT', `${this.__repoPath}/contents/${filePath}`, commit, cb); + return this._request('PUT', `/repos/${this.__fullname}/contents/${filePath}`, commit, cb); }); } - /** - * List the commits on a repository, optionally filtering by path, author or time range - * @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository - * @param {Object} [options] - options to filter by - * @param {string} [options.sha] - the SHA or branch to start from - * @param {string} [options.path] - the path to search on - * @param {string} [options.author] - the commit author - * @param {(Date|string)} [options.since] - only commits after this date will be returned - * @param {(Date|string)} [options.until] - only commits before this date will be returned - * @param {Requestable.callback} cb - will receive the list of commits found matching the criteria - * @return {Promise} - the promise for the http request - */ - getCommits(options, cb) { - options = options || {}; - - options.since = this._dateToISO(options.since); - options.until = this._dateToISO(options.until); - - return this._request('GET', `${this.__repoPath}/commits`, options, cb); - } - /** * Check if a repository is starred by you * @see https://developer.github.com/v3/activity/starring/#check-if-you-are-starring-a-repository - * @param {string} owner - the owner of the repository - * @param {string} repository - the name of the repository * @param {Requestable.callback} cb - will receive true if the repository is starred and false if the repository * is not starred * @return {Promise} - the promise for the http request {Boolean} [description] */ - isStarred(owner, repository, cb) { - return this._request204or404('/user/starred/' + owner + '/' + repository, null, cb); + isStarred(cb) { + return this._request204or404(`/user/starred/${this.__fullname}`, null, cb); } /** * Star a repository * @see https://developer.github.com/v3/activity/starring/#star-a-repository - * @param {string} owner - the owner of the repository - * @param {string} repository - the repository name * @param {Requestable.callback} cb - will receive true if the repository is starred * @return {Promise} - the promise for the http request */ - star(owner, repository, cb) { - return this._request('PUT', '/user/starred/' + owner + '/' + repository, null, cb); + star(cb) { + return this._request('PUT', `/user/starred/${this.__fullname}`, null, cb); } /** * Unstar a repository * @see https://developer.github.com/v3/activity/starring/#unstar-a-repository - * @param {string} owner - the owner of the repository - * @param {string} repository - the repository name * @param {Requestable.callback} cb - will receive true if the repository is unstarred * @return {Promise} - the promise for the http request */ - unstar(owner, repository, cb) { - return this._request('DELETE', '/user/starred/' + owner + '/' + repository, null, cb); + unstar(cb) { + return this._request('DELETE', `/user/starred/${this.__fullname}`, null, cb); } /** @@ -632,7 +614,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ createRelease(options, cb) { - return this._request('POST', this.__repoPath + '/releases', options, cb); + return this._request('POST', `/repos/${this.__fullname}/releases`, options, cb); } /** @@ -643,8 +625,8 @@ class Repository extends Requestable { * @param {Requestable.callback} cb - will receive the modified release * @return {Promise} - the promise for the http request */ - editRelease(id, options, cb) { - return this._request('PATCH', this.__repoPath + '/releases/' + id, options, cb); + updateRelease(id, options, cb) { + return this._request('PATCH', `/repos/${this.__fullname}/releases/${id}`, options, cb); } /** @@ -655,7 +637,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ getRelease(id, cb) { - return this._request('GET', this.__repoPath + '/releases/' + id, null, cb); + return this._request('GET', `/repos/${this.__fullname}/releases/${id}`, null, cb); } /** @@ -666,7 +648,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ deleteRelease(id, cb) { - return this._request('DELETE', this.__repoPath + '/releases/' + id, null, cb); + return this._request('DELETE', `/repos/${this.__fullname}/releases/${id}`, null, cb); } } diff --git a/lib/Requestable.js b/lib/Requestable.js index ae2bfa4c..bd89910e 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -8,9 +8,14 @@ import axios from 'axios'; import debug from 'debug'; import {Base64} from 'js-base64'; +import {polyfill} from 'es6-promise'; const log = debug('github:request'); +if (typeof Promise === 'undefined') { + polyfill(); +} + /** * Requestable wraps the logic for making http requests to the API */ @@ -212,17 +217,18 @@ class Requestable { cb(null, results, response); } - return results; + response.data = results; + return response; }).catch(callbackErrorOrThrow(cb, path)); } } -export default Requestable; +module.exports = Requestable; // ////////////////////////// // // Private helper functions // // ////////////////////////// // -export function buildError(path, response) { +function buildError(path, response) { return { path: path, request: response.config, diff --git a/lib/Search.js b/lib/Search.js index e08a6024..0b61a8c3 100644 --- a/lib/Search.js +++ b/lib/Search.js @@ -42,35 +42,35 @@ class Search extends Requestable { } /** - * Search in repositories + * Search for repositories * @see https://developer.github.com/v3/search/#search-repositories * @param {Object} [options] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ - repositories(options, cb) { + forRepositories(options, cb) { return this._search('repositories', options, cb); } /** - * Search amongst code + * Search for code * @see https://developer.github.com/v3/search/#search-code * @param {Object} [options] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ - code(options, cb) { + forCode(options, cb) { return this._search('code', options, cb); } /** - * Search issues + * Search for issues * @see https://developer.github.com/v3/search/#search-issues * @param {Object} [options] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ - issues(options, cb) { + forIssues(options, cb) { return this._search('issues', options, cb); } @@ -81,7 +81,7 @@ class Search extends Requestable { * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ - users(options, cb) { + forUsers(options, cb) { return this._search('users', options, cb); } } diff --git a/lib/User.js b/lib/User.js index 719fdc03..aea35d8a 100644 --- a/lib/User.js +++ b/lib/User.js @@ -15,21 +15,50 @@ const log = debug('github:user'); class User extends Requestable { /** * Create a User. + * @param {string} [username] - the user to use for user-scoped queries * @param {Requestable.auth} [auth] - information required to authenticate to Github * @param {string} [apiBase=https://api.github.com] - the base Github API URL */ - constructor(auth, apiBase) { + constructor(username, auth, apiBase) { super(auth, apiBase); + this.__user = username; + } + + /** + * Get the url for the request. (dependent on if we're requesting for the authenticated user or not) + * @private + * @param {string} endpoint - the endpoint being requested + * @return {string} - the resolved endpoint + */ + __getScopedUrl(endpoint) { + if (this.__user) { + return endpoint ? + `/users/${this.__user}/${endpoint}` + : `/users/${this.__user}` + ; + } else { + switch (endpoint) { + case '': + return '/user'; + + case 'notifications': + case 'gists': + return `/${endpoint}`; + + default: + return `/user/${endpoint}`; + } + } } /** * List the user's repositories - * @see https://developer.github.com/v3/repos/#list-your-repositories + * @see https://developer.github.com/v3/repos/#list-user-repositories * @param {Object} [options={}] - any options to refine the search * @param {Requestable.callback} [cb] - will receive the list of repositories * @return {Promise} - the promise for the http request */ - repos(options, cb) { + getRepos(options, cb) { if (typeof options === 'function') { cb = options; options = {}; @@ -38,25 +67,27 @@ class User extends Requestable { options = this._getOptionsWithDefaults(options); log(`Fetching repositories with options: ${JSON.stringify(options)}`); - return this._requestAllPages('/user/repos', options, cb); + return this._requestAllPages(this.__getScopedUrl('repos'), options, cb); } /** * List the orgs that the user belongs to + * @see https://developer.github.com/v3/orgs/#list-user-organizations * @param {Requestable.callback} [cb] - will receive the list of organizations * @return {Promise} - the promise for the http request */ - orgs(cb) { - return this._request('GET', '/user/orgs', null, cb); + getOrgs(cb) { + return this._request('GET', this.__getScopedUrl('orgs'), null, cb); } /** * List the user's gists + * @see https://developer.github.com/v3/gists/#list-a-users-gists * @param {Requestable.callback} [cb] - will receive the list of gists * @return {Promise} - the promise for the http request */ - gists(cb) { - return this._request('GET', '/gists', null, cb); + getGists(cb) { + return this._request('GET', this.__getScopedUrl('gists'), null, cb); } /** @@ -66,7 +97,7 @@ class User extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of repositories * @return {Promise} - the promise for the http request */ - notifications(options, cb) { + getNotifications(options, cb) { options = options || {}; if (typeof options === 'function') { cb = options; @@ -76,105 +107,54 @@ class User extends Requestable { options.since = this._dateToISO(options.since); options.before = this._dateToISO(options.before); - return this._request('GET', '/notifications', options, cb); + return this._request('GET', this.__getScopedUrl('notifications'), options, cb); } /** - * Show a user + * Show the user's profile * @see https://developer.github.com/v3/users/#get-a-single-user - * @param {string} [username] - the user to show, defaults to the current user * @param {Requestable.callback} [cb] - will receive the user's information * @return {Promise} - the promise for the http request */ - show(username, cb) { - if (typeof username === 'function') { - cb = username; - username = undefined; - } - const url = username ? '/users/' + username : '/user'; - - return this._request('GET', url, null, cb); - } - - /** - * Get a user's repositories - * @see https://developer.github.com/v3/repos/#list-user-repositories - * @param {string} username - the user's repositories we are interested in - * @param {Object} options - filtering options - * @param {Requestable.callback} [cb] - will receive the list of repositories - * @return {Promise} - the promise for the http request - */ - userRepos(username, options, cb) { - if (typeof options === 'function') { - cb = options; - options = {}; - } - - options = this._getOptionsWithDefaults(options); - - return this._requestAllPages(`/users/${username}/repos`, options, cb); + getProfile(cb) { + return this._request('GET', this.__getScopedUrl(''), null, cb); } /** - * Gets the list of starred repositories for a user + * Gets the list of starred repositories for the user * @see https://developer.github.com/v3/activity/starring/#list-repositories-being-starred - * @param {string} username - the user to query * @param {Requestable.callback} [cb] - will receive the list of starred repositories * @return {Promise} - the promise for the http request */ - userStarred(username, cb) { + getStarredRepos(cb) { let requestOptions = this._getOptionsWithDefaults(); - return this._requestAllPages(`/users/${username}/starred`, requestOptions, cb); - } - - /** - * List a user's gists - * @see https://developer.github.com/v3/gists/#list-a-users-gists - * @param {string} username - the user's gists to list - * @param {Requestable.callback} [cb] - receives the list of gists - * @return {Promise} - the promise for the http request - */ - userGists(username, cb) { - return this._request('GET', `/users/${username}/gists`, null, cb); - } - - /** - * List the repositories in an organization - * @see https://developer.github.com/v3/repos/#list-organization-repositories - * @param {string} orgname - the name of the organization - * @param {Requestable.callback} [cb] - will receive the list of repositories - * @return {Promise} - the promise for the http request - */ - orgRepos(orgname, cb) { - let requestOptions = this._getOptionsWithDefaults({direction: 'desc'}); - - return this._requestAllPages(`/orgs/${orgname}/repos`, requestOptions, cb); + return this._requestAllPages(this.__getScopedUrl('starred'), requestOptions, cb); } /** - * Follow a user + * Have the authenticated user follow this user * @see https://developer.github.com/v3/users/followers/#follow-a-user * @param {string} username - the user to follow * @param {Requestable.callback} [cb] - will receive true if the request succeeds * @return {Promise} - the promise for the http request */ follow(username, cb) { - return this._request('PUT', `/user/following/${username}`, null, cb); + return this._request('PUT', `/user/following/${this.__user}`, null, cb); } /** - * Unfollow a user + * Have the currently authenticated user unfollow this user * @see https://developer.github.com/v3/users/followers/#follow-a-user * @param {string} username - the user to unfollow * @param {Requestable.callback} [cb] - receives true if the request succeeds * @return {Promise} - the promise for the http request */ unfollow(username, cb) { - return this._request('DELETE', `/user/following/${username}`, null, cb); + return this._request('DELETE', `/user/following/${this.__user}`, null, cb); } /** - * Create a new user repository + * Create a new repository for the currently authenticated user * @see https://developer.github.com/v3/repos/#create * @param {object} options - the repository definition * @param {Requestable.callback} [cb] - will receive the API response diff --git a/package.json b/package.json index d1d3ed13..9c3f4f69 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.11.2", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", - "main": "src/github.js", + "main": "dist/components/GitHub.js", "contributors": [ "Ændrew Rininsland (http://www.aendrew.com)", "Aurelio De Rosa (http://www.audero.it/)", @@ -15,11 +15,12 @@ "clean": "gulp clean", "build": "gulp build", "test": "mocha --opts ./mocha.opts test/*.spec.js", - "test-verbose": "DEBUG=github* mocha test/*.spec.js", + "test-verbose": "DEBUG=github* npm test", + "test-browser": "", "lint": "gulp lint", + "generate-docs": "node_modules/.bin/jsdoc -c .jsdoc.json --verbose", "codecov": "node_modules/.bin/codecov", - "show-coverage-html": "open coverage/lcov-report/index.html", - "generate-docs": "node_modules/.bin/jsdoc -c .jsdoc.json --verbose" + "show-coverage-html": "open coverage/lcov-report/index.html" }, "babel": { "presets": [ @@ -41,8 +42,13 @@ } } }, + "files": [ + "dist/*", + "lib/*" + ], "dependencies": { - "axios": "https://github.com/github-tools/axios.git", + "axios": "^0.10.0", + "debug": "^2.2.0", "es6-promise": "^3.0.2", "js-base64": "^2.1.9", "utf8": "^2.1.1" @@ -52,7 +58,7 @@ "babel-plugin-transform-es2015-modules-umd": "^6.5.0", "babel-preset-es2015": "^6.5.0", "babel-register": "^6.7.2", - "babelify": "^7.2.0", + "babelify": "^7.3.0", "browserify": "^13.0.0", "codecov": "^1.0.1", "del": "^2.2.0", @@ -61,11 +67,9 @@ "gulp-eslint": "^2.0.0", "gulp-jscs": "^3.0.2", "gulp-jscs-stylish": "^1.3.0", - "gulp-jshint": "^2.0.0", "gulp-rename": "^1.2.2", "gulp-sourcemaps": "^1.6.0", "gulp-uglify": "^1.5.1", - "istanbul": "^0.4.3", "jsdoc": "^3.4.0", "minami": "^1.1.1", "mocha": "^2.3.4", diff --git a/test/auth.spec.js b/test/auth.spec.js index a24b5dbd..5f77d365 100644 --- a/test/auth.spec.js +++ b/test/auth.spec.js @@ -1,6 +1,6 @@ import expect from 'must'; -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; import {assertSuccessful, assertFailure} from './helpers/callbacks'; @@ -25,7 +25,7 @@ describe('Github', function() { }); it('should authenticate and return no errors', function(done) { - user.notifications(assertSuccessful(done)); + user.getNotifications(assertSuccessful(done)); }); }); @@ -82,7 +82,7 @@ describe('Github', function() { }); it('should fail authentication and return err', function(done) { - user.notifications(assertFailure(done, function(err) { + user.getNotifications(assertFailure(done, function(err) { expect(err.status).to.be.equal(401, 'Return 401 status for bad auth'); expect(err.response.data.message).to.equal('Bad credentials'); diff --git a/test/dist.spec/index.html b/test/dist.spec/index.html new file mode 100644 index 00000000..da5a21de --- /dev/null +++ b/test/dist.spec/index.html @@ -0,0 +1,31 @@ + + + + Mocha Tests + + + +
+ + + + + + + + diff --git a/test/gist.spec.js b/test/gist.spec.js index 880d42bc..01ee5644 100644 --- a/test/gist.spec.js +++ b/test/gist.spec.js @@ -1,6 +1,6 @@ import expect from 'must'; -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; import testGist from './fixtures/gist.json'; import {assertSuccessful} from './helpers/callbacks'; diff --git a/test/helpers/callbacks.js b/test/helpers/callbacks.js index bd7d0143..1f9c3dc7 100644 --- a/test/helpers/callbacks.js +++ b/test/helpers/callbacks.js @@ -5,12 +5,12 @@ const STANDARD_DELAY = 200; // 200ms between nested calls to the API so things s export function assertSuccessful(done, cb) { return function successCallback(err, res, xhr) { try { - expect(err).not.to.exist(); + expect(err).not.to.exist(err ? err.response.data : 'No error'); expect(res).to.exist(); expect(xhr).to.be.an.object(); if (cb) { - setTimeout(function() { + setTimeout(function delay() { cb(err, res, xhr); }, STANDARD_DELAY); } else { @@ -30,7 +30,7 @@ export function assertFailure(done, cb) { expect(err.request).to.exist(); if (cb) { - setTimeout(function() { + setTimeout(function delay() { cb(err); }, STANDARD_DELAY); } else { @@ -41,3 +41,10 @@ export function assertFailure(done, cb) { } }; } + +export function assertArray(done) { + return assertSuccessful(done, function isArray(err, result) { + expect(result).to.be.an.array(); + done(); + }); +} diff --git a/test/helpers/getTestRepoName.js b/test/helpers/getTestRepoName.js new file mode 100644 index 00000000..620f14a6 --- /dev/null +++ b/test/helpers/getTestRepoName.js @@ -0,0 +1,4 @@ +module.exports = function() { + let date = new Date(); + return date.getTime() + '-' + Math.floor(Math.random() * 100000).toString(); +}; diff --git a/test/issue.spec.js b/test/issue.spec.js index b8ff0ad1..af911777 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -1,13 +1,13 @@ import expect from 'must'; -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; import {assertSuccessful} from './helpers/callbacks'; describe('Issue', function() { let github; let remoteIssues; - let remoteIssue; + let remoteIssueId; before(function() { github = new Github({ @@ -21,17 +21,17 @@ describe('Issue', function() { describe('reading', function() { it('should list issues', function(done) { - remoteIssues.list({}, assertSuccessful(done, function(err, issues) { + remoteIssues.listIssues({}, assertSuccessful(done, function(err, issues) { expect(issues).to.be.an.array(); - remoteIssue = issues[0]; + remoteIssueId = issues[0].number; done(); })); }); it('should get issue', function(done) { - remoteIssues.get(remoteIssue.number, assertSuccessful(done, function(err, issue) { - expect(issue).to.have.own('number', remoteIssue.number); + remoteIssues.getIssue(remoteIssueId, assertSuccessful(done, function(err, issue) { + expect(issue).to.have.own('number', remoteIssueId); done(); })); @@ -50,7 +50,7 @@ describe('Issue', function() { body: 'New issue body' }; - remoteIssues.create(newIssue, assertSuccessful(done, function(err, issue) { + remoteIssues.createIssue(newIssue, assertSuccessful(done, function(err, issue) { expect(issue).to.have.own('url'); expect(issue).to.have.own('title', newIssue.title); expect(issue).to.have.own('body', newIssue.body); @@ -60,7 +60,7 @@ describe('Issue', function() { }); it('should post issue comment', function(done) { - remoteIssues.comment(remoteIssue, 'Comment test', assertSuccessful(done, function(err, issue) { + remoteIssues.createIssueComment(remoteIssueId, 'Comment test', assertSuccessful(done, function(err, issue) { expect(issue).to.have.own('body', 'Comment test'); done(); @@ -72,7 +72,7 @@ describe('Issue', function() { title: 'Edited title' }; - remoteIssues.edit(remoteIssue.number, newProps, assertSuccessful(done, function(err, issue) { + remoteIssues.editIssue(remoteIssueId, newProps, assertSuccessful(done, function(err, issue) { expect(issue).to.have.own('title', newProps.title); done(); diff --git a/test/organization.spec.js b/test/organization.spec.js index b687d4c6..760e8ac9 100644 --- a/test/organization.spec.js +++ b/test/organization.spec.js @@ -1,13 +1,13 @@ -// jscs:disable requireCamelCaseOrUpperCaseIdentifiers import expect from 'must'; -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; -import {assertSuccessful} from './helpers/callbacks'; +import {assertSuccessful, assertArray} from './helpers/callbacks'; +import getTestRepoName from './helpers/getTestRepoName'; +// jscs:disable requireCamelCaseOrUpperCaseIdentifiers describe('Organization', function() { let github; - let organization; before(function() { github = new Github({ @@ -16,26 +16,44 @@ describe('Organization', function() { auth: 'basic' }); - organization = github.getOrg(); }); - it('should create an organisation repo', function(done) { - const testRepoName = Math.floor(Math.random() * 100000).toString(); - const options = { - orgname: testUser.ORGANIZATION, - name: testRepoName, - description: 'test create organization repo', - homepage: 'https://github.com/', - private: false, - has_issues: true, - has_wiki: true, - has_downloads: true - }; - - organization.createRepo(options, assertSuccessful(done, function(err, repo) { - expect(repo.name).to.equal(testRepoName); - expect(repo.full_name).to.equal(`${testUser.ORGANIZATION}/${testRepoName}`); - done(); - })); + describe('reading', function() { + let organization; + + before(function() { + organization = github.getOrganization('openaddresses'); + }); + + it('should show user\'s organisation repos', function(done) { + organization.getRepos(assertArray(done)); + }); + }); + + describe('creating/updating', function() { + let organization; + const testRepoName = getTestRepoName(); + + before(function() { + organization = github.getOrganization(testUser.ORGANIZATION); + }); + + it('should create an organisation repo', function(done) { + const options = { + name: testRepoName, + description: 'test create organization repo', + homepage: 'https://github.com/', + private: false, + has_issues: true, + has_wiki: true, + has_downloads: true + }; + + organization.createRepo(options, assertSuccessful(done, function(err, repo) { + expect(repo.name).to.equal(testRepoName); + expect(repo.full_name).to.equal(`${testUser.ORGANIZATION}/${testRepoName}`); + done(); + })); + }); }); }); diff --git a/test/rate-limit.spec.js b/test/rate-limit.spec.js index 6fa75dc4..23e12d14 100644 --- a/test/rate-limit.spec.js +++ b/test/rate-limit.spec.js @@ -1,6 +1,6 @@ import expect from 'must'; -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; import {assertSuccessful} from './helpers/callbacks'; diff --git a/test/repository.spec.js b/test/repository.spec.js index 5e2a780e..d097d431 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -1,9 +1,10 @@ import expect from 'must'; -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; import loadImage from './fixtures/imageBlob'; import {assertSuccessful, assertFailure} from './helpers/callbacks'; +import getTestRepoName from './helpers/getTestRepoName'; describe('Repository', function() { let github; @@ -11,7 +12,7 @@ describe('Repository', function() { let user; let imageB64; let imageBlob; - const testRepoName = Math.floor(Math.random() * 100000).toString(); + const testRepoName = getTestRepoName(); const v10SHA = '20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; const statusUrl = 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; @@ -33,8 +34,8 @@ describe('Repository', function() { remoteRepo = github.getRepo('michael', 'github'); }); - it('should show repo', function(done) { - remoteRepo.show(assertSuccessful(done, function(err, repo) { + it('should get repo details', function(done) { + remoteRepo.getDetails(assertSuccessful(done, function(err, repo) { expect(repo).to.have.own('full_name', 'michael/github'); done(); @@ -52,7 +53,7 @@ describe('Repository', function() { }); it('should show repo contents', function(done) { - remoteRepo.contents('master', '', assertSuccessful(done, function(err, contents) { + remoteRepo.getContents('master', '', false, assertSuccessful(done, function(err, contents) { expect(contents).to.be.an.array(); const readme = contents.filter(function(content) { @@ -66,6 +67,18 @@ describe('Repository', function() { })); }); + it('should show repo content raw', function(done) { + remoteRepo.getContents('master', 'README.md', 'raw', assertSuccessful(done, function(err, text) { + expect(text).to.contain('# Github.js'); + + done(); + })); + }); + + it('should get ref from repo', function(done) { + remoteRepo.getRef('heads/master', assertSuccessful(done)); + }); + it('should get tree', function(done) { remoteRepo.getTree('master', assertSuccessful(done, function(err, response) { let {tree} = response; @@ -89,7 +102,7 @@ describe('Repository', function() { }); it('should list commits with no options', function(done) { - remoteRepo.getCommits(null, assertSuccessful(done, function(err, commits) { + remoteRepo.listCommits(null, assertSuccessful(done, function(err, commits) { expect(commits).to.be.an.array(); expect(commits.length).to.be.above(0); @@ -111,7 +124,7 @@ describe('Repository', function() { until }; - remoteRepo.getCommits(options, assertSuccessful(done, function(err, commits) { + remoteRepo.listCommits(options, assertSuccessful(done, function(err, commits) { expect(commits).to.be.an.array(); expect(commits.length).to.be.above(0); @@ -126,7 +139,7 @@ describe('Repository', function() { }); it('should show repo contributors', function(done) { - remoteRepo.contributors(assertSuccessful(done, function(err, contributors) { + remoteRepo.getContributors(assertSuccessful(done, function(err, contributors) { expect(contributors).to.be.an.array(); expect(contributors.length).to.be.above(1); @@ -146,16 +159,8 @@ describe('Repository', function() { remoteRepo.listBranches(assertSuccessful(done)); }); - it('should read repo', function(done) { - remoteRepo.read('master', 'README.md', assertSuccessful(done, function(err, text) { - expect(text).to.contain('# Github.js'); - - done(); - })); - }); - it('should get commit from repo', function(done) { - remoteRepo.getCommit('master', v10SHA, assertSuccessful(done, function(err, commit) { + remoteRepo.getCommit(v10SHA, assertSuccessful(done, function(err, commit) { expect(commit.message).to.equal('v0.10.4'); expect(commit.author.date).to.equal('2015-03-20T17:01:42Z'); @@ -164,7 +169,7 @@ describe('Repository', function() { }); it('should get statuses for a SHA from a repo', function(done) { - remoteRepo.getStatuses(v10SHA, assertSuccessful(done, function(err, statuses) { + remoteRepo.listStatuses(v10SHA, assertSuccessful(done, function(err, statuses) { expect(statuses).to.be.an.array(); expect(statuses.length).to.equal(6); @@ -185,7 +190,7 @@ describe('Repository', function() { it('should get a repo by fullname', function(done) { const repoByName = github.getRepo('michael/github'); - repoByName.show(assertSuccessful(done, function(err, repo) { + repoByName.getDetails(assertSuccessful(done, function(err, repo) { expect(repo).to.have.own('full_name', 'michael/github'); done(); @@ -193,7 +198,7 @@ describe('Repository', function() { }); it('should check if the repo is starred', function(done) { - remoteRepo.isStarred('michael', 'github', assertSuccessful(done, function(err, result) { + remoteRepo.isStarred(assertSuccessful(done, function(err, result) { expect(result).to.equal(false); done(); @@ -248,7 +253,7 @@ describe('Repository', function() { }); it('should show repo collaborators', function(done) { - remoteRepo.collaborators(assertSuccessful(done, function(err, collaborators) { + remoteRepo.getCollaborators(assertSuccessful(done, function(err, collaborators) { expect(collaborators).to.be.an.array(); expect(collaborators).to.have.length(1); @@ -267,8 +272,8 @@ describe('Repository', function() { }); it('should write to repo', function(done) { - remoteRepo.write('master', fileName, initialText, initialMessage, assertSuccessful(done, function() { - remoteRepo.read('master', fileName, assertSuccessful(done, function(err, fileText) { + remoteRepo.writeFile('master', fileName, initialText, initialMessage, assertSuccessful(done, function() { + remoteRepo.getContents('master', fileName, 'raw', assertSuccessful(done, function(err, fileText) { expect(fileText).to.be(initialText); done(); @@ -277,7 +282,7 @@ describe('Repository', function() { }); it('should create a new branch', function(done) { - remoteRepo.branch('master', 'dev', assertSuccessful(done, function(err, branch) { + remoteRepo.createBranch('master', 'dev', assertSuccessful(done, function(err, branch) { expect(branch).to.have.property('ref', 'refs/heads/dev'); expect(branch.object).to.have.property('sha'); @@ -286,8 +291,8 @@ describe('Repository', function() { }); it('should write to repo branch', function(done) { - remoteRepo.write('dev', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { - remoteRepo.read('dev', fileName, assertSuccessful(done, function(err, fileText) { + remoteRepo.writeFile('dev', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.getContents('dev', fileName, 'raw', assertSuccessful(done, function(err, fileText) { expect(fileText).to.be(updatedText); done(); @@ -296,9 +301,9 @@ describe('Repository', function() { }); it('should compare two branches', function(done) { - remoteRepo.branch('master', 'compare', assertSuccessful(done, function() { - remoteRepo.write('compare', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { - remoteRepo.compare('master', 'compare', assertSuccessful(done, function(err, diff) { + remoteRepo.createBranch('master', 'compare', assertSuccessful(done, function() { + remoteRepo.writeFile('compare', fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.compareBranches('master', 'compare', assertSuccessful(done, function(err, diff) { expect(diff).to.have.own('total_commits', 1); expect(diff.files[0]).to.have.own('filename', fileName); @@ -315,8 +320,8 @@ describe('Repository', function() { const body = 'This is a test pull request'; const prSpec = {title, body, base, head}; - remoteRepo.branch(base, head, assertSuccessful(done, function() { - remoteRepo.write(head, fileName, updatedText, updatedMessage, assertSuccessful(done, function() { + remoteRepo.createBranch(base, head, assertSuccessful(done, function() { + remoteRepo.writeFile(head, fileName, updatedText, updatedMessage, assertSuccessful(done, function() { remoteRepo.createPullRequest(prSpec, assertSuccessful(done, function(err, pullRequest) { expect(pullRequest).to.have.own('number'); expect(pullRequest.number).to.be.above(0); @@ -329,10 +334,6 @@ describe('Repository', function() { })); }); - it('should get ref from repo', function(done) { - remoteRepo.getRef('heads/master', assertSuccessful(done)); - }); - it('should create ref on repo', function(done) { remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, refSpec) { let newRef = { @@ -360,7 +361,7 @@ describe('Repository', function() { per_page: 10 // jscs:ignore }; - remoteRepo.listPulls(filterOpts, assertSuccessful(done, function(err, pullRequests) { + remoteRepo.listPullRequests(filterOpts, assertSuccessful(done, function(err, pullRequests) { expect(pullRequests).to.be.an.array(); expect(pullRequests).to.have.length(1); @@ -371,7 +372,7 @@ describe('Repository', function() { it('should get pull requests on repo', function(done) { const repo = github.getRepo('michael', 'github'); - repo.getPull(153, assertSuccessful(done, function(err, pr) { + repo.getPullRequest(153, assertSuccessful(done, function(err, pr) { expect(pr).to.have.own('title'); expect(pr).to.have.own('body'); expect(pr).to.have.own('url'); @@ -381,8 +382,8 @@ describe('Repository', function() { }); it('should delete a file on the repo', function(done) { - remoteRepo.write('master', fileToDelete, initialText, deleteMessage, assertSuccessful(done, function() { - remoteRepo.remove('master', fileToDelete, assertSuccessful(done)); + remoteRepo.writeFile('master', fileToDelete, initialText, deleteMessage, assertSuccessful(done, function() { + remoteRepo.deleteFile('master', fileToDelete, assertSuccessful(done)); })); }); @@ -392,27 +393,30 @@ describe('Repository', function() { committer: {name: 'Committer Name', email: 'committer@example.com'} }; - remoteRepo.write('dev', fileName, initialText, initialMessage, options, assertSuccessful(done, function(e, r) { - remoteRepo.getCommit('dev', r.commit.sha, assertSuccessful(done, function(err, commit) { - const author = commit.author; - const committer = commit.committer; - expect(author.name).to.be('Author Name'); - expect(author.email).to.be('author@example.com'); - expect(committer.name).to.be('Committer Name'); - expect(committer.email).to.be('committer@example.com'); + remoteRepo.writeFile('dev', + fileName, initialText, initialMessage, options, + assertSuccessful(done, function(error, commit) { + remoteRepo.getCommit(commit.commit.sha, assertSuccessful(done, function(err, commit2) { + const author = commit2.author; + const committer = commit2.committer; + expect(author.name).to.be('Author Name'); + expect(author.email).to.be('author@example.com'); + expect(committer.name).to.be('Committer Name'); + expect(committer.email).to.be('committer@example.com'); - done(); - })); - })); + done(); + })); + }) + ); }); it('should be able to write all the unicode', function(done) { - remoteRepo.write('master', unicodeFileName, unicodeText, unicodeMessage, assertSuccessful(done, + remoteRepo.writeFile('master', unicodeFileName, unicodeText, unicodeMessage, assertSuccessful(done, function(err, commit) { expect(commit.content.name).to.be(unicodeFileName); expect(commit.commit.message).to.be(unicodeMessage); - remoteRepo.read('master', unicodeFileName, assertSuccessful(done, function(err, fileText) { + remoteRepo.getContents('master', unicodeFileName, 'raw', assertSuccessful(done, function(err, fileText) { expect(fileText).to.be(unicodeText); done(); @@ -448,7 +452,7 @@ describe('Repository', function() { encode: false }; - remoteRepo.write('master', imageFileName, imageB64, initialMessage, opts, assertSuccessful(done, + remoteRepo.writeFile('master', imageFileName, imageB64, initialMessage, opts, assertSuccessful(done, function(err, commit) { sha = commit.sha; @@ -457,22 +461,22 @@ describe('Repository', function() { }); it('should be able to write a string blob to the repo', function(done) { - remoteRepo.postBlob('String test', assertSuccessful(done)); + remoteRepo.createBlob('String test', assertSuccessful(done)); }); it('should be able to write a file blob to the repo', function(done) { - remoteRepo.postBlob(imageBlob, assertSuccessful(done)); + remoteRepo.createBlob(imageBlob, assertSuccessful(done)); }); it('should star the repo', function(done) { - remoteRepo.star(testUser.USERNAME, testRepoName, assertSuccessful(done, function() { - remoteRepo.isStarred(testUser.USERNAME, testRepoName, assertSuccessful(done)); + remoteRepo.star(assertSuccessful(done, function() { + remoteRepo.isStarred(assertSuccessful(done)); })); }); it('should unstar the repo', function(done) { - remoteRepo.unstar(testUser.USERNAME, testRepoName, assertSuccessful(done, function() { - remoteRepo.isStarred(testUser.USERNAME, testRepoName, assertSuccessful(done, function(_, isStarred) { + remoteRepo.unstar(assertSuccessful(done, function() { + remoteRepo.isStarred(assertSuccessful(done, function(_, isStarred) { expect(isStarred).to.be(false); done(); })); @@ -488,6 +492,7 @@ describe('Repository', function() { it('should create a release', function(done) { const releaseDef = { + name: releaseName, tag_name: releaseTag, // jscs:ignore target_commitish: sha // jscs:ignore }; @@ -504,7 +509,7 @@ describe('Repository', function() { body: releaseBody }; - remoteRepo.editRelease(releaseId, releaseDef, assertSuccessful(done, function(err, release) { + remoteRepo.updateRelease(releaseId, releaseDef, assertSuccessful(done, function(err, release) { expect(release).to.have.own('name', releaseName); expect(release).to.have.own('body', releaseBody); diff --git a/test/search.spec.js b/test/search.spec.js index 6838b13e..bab9740d 100644 --- a/test/search.spec.js +++ b/test/search.spec.js @@ -1,4 +1,4 @@ -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; import {assertSuccessful} from './helpers/callbacks'; @@ -21,14 +21,14 @@ describe('Search', function() { }); let options = undefined; - search.repositories(options, assertSuccessful(done)); + search.forRepositories(options, assertSuccessful(done)); }); it('should search code', function(done) { let search = github.search({q: 'addClass in:file language:js repo:jquery/jquery'}); let options = undefined; - search.code(options, assertSuccessful(done)); + search.forCode(options, assertSuccessful(done)); }); it('should search issues', function(done) { @@ -39,13 +39,13 @@ describe('Search', function() { }); let options = undefined; - search.issues(options, assertSuccessful(done)); + search.forIssues(options, assertSuccessful(done)); }); it('should search users', function(done) { let search = github.search({q: 'tom repos:>42 followers:>1000'}); let options = undefined; - search.users(options, assertSuccessful(done)); + search.forUsers(options, assertSuccessful(done)); }); }); diff --git a/test/user.spec.js b/test/user.spec.js index c3e584e0..c318aa0a 100644 --- a/test/user.spec.js +++ b/test/user.spec.js @@ -1,15 +1,6 @@ -import expect from 'must'; - -import Github from '../src/Github'; +import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; -import {assertSuccessful} from './helpers/callbacks'; - -function assertArray(done) { - return assertSuccessful(done, function(err, result) { - expect(result).to.be.an.array(); - done(); - }); -} +import {assertSuccessful, assertArray} from './helpers/callbacks'; describe('User', function() { let github; @@ -25,7 +16,7 @@ describe('User', function() { }); it('should get user repos', function(done) { - user.repos(assertArray(done)); + user.getRepos(assertArray(done)); }); it('should get user repos with options', function(done) { @@ -36,19 +27,19 @@ describe('User', function() { page: 10 }; - user.repos(filterOpts, assertArray(done)); + user.getRepos(filterOpts, assertArray(done)); }); it('should get user orgs', function(done) { - user.orgs(assertArray(done)); + user.getOrgs(assertArray(done)); }); it('should get user gists', function(done) { - user.gists(assertArray(done)); + user.getGists(assertArray(done)); }); it('should get user notifications', function(done) { - user.notifications(assertArray(done)); + user.getNotifications(assertArray(done)); }); it('should get user notifications with options', function(done) { @@ -59,38 +50,15 @@ describe('User', function() { before: '2015-02-01T00:00:00Z' }; - user.notifications(filterOpts, assertArray(done)); - }); - - it('should show user', function(done) { - user.show('ingalls', assertSuccessful(done)); + user.getNotifications(filterOpts, assertArray(done)); }); - it('should show user\'s repos', function(done) { - user.userRepos('aendrew', assertArray(done)); - }); - - it('should show user\'s repos with options', function(done) { - const filterOpts = { - type: 'owner', - sort: 'updated', - per_page: 90, // jscs:ignore - page: 1 - }; - - user.userRepos('aendrew', filterOpts, assertArray(done)); + it('should get the user\'s profile', function(done) { + user.getProfile(assertSuccessful(done)); }); it('should show user\'s starred repos', function(done) { - user.userStarred(testUser.USERNAME, assertArray(done)); - }); - - it('should show user\'s gists', function(done) { - user.userGists(testUser.USERNAME, assertArray(done)); - }); - - it('should show user\'s organisation repos', function(done) { - user.orgRepos('openaddresses', assertArray(done)); + user.getStarredRepos(assertArray(done)); }); it('should follow user', function(done) { From 1e817b11fd6e97857c8848031147bc9dfa2a8e04 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 27 Apr 2016 15:46:46 -0500 Subject: [PATCH 090/217] Update the readme --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 478dc29a..7428cdab 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,17 @@ # Github.js [![Downloads per month](https://img.shields.io/npm/dm/github-api.svg?maxAge=2592000)][npm-package] -[![Latest version](https://img.shields.io/npm/v/github-api.svg?maxAge=2592000)][npm-package] +[![Latest version](https://img.shields.io/npm/v/github-api.svg?maxAge=3600)][npm-package] [![Gitter](https://img.shields.io/gitter/room/michael/github.js.svg?maxAge=2592000)][gitter] -[![Travis](https://img.shields.io/travis/michael/github.svg?maxAge=2592000)][travis-ci] -[![Codecov](https://img.shields.io/codecov/c/github/michael/github.svg?maxAge=2592000)][codecov] +[![Travis](https://img.shields.io/travis/michael/github.svg?maxAge=60)][travis-ci] + Github.js provides a minimal higher-level wrapper around Github's API. It was concieved in the context of [Prose][prose], a content editor for GitHub. +## Docs +Read the [docs][docs] + ## Installation Github.js is available from `npm` or (soon) [cdnjs][cdnjs]. @@ -105,3 +108,4 @@ yahoo.getRepos(function(err, repos) { [npm-package]: https://www.npmjs.com/package/github-api [prose]: http://prose.io [xhr-link]: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx +[docs]: http://clayreimann.me/github/ From bc624225b36910a22306ff2089348de0e103f652 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 27 Apr 2016 15:47:33 -0500 Subject: [PATCH 091/217] 1.0.0 --- .travis.yml | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 48cb5941..3ee3bdd3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,5 +23,6 @@ deploy: skip_cleanup: true on: tags: true + email: clayreimann@gmail.com api_key: secure: TZHqJ9Kh2Qf0GAVDjEOQ01Ez6rGMYHKwVLOKTbnb7nSzF7iiGNT4UwzvYawm0T9p1k7X1WOqW3l7OEbIwoKl7/9azT4BBJm7qUMRfB9Zio5cL3rKubJVz7+LEEIW4iBeDWLanhUDgy9BO2JKCt8bfp/U2tltgXtu9Fm/UFPALI8= diff --git a/package.json b/package.json index 9c3f4f69..5f094210 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "0.11.2", + "version": "1.0.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From da54c02a7323aa503f66fce3d4a3eafce3c01bc9 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Fri, 29 Apr 2016 16:37:04 -0500 Subject: [PATCH 092/217] docs: point docs link to gh-pages for this repo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7428cdab..44765f02 100644 --- a/README.md +++ b/README.md @@ -108,4 +108,4 @@ yahoo.getRepos(function(err, repos) { [npm-package]: https://www.npmjs.com/package/github-api [prose]: http://prose.io [xhr-link]: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx -[docs]: http://clayreimann.me/github/ +[docs]: http://michael.github.io/github/ From 37084d7a2f9be16b66e4d29c07e767ff0d14e14c Mon Sep 17 00:00:00 2001 From: Kenshi Kamata Date: Tue, 3 May 2016 03:07:50 +0900 Subject: [PATCH 093/217] feature(gist): add comment-related features to Gist * Add API to list all of a gist's comments * Allow CRUD-ing comments on gists --- lib/Gist.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++ test/gist.spec.js | 35 +++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/lib/Gist.js b/lib/Gist.js index d92cc678..64d756a8 100644 --- a/lib/Gist.js +++ b/lib/Gist.js @@ -107,6 +107,63 @@ class Gist extends Requestable { isStarred(cb) { return this._request204or404(`/gists/${this.__id}/star`, null, cb); } + + + + /** + * List the comments on a gist + * @see https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist + * @param {Requestable.callback} [cb] - will receive the array of comments + * @return {Promise} - the promise for the http request + */ + listComments(cb) { + return this._requestAllPages(`/gists/${this.__id}/comments`, null, cb); + } + + /** + * Fetch a comment of the gist + * @see https://developer.github.com/v3/gists/comments/#get-a-single-comment + * @param {number} comment - the id of the comment + * @param {Requestable.callback} [cb] - will receive the comment + * @return {Promise} - the Promise for the http request + */ + getComment(comment, cb) { + return this._request('GET', `/gists/${this.__id}/comments/${comment}`, null, cb); + } + + /** + * Create Comment to a gist. + * @see https://developer.github.com/v3/gists/comments/#create-a-comment + * @param {string} comment - the comment to add + * @param {Requestable.callback} [cb] - the function that receives the API result + * @return {Promise} - the Promise for the http request + */ + createComment(comment, cb) { + return this._request('POST', `/gists/${this.__id}/comments`, {body: comment}, cb); + } + + /** + * Edit a Gist Comment + * @see https://developer.github.com/v3/gists/comments/#edit-a-comment + * @param {number} comment - the id of the comment + * @param {string} body - the new comment + * @param {Requestable.callback} [cb] - will receive the modified issue + * @return {Promise} - the promise for the http request + */ + editComment(comment, body, cb) { + return this._request('PATCH', `/gists/${this.__id}/comments/${comment}`, {body: body}, cb); + } + + /** + * Delete a comment of a gist. + * @see https://developer.github.com/v3/gists/comments/#delete-a-comment + * @param {number} comment - the id of the comment + * @param {Requestable.callback} [cb] - will receive true if the request succeeds + * @return {Promise} - the Promise for the http request + */ + deleteComment(comment, cb) { + return this._request('DELETE', `/gists/${this.__id}/comments/${comment}`, null, cb); + } } module.exports = Gist; diff --git a/test/gist.spec.js b/test/gist.spec.js index 01ee5644..cd503ca4 100644 --- a/test/gist.spec.js +++ b/test/gist.spec.js @@ -9,6 +9,7 @@ describe('Gist', function() { let gist; let gistId; let github; + let commentId; before(function() { github = new Github({ @@ -64,6 +65,40 @@ describe('Gist', function() { })); })); }); + + it('should create a comment a gist', function(done) { + gist.createComment("Comment test", assertSuccessful(done, function(err, comment) { + expect(comment).to.have.own('body', 'Comment test'); + commentId = comment.id + done(); + })); + }); + + it('should list comments', function(done) { + gist.listComments(assertSuccessful(done, function(err, comments) { + expect(comments).to.be.an.array(); + done(); + })); + }); + + it('should get comment', function(done) { + gist.getComment(commentId, assertSuccessful(done, function(err, issue) { + expect(issue).to.have.own('id', commentId); + done(); + })); + }); + + it('should edit comment', function(done) { + const newComment = 'new comment test'; + gist.editComment(commentId, newComment, assertSuccessful(done, function(err, comment) { + expect(comment).to.have.own('body', newComment); + done(); + })); + }); + + it('should delete comment', function(done) { + gist.deleteComment(commentId, assertSuccessful(done)); + }); }); describe('deleting', function() { From 7bbe75d3a75de7e2cb08ceaa0613120bf5c6dde5 Mon Sep 17 00:00:00 2001 From: Kevin Wang Date: Tue, 3 May 2016 09:22:18 -0400 Subject: [PATCH 094/217] bugfix(repo): return a Promise from deleteFile Fix the bug in which deleteFile doesn't currently return anything --- lib/Repository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Repository.js b/lib/Repository.js index 838cd5e8..db1f2509 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -489,7 +489,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ deleteFile(branch, path, cb) { - this.getSha(branch, path) + return this.getSha(branch, path) .then((response) => { const deleteCommit = { message: `Delete the file at '${path}'`, From 213447d0807069935b5ede063998cf7efacb5536 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 3 May 2016 08:46:10 -0500 Subject: [PATCH 095/217] chore: update .gitignore for gh-pages artifacts * tweak documentation comments for new comment-related Gist functions --- .gitignore | 2 ++ lib/Gist.js | 14 ++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 1f5a1c95..6d462a19 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.sass-cache/ +_site/ docs/ dist/ coverage/ diff --git a/lib/Gist.js b/lib/Gist.js index 64d756a8..14b71322 100644 --- a/lib/Gist.js +++ b/lib/Gist.js @@ -108,10 +108,8 @@ class Gist extends Requestable { return this._request204or404(`/gists/${this.__id}/star`, null, cb); } - - /** - * List the comments on a gist + * List the gist's comments * @see https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist * @param {Requestable.callback} [cb] - will receive the array of comments * @return {Promise} - the promise for the http request @@ -121,7 +119,7 @@ class Gist extends Requestable { } /** - * Fetch a comment of the gist + * Fetch one of the gist's comments * @see https://developer.github.com/v3/gists/comments/#get-a-single-comment * @param {number} comment - the id of the comment * @param {Requestable.callback} [cb] - will receive the comment @@ -132,7 +130,7 @@ class Gist extends Requestable { } /** - * Create Comment to a gist. + * Comment on a gist * @see https://developer.github.com/v3/gists/comments/#create-a-comment * @param {string} comment - the comment to add * @param {Requestable.callback} [cb] - the function that receives the API result @@ -143,11 +141,11 @@ class Gist extends Requestable { } /** - * Edit a Gist Comment + * Edit a comment on the gist * @see https://developer.github.com/v3/gists/comments/#edit-a-comment * @param {number} comment - the id of the comment * @param {string} body - the new comment - * @param {Requestable.callback} [cb] - will receive the modified issue + * @param {Requestable.callback} [cb] - will receive the modified comment * @return {Promise} - the promise for the http request */ editComment(comment, body, cb) { @@ -155,7 +153,7 @@ class Gist extends Requestable { } /** - * Delete a comment of a gist. + * Delete a comment on the gist. * @see https://developer.github.com/v3/gists/comments/#delete-a-comment * @param {number} comment - the id of the comment * @param {Requestable.callback} [cb] - will receive true if the request succeeds From ae8d5ebfb5244edf00d41b44288efd8d40f2441b Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 3 May 2016 08:46:18 -0500 Subject: [PATCH 096/217] 1.1.0 --- CHANGELOG.md | 22 +++++++++++++++++++--- package.json | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 075c2cdc..c6620644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,22 @@ -## Change Log +# Change Log -### 1.0.0 +### Features + +### Fixes + +## 1.1.0 - 2015/05/03 +### Features +Added methods for commenting on Gists: +* `Gist.listComments` +* `Gist.getComment` +* `Gist.editComment` +* `Gist.deleteComment` +* `Gist.createComment` + +### Fixes +* `Repository.deleteFile` now correctly returns a promise. + +## 1.0.0 - 2015/04/27 Complete rewrite in ES2015. * Promise-ified the API @@ -8,7 +24,7 @@ Complete rewrite in ES2015. * Modularized codebase * Refactored tests to run primarily in mocha -#### Breaking changes +### Breaking changes Most of the breaking changes are just methods that got renamed. The changes to `User` and `Organization` are deeper changes that now scope a particular `User` or `Organization` to the entity they were instantiated with. You will need separate `User`s to query data about different user accounts. diff --git a/package.json b/package.json index 5f094210..8cef2c2c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "1.0.0", + "version": "1.1.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From e404aebf2609c407df1819eddcb989273d7342d5 Mon Sep 17 00:00:00 2001 From: Bernhard Bezdek Date: Mon, 9 May 2016 17:11:50 +0200 Subject: [PATCH 097/217] feature(repository): add getReleases Closes #320 --- lib/Repository.js | 10 ++++++++++ test/repository.spec.js | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index db1f2509..96d26c71 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -629,6 +629,16 @@ class Repository extends Requestable { return this._request('PATCH', `/repos/${this.__fullname}/releases/${id}`, options, cb); } + /** + * Get information about all releases + * @see https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository + * @param {Requestable.callback} cb - will receive the release information + * @return {Promise} - the promise for the http request + */ + getReleases(cb) { + return this._request('GET', `/repos/${this.__fullname}/releases`, null, cb); + } + /** * Get information about a release * @see https://developer.github.com/v3/repos/releases/#get-a-single-release diff --git a/test/repository.spec.js b/test/repository.spec.js index d097d431..7448f78e 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -517,6 +517,13 @@ describe('Repository', function() { })); }); + it('should read all releases', function(done) { + remoteRepo.getReleases(assertSuccessful(done, function(err, releases) { + expect(releases).to.be.an.array(); + done(); + })); + }); + it('should read a release', function(done) { remoteRepo.getRelease(releaseId, assertSuccessful(done, function(err, release) { expect(release).to.have.own('name', releaseName); From 15c68a57e488574877a4201d1f3de11a1306eae7 Mon Sep 17 00:00:00 2001 From: Ray Hua Date: Wed, 11 May 2016 23:58:49 +1000 Subject: [PATCH 098/217] feature(comment): add list, get, edit and delete for issue comments --- lib/Issue.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ test/issue.spec.js | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/lib/Issue.js b/lib/Issue.js index 0acd7d4c..6b8ba6a3 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -44,6 +44,28 @@ class Issue extends Requestable { this._requestAllPages(`/repos/${this.__repository}/issues`, options, cb); } + /** + * List comments on an issue + * @see https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue + * @param {number} issue - the id of the issue to get comments from + * @param {Requestable.callback} [cb] - will receive the comments + * @return {Promise} - the promise for the http request + */ + listIssueComments(issue, cb) { + this._request('GET', `/repos/${this.__repository}/issues/${issue}/comments`, null, cb); // jscs:ignore + } + + /** + * Get a single comment on an issue + * @see https://developer.github.com/v3/issues/comments/#get-a-single-comment + * @param {number} id - the comment id to get + * @param {Requestable.callback} [cb] - will receive the comment + * @return {Promise} - the promise for the http request + */ + getIssueComment(id, cb) { + this._request('GET', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore + } + /** * Comment on an issue * @see https://developer.github.com/v3/issues/comments/#create-a-comment @@ -56,6 +78,29 @@ class Issue extends Requestable { this._request('POST', `/repos/${this.__repository}/issues/${issue}/comments`, {body: comment}, cb); // jscs:ignore } + /** + * Edit a comment on an issue + * @see https://developer.github.com/v3/issues/comments/#edit-a-comment + * @param {number} id - the comment id to edit + * @param {string} comment - the comment to edit + * @param {Requestable.callback} [cb] - will receive the edited comment + * @return {Promise} - the promise for the http request + */ + editIssueComment(id, comment, cb) { + this._request('PATCH', `/repos/${this.__repository}/issues/comments/${id}`, {body: comment}, cb); // jscs:ignore + } + + /** + * Delete a comment on an issue + * @see https://developer.github.com/v3/issues/comments/#delete-a-comment + * @param {number} id - the comment id to delete + * @param {Requestable.callback} [cb] - will receive true if the request is successful + * @return {Promise} - the promise for the http request + */ + deleteIssueComment(id, cb) { + this._request('DELETE', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore + } + /** * Edit an issue * @see https://developer.github.com/v3/issues/#edit-an-issue diff --git a/test/issue.spec.js b/test/issue.spec.js index af911777..bc0b224e 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -8,6 +8,7 @@ describe('Issue', function() { let github; let remoteIssues; let remoteIssueId; + let remoteIssueCommentId; before(function() { github = new Github({ @@ -38,7 +39,7 @@ describe('Issue', function() { }); }); - describe('creating/modifiying', function() { + describe('creating/modifiying/editing/deleting', function() { // 200ms between tests so that Github has a chance to settle beforeEach(function(done) { setTimeout(done, 200); @@ -67,6 +68,38 @@ describe('Issue', function() { })); }); + it('should list issue comments', function(done) { + remoteIssues.listIssueComments(remoteIssueId, assertSuccessful(done, function(err, comments) { + expect(comments).to.be.an.array(); + expect(comments[0]).to.have.own('body', 'Comment test'); + remoteIssueCommentId = comments[0].id + done(); + })); + }); + + it('should get a single issue comment', function(done) { + remoteIssues.getIssueComment(remoteIssueCommentId, assertSuccessful(done, function(err, comment) { + expect(comment).to.have.own('body', 'Comment test'); + done(); + })); + }); + + it('should edit issue comment', function(done) { + remoteIssues.editIssueComment(remoteIssueCommentId, 'Comment test edited', assertSuccessful(done, function(err, comment) { + expect(comment).to.have.own('body', 'Comment test edited'); + + done(); + })); + }); + + it('should delete issue comment', function(done) { + remoteIssues.deleteIssueComment(remoteIssueCommentId, assertSuccessful(done, function(err, response) { + expect(response).to.be.true; + + done(); + })); + }); + it('should edit issues title', function(done) { const newProps = { title: 'Edited title' From 25b95a6cb9720b3c91d90189d6369318cc8c54b2 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 May 2016 09:12:10 -0500 Subject: [PATCH 099/217] feature(search): return all pages from a search Closes #302 --- lib/Requestable.js | 2 +- lib/Search.js | 21 +++++++++++++++------ test/search.spec.js | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/Requestable.js b/lib/Requestable.js index bd89910e..e447a7f7 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -203,7 +203,7 @@ class Requestable { _requestAllPages(path, options, cb, results) { results = results || []; - return this._request('GET', path, null) + return this._request('GET', path, options) .then((response) => { results.push.apply(results, response.data); diff --git a/lib/Search.js b/lib/Search.js index 0b61a8c3..f134087e 100644 --- a/lib/Search.js +++ b/lib/Search.js @@ -24,11 +24,20 @@ class Search extends Requestable { this.__defaults = this._getOptionsWithDefaults(defaults); } + /** + * Available search options + * @see https://developer.github.com/v3/search/#parameters + * @typedef {Object} Search.Params + * @param {string} q - the query to make + * @param {string} sort - the sort field, one of `stars`, `forks`, or `updated`. + * Default is [best match](https://developer.github.com/v3/search/#ranking-search-results) + * @param {string} order - the ordering, either `asc` or `desc` + */ /** * Perform a search on the GitHub API * @private * @param {string} path - the scope of the search - * @param {Object} [withOptions] - additional parameters for the search + * @param {Search.Params} [withOptions] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ @@ -38,13 +47,13 @@ class Search extends Requestable { Object.keys(withOptions).forEach((prop) => requestOptions[prop] = withOptions[prop]); log(`searching ${path} with options:`, requestOptions); - return this._request('GET', `/search/${path}`, requestOptions, cb); + return this._requestAllPages(`/search/${path}`, requestOptions, cb); } /** * Search for repositories * @see https://developer.github.com/v3/search/#search-repositories - * @param {Object} [options] - additional parameters for the search + * @param {Search.Params} [options] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ @@ -55,7 +64,7 @@ class Search extends Requestable { /** * Search for code * @see https://developer.github.com/v3/search/#search-code - * @param {Object} [options] - additional parameters for the search + * @param {Search.Params} [options] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ @@ -66,7 +75,7 @@ class Search extends Requestable { /** * Search for issues * @see https://developer.github.com/v3/search/#search-issues - * @param {Object} [options] - additional parameters for the search + * @param {Search.Params} [options] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ @@ -77,7 +86,7 @@ class Search extends Requestable { /** * Search for users * @see https://developer.github.com/v3/search/#search-users - * @param {Object} [options] - additional parameters for the search + * @param {Search.Params} [options] - additional parameters for the search * @param {Requestable.callback} [cb] - will receive the results of the search * @return {Promise} - the promise for the http request */ diff --git a/test/search.spec.js b/test/search.spec.js index bab9740d..37fa9146 100644 --- a/test/search.spec.js +++ b/test/search.spec.js @@ -33,7 +33,7 @@ describe('Search', function() { it('should search issues', function(done) { let search = github.search({ - q: 'windows label:bug language:python state:open', + q: 'windows pip label:bug language:python state:open ', sort: 'created', order: 'asc' }); From c35cdbf7713a3f64e95c97dc035d52fb4f3498d6 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 May 2016 09:37:21 -0500 Subject: [PATCH 100/217] feature(organization): add api to list organization members Closes #265 --- lib/Organization.js | 13 +++++++++++++ test/organization.spec.js | 24 ++++++++++++++++++------ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/lib/Organization.js b/lib/Organization.js index c3d3dd70..44d3d85d 100644 --- a/lib/Organization.js +++ b/lib/Organization.js @@ -44,6 +44,19 @@ class Organization extends Requestable { return this._requestAllPages(`/orgs/${this.__name}/repos`, requestOptions, cb); } + + /** + * List the users who are members of the company + * @see https://developer.github.com/v3/orgs/members/#members-list + * @param {object} options + * @param {string} [options.filter=all] - can be either `2fa_disabled` or `all` + * @param {string} [options.role=all] - can be one of: `all`, `admin`, or `member` + * @param {Requestable.callback} [cb] - will receive the list of users + * @return {Promise} - the promise for the http request + */ + listMembers(options, cb) { + return this._request('GET', `/orgs/${this.__name}/members`, options, cb); + } } module.exports = Organization; diff --git a/test/organization.spec.js b/test/organization.spec.js index 760e8ac9..89992045 100644 --- a/test/organization.spec.js +++ b/test/organization.spec.js @@ -5,9 +5,9 @@ import testUser from './fixtures/user.json'; import {assertSuccessful, assertArray} from './helpers/callbacks'; import getTestRepoName from './helpers/getTestRepoName'; -// jscs:disable requireCamelCaseOrUpperCaseIdentifiers describe('Organization', function() { let github; + const ORG_NAME = 'github-tools'; before(function() { github = new Github({ @@ -22,12 +22,24 @@ describe('Organization', function() { let organization; before(function() { - organization = github.getOrganization('openaddresses'); + organization = github.getOrganization(ORG_NAME); }); it('should show user\'s organisation repos', function(done) { organization.getRepos(assertArray(done)); }); + + it('should list the users in the organization', function(done) { + organization.listMembers() + .then(function({data: members}) { + expect(members).to.be.an.array(); + + let hasClayReimann = members.reduce((found, member) => member.login === 'clayreimann' || found, false); + expect(hasClayReimann).to.be.true(); + + done(); + }).catch(done); + }); }); describe('creating/updating', function() { @@ -44,14 +56,14 @@ describe('Organization', function() { description: 'test create organization repo', homepage: 'https://github.com/', private: false, - has_issues: true, - has_wiki: true, - has_downloads: true + has_issues: true, // jscs:ignore + has_wiki: true, // jscs:ignore + has_downloads: true // jscs:ignore }; organization.createRepo(options, assertSuccessful(done, function(err, repo) { expect(repo.name).to.equal(testRepoName); - expect(repo.full_name).to.equal(`${testUser.ORGANIZATION}/${testRepoName}`); + expect(repo.full_name).to.equal(`${testUser.ORGANIZATION}/${testRepoName}`); // jscs:ignore done(); })); }); From 34a350d59e0a7d7b53c05109b2ad9b8e22ec7ac0 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 May 2016 10:07:17 -0500 Subject: [PATCH 101/217] feature(organization): add isMember api Closes #289 --- lib/Organization.js | 10 ++++++++++ test/organization.spec.js | 11 ++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/Organization.js b/lib/Organization.js index 44d3d85d..4726d4b3 100644 --- a/lib/Organization.js +++ b/lib/Organization.js @@ -45,6 +45,16 @@ class Organization extends Requestable { return this._requestAllPages(`/orgs/${this.__name}/repos`, requestOptions, cb); } + /** + * Query if the user is a member or not + * @param {string} username - the user in question + * @param {Requestable.callback} [cb] - will receive true if the user is a member + * @return {Promise} - the promise for the http request + */ + isMember(username, cb) { + return this._request204or404(`/orgs/${this.__name}/members/${username}`, null, cb); + } + /** * List the users who are members of the company * @see https://developer.github.com/v3/orgs/members/#members-list diff --git a/test/organization.spec.js b/test/organization.spec.js index 89992045..dd0a32c7 100644 --- a/test/organization.spec.js +++ b/test/organization.spec.js @@ -8,6 +8,7 @@ import getTestRepoName from './helpers/getTestRepoName'; describe('Organization', function() { let github; const ORG_NAME = 'github-tools'; + const MEMBER_NAME = 'clayreimann'; before(function() { github = new Github({ @@ -34,12 +35,20 @@ describe('Organization', function() { .then(function({data: members}) { expect(members).to.be.an.array(); - let hasClayReimann = members.reduce((found, member) => member.login === 'clayreimann' || found, false); + let hasClayReimann = members.reduce((found, member) => member.login === MEMBER_NAME || found, false); expect(hasClayReimann).to.be.true(); done(); }).catch(done); }); + + it('should test for membership', function(done) { + organization.isMember(MEMBER_NAME) + .then(function(isMember) { + expect(isMember).to.be.true(); + done(); + }).catch(done); + }); }); describe('creating/updating', function() { From 0e3d37b9931bac3bdf79b9d467e7fd5bc9cee8fa Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 May 2016 10:36:55 -0500 Subject: [PATCH 102/217] fix: ensure all functions return a promise Closes #326 --- lib/Issue.js | 18 +++++++++--------- lib/Organization.js | 2 +- lib/Repository.js | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/Issue.js b/lib/Issue.js index 6b8ba6a3..706c3b60 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -30,7 +30,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ createIssue(issueData, cb) { - this._request('POST', `/repos/${this.__repository}/issues`, issueData, cb); + return this._request('POST', `/repos/${this.__repository}/issues`, issueData, cb); } /** @@ -41,7 +41,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ listIssues(options, cb) { - this._requestAllPages(`/repos/${this.__repository}/issues`, options, cb); + return this._requestAllPages(`/repos/${this.__repository}/issues`, options, cb); } /** @@ -52,7 +52,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ listIssueComments(issue, cb) { - this._request('GET', `/repos/${this.__repository}/issues/${issue}/comments`, null, cb); // jscs:ignore + return this._request('GET', `/repos/${this.__repository}/issues/${issue}/comments`, null, cb); // jscs:ignore } /** @@ -63,7 +63,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ getIssueComment(id, cb) { - this._request('GET', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore + return this._request('GET', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore } /** @@ -75,7 +75,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ createIssueComment(issue, comment, cb) { - this._request('POST', `/repos/${this.__repository}/issues/${issue}/comments`, {body: comment}, cb); // jscs:ignore + return this._request('POST', `/repos/${this.__repository}/issues/${issue}/comments`, {body: comment}, cb); // jscs:ignore } /** @@ -87,7 +87,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ editIssueComment(id, comment, cb) { - this._request('PATCH', `/repos/${this.__repository}/issues/comments/${id}`, {body: comment}, cb); // jscs:ignore + return this._request('PATCH', `/repos/${this.__repository}/issues/comments/${id}`, {body: comment}, cb); // jscs:ignore } /** @@ -98,7 +98,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ deleteIssueComment(id, cb) { - this._request('DELETE', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore + return this._request('DELETE', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore } /** @@ -110,7 +110,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ editIssue(issue, issueData, cb) { - this._request('PATCH', `/repos/${this.__repository}/issues/${issue}`, issueData, cb); + return this._request('PATCH', `/repos/${this.__repository}/issues/${issue}`, issueData, cb); } /** @@ -121,7 +121,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ getIssue(issue, cb) { - this._request('GET', `/repos/${this.__repository}/issues/${issue}`, null, cb); + return this._request('GET', `/repos/${this.__repository}/issues/${issue}`, null, cb); } } diff --git a/lib/Organization.js b/lib/Organization.js index 4726d4b3..1e85dc97 100644 --- a/lib/Organization.js +++ b/lib/Organization.js @@ -30,7 +30,7 @@ class Organization extends Requestable { * @return {Promise} - the promise for the http request */ createRepo(options, cb) { - this._request('POST', `/orgs/${this.__name}/repos`, options, cb); + return this._request('POST', `/orgs/${this.__name}/repos`, options, cb); } /** diff --git a/lib/Repository.js b/lib/Repository.js index 96d26c71..5ab31a85 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -530,7 +530,7 @@ class Repository extends Requestable { return cb(null, this.__currentTree.sha); } - this.getRef(`heads/${branch}`, function(err, sha) { + return this.getRef(`heads/${branch}`, function(err, sha) { this.__currentTree.branch = branch; this.__currentTree.sha = sha; cb(err, sha); From 2a258658ee9a5a56c6252ab46df0fbc2815a69fc Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 May 2016 10:53:03 -0500 Subject: [PATCH 103/217] refactor(repository): change getReleases to listReleases for consistency --- lib/Repository.js | 2 +- test/repository.spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Repository.js b/lib/Repository.js index 5ab31a85..557c1252 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -635,7 +635,7 @@ class Repository extends Requestable { * @param {Requestable.callback} cb - will receive the release information * @return {Promise} - the promise for the http request */ - getReleases(cb) { + listReleases(cb) { return this._request('GET', `/repos/${this.__fullname}/releases`, null, cb); } diff --git a/test/repository.spec.js b/test/repository.spec.js index 7448f78e..34ecb371 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -518,7 +518,7 @@ describe('Repository', function() { }); it('should read all releases', function(done) { - remoteRepo.getReleases(assertSuccessful(done, function(err, releases) { + remoteRepo.listReleases(assertSuccessful(done, function(err, releases) { expect(releases).to.be.an.array(); done(); })); From 66d504f05661eedb8ad507dbd931d8c2d26b4b4d Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 May 2016 10:46:32 -0500 Subject: [PATCH 104/217] chore: update Readme, package scripts, and Changelog --- CHANGELOG.md | 19 +++++++++++++++++++ README.md | 29 ++++++++++++++++++----------- package.json | 6 ++---- release.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 15 deletions(-) create mode 100755 release.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index c6620644..7febae75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,28 @@ # Change Log +## master ### Features ### Fixes +## 1.2.0 - 2015/05/11 +### Features +* Search API now returns all pages of results +* Added `Repository.listReleases` + +Added functions for querying organization membership +* `Organization.listMembers` +* `Organization.isMember` + +Added functions for issue comments +* `Issue.listComments` +* `Issue.getComment` +* `Issue.editComment` +* `Issue.deleteComment` + +### Fixes +* all functions now return a Promise + ## 1.1.0 - 2015/05/03 ### Features Added methods for commenting on Gists: diff --git a/README.md b/README.md index 44765f02..98716949 100644 --- a/README.md +++ b/README.md @@ -9,22 +9,29 @@ Github.js provides a minimal higher-level wrapper around Github's API. It was concieved in the context of [Prose][prose], a content editor for GitHub. -## Docs -Read the [docs][docs] +## [Read the docs][docs] ## Installation -Github.js is available from `npm` or (soon) [cdnjs][cdnjs]. +Github.js is available from `npm` or [npmcdn][npmcdn]. -``` +```shell npm install github-api ``` +```html + + + + + +``` + ## Compatibility Github.js is tested on Node: -* 0.10 -* 0.12 -* 4.x * 5.x +* 4.x +* 0.12 +* 0.10 ## GitHub Tools @@ -101,11 +108,11 @@ yahoo.getRepos(function(err, repos) { }) ``` -[cdnjs]: https://cdnjs.com/ [codecov]: https://codecov.io/github/michael/github?branch=master -[travis-ci]: https://travis-ci.org/michael/github +[docs]: http://michael.github.io/github/ [gitter]: https://gitter.im/michael/github -[npm-package]: https://www.npmjs.com/package/github-api +[npm-package]: https://www.npmjs.com/package/github-api/ +[npmcdn]: https://npmcdn.com/github-api/ [prose]: http://prose.io +[travis-ci]: https://travis-ci.org/michael/github [xhr-link]: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx -[docs]: http://michael.github.io/github/ diff --git a/package.json b/package.json index 8cef2c2c..72d330cb 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,9 @@ "build": "gulp build", "test": "mocha --opts ./mocha.opts test/*.spec.js", "test-verbose": "DEBUG=github* npm test", - "test-browser": "", "lint": "gulp lint", - "generate-docs": "node_modules/.bin/jsdoc -c .jsdoc.json --verbose", - "codecov": "node_modules/.bin/codecov", - "show-coverage-html": "open coverage/lcov-report/index.html" + "make-docs": "node_modules/.bin/jsdoc -c .jsdoc.json --verbose", + "release": "./release.sh" }, "babel": { "presets": [ diff --git a/release.sh b/release.sh new file mode 100755 index 00000000..b85b1796 --- /dev/null +++ b/release.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# This is the automated release script + +# bump the version +echo "npm version $1" +npm version $1 +git push +git push --tags + +# start from a clean state +rm -rf docs/ out/ +mkdir out + +# build the docs +npm run make-docs +VERSION=`ls docs/github-api` + +# switch to gh-pages and add the docs +mv docs/github-api/* out/ +rm -rf docs/ + +git checkout gh-pages +mv out/* docs/ +echo $VERSION >> _data/versions.csv +git co -am "adding docs for v$VERSION" +git push From a6231e0b65e66a0705cc05519d06145bd4c65a73 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 May 2016 16:32:52 -0500 Subject: [PATCH 105/217] 1.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 72d330cb..f7a62198 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "1.1.0", + "version": "1.2.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 02b71b10e11f4e81db181f027cbe04d551455255 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 12 May 2016 07:20:44 -0500 Subject: [PATCH 106/217] fix(repository): replace references of `postTree` with `createTree` Closes #282 --- CHANGELOG.md | 4 ++++ lib/Repository.js | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7febae75..1fec4bcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ ### Fixes +## 1.2.1 +### Fixes +* `Repository`: Replace invalid references to `postTree` with `createTree` + ## 1.2.0 - 2015/05/11 ### Features * Search API now returns all pages of results diff --git a/lib/Repository.js b/lib/Repository.js index 557c1252..8b302558 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -254,7 +254,7 @@ class Repository extends Requestable { * @param {string} blobSHA - the SHA for the blob to put at `path` * @param {Requestable.callback} cb - will receive the new tree that is created * @return {Promise} - the promise for the http request - * @deprecated use {@link Repository#postTree} instead + * @deprecated use {@link Repository#createTree} instead */ updateTree(baseTreeSHA, path, blobSHA, cb) { let newTree = { @@ -516,7 +516,7 @@ class Repository extends Requestable { } }); - this.postTree(tree, function(err, rootTree) { + this.createTree(tree, function(err, rootTree) { this.commit(latestCommit, rootTree, 'Deleted ' + path, function(err, commit) { this.updateHead(branch, commit, cb); }); From f866689222713bfe7ec37036da6e9add3fb30814 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 12 May 2016 07:22:45 -0500 Subject: [PATCH 107/217] 1.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f7a62198..f74481c1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "1.2.0", + "version": "1.2.1", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 3d761f517e9498b3b275832a1426a16312ad8963 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 12 May 2016 07:29:56 -0500 Subject: [PATCH 108/217] chore: update the release script to so docs generation doesn't fail --- release.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/release.sh b/release.sh index b85b1796..0f57621e 100755 --- a/release.sh +++ b/release.sh @@ -1,6 +1,9 @@ #!/bin/bash # This is the automated release script +# make sure all our dependencies are installed so we can publish docs +npm install + # bump the version echo "npm version $1" npm version $1 From 4268802ebf9ee9597951ed614cc76bf42c75e601 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 12 May 2016 16:27:49 -0500 Subject: [PATCH 109/217] feature(Issue): add Milestone API Closes #68 Closes #268 --- CHANGELOG.md | 5 +++ lib/Issue.js | 56 +++++++++++++++++++++++++ lib/Requestable.js | 19 +++++---- test/issue.spec.js | 100 ++++++++++++++++++++++++++++++++++++--------- 4 files changed, 153 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fec4bcf..5650c231 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## master ### Features +Added Milestone API +* `Issue.listMilestones` +* `Issue.getMilestone` +* `Issue.editMilestone` +* `Issue.deleteMilestone` ### Fixes diff --git a/lib/Issue.js b/lib/Issue.js index 706c3b60..d1e35c89 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -123,6 +123,62 @@ class Issue extends Requestable { getIssue(issue, cb) { return this._request('GET', `/repos/${this.__repository}/issues/${issue}`, null, cb); } + + /** + * List the milestones for the repository + * @see https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository + * @param {Object} options - filtering options + * @param {Requestable.callback} [cb] - will receive the array of milestones + * @return {Promise} - the promise for the http request + */ + listMilestones(options, cb) { + return this._request('GET', `/repos/${this.__repository}/milestones`, options, cb); + } + + /** + * Get a milestone + * @see https://developer.github.com/v3/issues/milestones/#get-a-single-milestone + * @param {string} milestone - the id of the milestone to fetch + * @param {Requestable.callback} [cb] - will receive the array of milestones + * @return {Promise} - the promise for the http request + */ + getMilestone(milestone, cb) { + return this._request('GET', `/repos/${this.__repository}/milestones/${milestone}`, null, cb); + } + + /** + * Create a new milestone + * @see https://developer.github.com/v3/issues/milestones/#create-a-milestone + * @param {Object} milestoneData - the milestone definition + * @param {Requestable.callback} [cb] - will receive the array of milestones + * @return {Promise} - the promise for the http request + */ + createMilestone(milestoneData, cb) { + return this._request('POST', `/repos/${this.__repository}/milestones`, milestoneData, cb); + } + + /** + * Edit a milestone + * @see https://developer.github.com/v3/issues/milestones/#update-a-milestone + * @param {string} milestone - the id of the milestone to edit + * @param {Object} milestoneData - the updates to make to the milestone + * @param {Requestable.callback} [cb] - will receive the array of milestones + * @return {Promise} - the promise for the http request + */ + editMilestone(milestone, milestoneData, cb) { + return this._request('PATCH', `/repos/${this.__repository}/milestones/${milestone}`, milestoneData, cb); + } + + /** + * Delete a milestone (this is distinct from closing a milestone) + * @see https://developer.github.com/v3/issues/milestones/#delete-a-milestone + * @param {string} milestone - the id of the milestone to delete + * @param {Requestable.callback} [cb] - will receive the array of milestones + * @return {Promise} - the promise for the http request + */ + deleteMilestone(milestone, cb) { + return this._request('DELETE', `/repos/${this.__repository}/milestones/${milestone}`, null, cb); + } } module.exports = Issue; diff --git a/lib/Requestable.js b/lib/Requestable.js index e447a7f7..b42dbe66 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -228,13 +228,14 @@ module.exports = Requestable; // ////////////////////////// // // Private helper functions // // ////////////////////////// // -function buildError(path, response) { - return { - path: path, - request: response.config, - response: response, - status: response.status - }; +class ResponseError extends Error { + constructor(path, response) { + super(`error making request ${response.config.method} ${response.config.url}`); + this.path = path; + this.request = response.config; + this.response = response; + this.status = response.status; + } } const METHODS_WITH_NO_BODY = ['GET', 'HEAD', 'DELETE']; @@ -256,10 +257,12 @@ function getNextPage(linksHeader = '') { function callbackErrorOrThrow(cb, path) { return function handler(response) { log(`error making request ${response.config.method} ${response.config.url} ${JSON.stringify(response.data)}`); - let error = buildError(path, response); + let error = new ResponseError(path, response); if (cb) { + log('going to error callback'); cb(error); } else { + log('throwing error'); throw error; } }; diff --git a/test/issue.spec.js b/test/issue.spec.js index bc0b224e..bc88a623 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -7,8 +7,6 @@ import {assertSuccessful} from './helpers/callbacks'; describe('Issue', function() { let github; let remoteIssues; - let remoteIssueId; - let remoteIssueCommentId; before(function() { github = new Github({ @@ -21,6 +19,9 @@ describe('Issue', function() { }); describe('reading', function() { + let remoteIssueId; + let milestoneId; + it('should list issues', function(done) { remoteIssues.listIssues({}, assertSuccessful(done, function(err, issues) { expect(issues).to.be.an.array(); @@ -37,9 +38,31 @@ describe('Issue', function() { done(); })); }); + + it('should get all milestones', function(done) { + remoteIssues.listMilestones() + .then(({data: milestones}) => { + expect(milestones).to.be.an.array(); + milestoneId = milestones[0].number; + + done(); + }).catch(done); + }); + + it('should get a single milestone', function(done) { + remoteIssues.getMilestone(milestoneId) + .then(({data: milestone}) => { + expect(milestone).to.have.own('title', 'Default Milestone'); + done(); + }).catch(done); + }); }); - describe('creating/modifiying/editing/deleting', function() { + describe('creating/editing/deleting', function() { + let createdIssueId; + let issueCommentId; + let createdMilestoneId; + // 200ms between tests so that Github has a chance to settle beforeEach(function(done) { setTimeout(done, 200); @@ -52,6 +75,7 @@ describe('Issue', function() { }; remoteIssues.createIssue(newIssue, assertSuccessful(done, function(err, issue) { + createdIssueId = issue.number; expect(issue).to.have.own('url'); expect(issue).to.have.own('title', newIssue.title); expect(issue).to.have.own('body', newIssue.body); @@ -60,8 +84,21 @@ describe('Issue', function() { })); }); + it('should edit issue', function(done) { + const newProps = { + title: 'Edited title', + state: 'closed' + }; + + remoteIssues.editIssue(createdIssueId, newProps, assertSuccessful(done, function(err, issue) { + expect(issue).to.have.own('title', newProps.title); + + done(); + })); + }); + it('should post issue comment', function(done) { - remoteIssues.createIssueComment(remoteIssueId, 'Comment test', assertSuccessful(done, function(err, issue) { + remoteIssues.createIssueComment(createdIssueId, 'Comment test', assertSuccessful(done, function(err, issue) { expect(issue).to.have.own('body', 'Comment test'); done(); @@ -69,47 +106,72 @@ describe('Issue', function() { }); it('should list issue comments', function(done) { - remoteIssues.listIssueComments(remoteIssueId, assertSuccessful(done, function(err, comments) { + remoteIssues.listIssueComments(createdIssueId, assertSuccessful(done, function(err, comments) { expect(comments).to.be.an.array(); expect(comments[0]).to.have.own('body', 'Comment test'); - remoteIssueCommentId = comments[0].id + issueCommentId = comments[0].id; done(); })); }); it('should get a single issue comment', function(done) { - remoteIssues.getIssueComment(remoteIssueCommentId, assertSuccessful(done, function(err, comment) { + remoteIssues.getIssueComment(issueCommentId, assertSuccessful(done, function(err, comment) { expect(comment).to.have.own('body', 'Comment test'); done(); })); }); it('should edit issue comment', function(done) { - remoteIssues.editIssueComment(remoteIssueCommentId, 'Comment test edited', assertSuccessful(done, function(err, comment) { - expect(comment).to.have.own('body', 'Comment test edited'); + remoteIssues.editIssueComment(issueCommentId, 'Comment test edited', + assertSuccessful(done, function(err, comment) { + expect(comment).to.have.own('body', 'Comment test edited'); - done(); - })); + done(); + })); }); it('should delete issue comment', function(done) { - remoteIssues.deleteIssueComment(remoteIssueCommentId, assertSuccessful(done, function(err, response) { + remoteIssues.deleteIssueComment(issueCommentId, assertSuccessful(done, function(err, response) { expect(response).to.be.true; done(); })); }); - it('should edit issues title', function(done) { - const newProps = { - title: 'Edited title' + it('should create a milestone', function(done) { + let milestone = { + title: 'v42', + description: 'The ultimate version' }; - remoteIssues.editIssue(remoteIssueId, newProps, assertSuccessful(done, function(err, issue) { - expect(issue).to.have.own('title', newProps.title); + remoteIssues.createMilestone(milestone) + .then(({data: createdMilestone}) => { + expect(createdMilestone).to.have.own('number'); + expect(createdMilestone).to.have.own('title', milestone.title); - done(); - })); + createdMilestoneId = createdMilestone.number; + done(); + }).catch(done); + }); + it('should update a milestone', function(done) { + let milestone = { + description: 'Version 6 * 7' + }; + + remoteIssues.editMilestone(createdMilestoneId, milestone) + .then(({data: createdMilestone}) => { + expect(createdMilestone).to.have.own('number', createdMilestoneId); + expect(createdMilestone).to.have.own('describe', milestone.description); + + done(); + }).catch(done); + }); + it('should delete a milestone', function(done) { + remoteIssues.deleteMilestone(createdMilestoneId) + .then(({status}) => { + expect(status).to.equal(204); + done(); + }).catch(done); }); }); }); From b4995e083a231ed0ccb0837c6234f6ff53cabbee Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 12 May 2016 16:48:17 -0500 Subject: [PATCH 110/217] chore: add debugging code to figure out why collaborators randomly breaks --- test/issue.spec.js | 2 +- test/repository.spec.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/test/issue.spec.js b/test/issue.spec.js index bc88a623..feefdaab 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -161,7 +161,7 @@ describe('Issue', function() { remoteIssues.editMilestone(createdMilestoneId, milestone) .then(({data: createdMilestone}) => { expect(createdMilestone).to.have.own('number', createdMilestoneId); - expect(createdMilestone).to.have.own('describe', milestone.description); + expect(createdMilestone).to.have.own('description', milestone.description); done(); }).catch(done); diff --git a/test/repository.spec.js b/test/repository.spec.js index 34ecb371..93c394a4 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -254,6 +254,9 @@ describe('Repository', function() { it('should show repo collaborators', function(done) { remoteRepo.getCollaborators(assertSuccessful(done, function(err, collaborators) { + if (!(collaborators instanceof Array)) { + console.log(collaborator); // eslint-disable-line + } expect(collaborators).to.be.an.array(); expect(collaborators).to.have.length(1); From 8677173b89ed23cbbc7dc2518fc10ded3488524b Mon Sep 17 00:00:00 2001 From: Kenshi Kamata Date: Wed, 18 May 2016 00:27:47 +0900 Subject: [PATCH 111/217] feature(markdown): add markdown api Closes #325 --- lib/GitHub.js | 9 +++++++++ lib/Markdown.js | 39 ++++++++++++++++++++++++++++++++++++++ test/markdown.spec.js | 44 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 lib/Markdown.js create mode 100644 test/markdown.spec.js diff --git a/lib/GitHub.js b/lib/GitHub.js index 3a895f9a..36829b0c 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -12,6 +12,7 @@ import Search from './Search'; import RateLimit from './RateLimit'; import Repository from './Repository'; import Organization from './Organization'; +import Markdown from './Markdown'; /** * GitHub encapsulates the functionality to create various API wrapper objects. @@ -93,6 +94,14 @@ class GitHub { return new RateLimit(this.__auth, this.__apiBase); } + /** + * Create a new Markdown wrapper + * @return {Markdown} + */ + getMarkdown() { + return new Markdown(this.__auth, this.__apiBase); + } + _getFullName(user, repo) { let fullname = user; diff --git a/lib/Markdown.js b/lib/Markdown.js new file mode 100644 index 00000000..e2778169 --- /dev/null +++ b/lib/Markdown.js @@ -0,0 +1,39 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; + +/** + * RateLimit allows users to query their rate-limit status + */ +class Markdown extends Requestable { + /** + * construct a RateLimit + * @param {Requestable.auth} auth - the credentials to authenticate to GitHub + * @param {string} [apiBase] - the base Github API URL + * @return {Promise} - the promise for the http request + */ + constructor(auth, apiBase) { + super(auth, apiBase); + } + + /** + * Render html from Markdown text. + * @see https://developer.github.com/v3/markdown/#render-an-arbitrary-markdown-document + * @param {Object} options + * @param {string} [options.text] - the markdown text to convert + * @param {string} [options.mode=markdown] - can be either `markdown` or `gfm` + * @param {string} [options.context] - repository name if mode is gfm + * @param {Requestable.callback} [cb] - will receive the converted html + * @return {Promise} - the promise for the http request + */ + render(options, cb) { + return this._request('POST', '/markdown', options, cb); + } +} + +module.exports = Markdown; diff --git a/test/markdown.spec.js b/test/markdown.spec.js new file mode 100644 index 00000000..3e944650 --- /dev/null +++ b/test/markdown.spec.js @@ -0,0 +1,44 @@ +import expect from 'must'; + +import Github from '../lib/GitHub'; +import testUser from './fixtures/user.json'; + +describe('Markdown', function() { + let github; + let markdown; + + before(function() { + github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' + }); + + markdown = github.getMarkdown(); + }); + + it('should convert markdown to html as plain Markdown', function(done) { + const options = { + text: 'Hello world github/linguist#1 **cool**, and #1!' + }; + + markdown.render(options) + .then(function({data: html}) { + expect(html).to.be('

Hello world github/linguist#1 cool, and #1!

\n'); + done(); + }).catch(done); + }); + + it('should convert markdown to html as GFM', function(done) { + const options = { + text: 'Hello world github/linguist#1 **cool**, and #1!', + mode: 'gfm', + context: 'github/gollum' + }; + markdown.render(options) + .then(function({data: html}) { + expect(html).to.be('

Hello world github/linguist#1 cool, and #1!

'); // jscs:ignore + done(); + }).catch(done); + }); +}); From 68952efc5b59618b5d660f34f834aa2a2ff533df Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 17 May 2016 10:38:02 -0500 Subject: [PATCH 112/217] chore: fix loggining to determine why collaborators test fails sometimes --- test/repository.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/repository.spec.js b/test/repository.spec.js index 93c394a4..14b1a390 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -255,7 +255,7 @@ describe('Repository', function() { it('should show repo collaborators', function(done) { remoteRepo.getCollaborators(assertSuccessful(done, function(err, collaborators) { if (!(collaborators instanceof Array)) { - console.log(collaborator); // eslint-disable-line + console.log(collaborators); // eslint-disable-line } expect(collaborators).to.be.an.array(); expect(collaborators).to.have.length(1); From d257adf87a6c672b6ee7063d0e4f87ebd03ae548 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 17 May 2016 10:44:06 -0500 Subject: [PATCH 113/217] 1.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f74481c1..50bc39db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "1.2.1", + "version": "1.3.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 1c051ba5347d6aec43261d41c2b6663fd5d65773 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Tue, 17 May 2016 10:45:35 -0500 Subject: [PATCH 114/217] chore: update release script to include newly generated docs update test debug logging again --- release.sh | 3 ++- test/repository.spec.js | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/release.sh b/release.sh index 0f57621e..994df005 100755 --- a/release.sh +++ b/release.sh @@ -25,5 +25,6 @@ rm -rf docs/ git checkout gh-pages mv out/* docs/ echo $VERSION >> _data/versions.csv -git co -am "adding docs for v$VERSION" +git add . +git co -m "adding docs for v$VERSION" git push diff --git a/test/repository.spec.js b/test/repository.spec.js index 14b1a390..db19fb8a 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -140,6 +140,9 @@ describe('Repository', function() { it('should show repo contributors', function(done) { remoteRepo.getContributors(assertSuccessful(done, function(err, contributors) { + if (!(contributors instanceof Array)) { + console.log(contributors); // eslint-disable-line + } expect(contributors).to.be.an.array(); expect(contributors.length).to.be.above(1); From bfa869079e503bccedb3705ad73b6a2bb6ae3503 Mon Sep 17 00:00:00 2001 From: Randal Pinto Date: Thu, 19 May 2016 15:56:31 +0100 Subject: [PATCH 115/217] fix(user): unbreak filtering repos by visibility and affiliation Filtering repositories by visibility and/or affiliation is mutually exclusive to searching by type. (https://developer.github.com/v3/repos/#list-your-repositories) --- lib/Requestable.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Requestable.js b/lib/Requestable.js index b42dbe66..4b33bed6 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -91,7 +91,9 @@ class Requestable { * @return - the options to pass to the request */ _getOptionsWithDefaults(requestOptions = {}) { - requestOptions.type = requestOptions.type || 'all'; + if (!(requestOptions.visibility || requestOptions.affiliation)) { + requestOptions.type = requestOptions.type || 'all'; + } requestOptions.sort = requestOptions.sort || 'updated'; requestOptions.per_page = requestOptions.per_page || '100'; // jscs:ignore From c50436ad047874956dd64ac00d28f8ddfa1288f4 Mon Sep 17 00:00:00 2001 From: Minke Zhang Date: Thu, 19 May 2016 07:59:02 -0700 Subject: [PATCH 116/217] fix(repository): unbreak repo.move BREAKING CHANGE: the argument list to repository#move has changed --- lib/Repository.js | 72 ++++++++++++++++++++--------------------- test/repository.spec.js | 15 +++++++++ 2 files changed, 50 insertions(+), 37 deletions(-) diff --git a/lib/Repository.js b/lib/Repository.js index 8b302558..f74b620e 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -286,7 +286,7 @@ class Repository extends Requestable { * Add a commit to the repository * @see https://developer.github.com/v3/git/commits/#create-a-commit * @param {string} parent - the SHA of the parent commit - * @param {Object} tree - the tree that describes this commit + * @param {string} tree - the SHA of the tree for this commit * @param {string} message - the commit message * @param {Function} cb - will receive the commit that is created * @return {Promise} - the promise for the http request @@ -300,7 +300,7 @@ class Repository extends Requestable { return this._request('POST', `/repos/${this.__fullname}/git/commits`, data, cb) .then((response) => { - this.__currentTree.sha = response.sha; // Update latest commit + this.__currentTree.sha = response.data.sha; // Update latest commit return response; }); } @@ -310,11 +310,12 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/git/refs/#update-a-reference * @param {string} ref - the ref to update * @param {string} commitSHA - the SHA to point the reference to + * @param {boolean} force - indicates whether to force or ensure a fast-forward update * @param {Function} cb - will receive the updated ref back * @return {Promise} - the promise for the http request */ - updateHead(ref, commitSHA, cb) { - return this._request('PATCH', `/repos/${this.__fullname}/git/refs/${ref}`, {sha: commitSHA}, cb); + updateHead(ref, commitSHA, force, cb) { + return this._request('PATCH', `/repos/${this.__fullname}/git/refs/${ref}`, {sha: commitSHA, force: force}, cb); } /** @@ -500,41 +501,38 @@ class Repository extends Requestable { }); } - // Move a file to a new location - // ------- - move(branch, path, newPath, cb) { - return this._updateTree(branch, function(err, latestCommit) { - this.getTree(latestCommit + '?recursive=true', function(err, tree) { - // Update Tree - tree.forEach(function(ref) { - if (ref.path === path) { - ref.path = newPath; - } - - if (ref.type === 'tree') { - delete ref.sha; - } - }); - - this.createTree(tree, function(err, rootTree) { - this.commit(latestCommit, rootTree, 'Deleted ' + path, function(err, commit) { - this.updateHead(branch, commit, cb); + /** + * Change all references in a repo from old_path to new_path + * @param {string} branch - the branch to carry out the reference change, or the default branch if not specified + * @param {string} old_path - original path + * @param {string} new_path - new reference path + * @param {Function} cb - will receive the commit in which the move occurred + * @return {Promise} - the promise for the http request + */ + move(branch, old_path, new_path, cb) { + return this.getRef(`heads/${branch}`) + .then((response) => { + return this.getTree(`${response.data.object.sha}?recursive=true`) + .then((response) => { + var _resp = response; + response.data.tree.forEach((ref) => { + if (ref.path === old_path) { + ref.path = new_path; + } + if (ref.type === 'tree') { + delete ref.sha; + } + }); + return this.createTree(response.data.tree).then( + (response) => { + return this.commit(_resp.data.sha, response.data.sha, `Renamed '${old_path}' to '${new_path}'`) + .then((response) => { + return this.updateHead(`heads/${branch}`, response.data.sha, true, cb); + }); + } + ); }); - }); }); - }); - } - - _updateTree(branch, cb) { - if (branch === this.__currentTree.branch && this.__currentTree.sha) { - return cb(null, this.__currentTree.sha); - } - - return this.getRef(`heads/${branch}`, function(err, sha) { - this.__currentTree.branch = branch; - this.__currentTree.sha = sha; - cb(err, sha); - }); } /** diff --git a/test/repository.spec.js b/test/repository.spec.js index db19fb8a..dbf67286 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -287,6 +287,21 @@ describe('Repository', function() { })); }); + it('should rename files', function(done) { + remoteRepo.writeFile('master', fileName, initialText, initialMessage, assertSuccessful(done, function() { + remoteRepo.move('master', fileName, 'new_name', assertSuccessful(done, function() { + remoteRepo.getContents('master', fileName, 'raw', assertFailure(done, function(err) { + expect(err.status).to.be(404); + remoteRepo.getContents('master', 'new_name', 'raw', assertSuccessful(done, function(err, fileText) { + expect(fileText).to.be(initialText); + + done(); + })); + })); + })); + })); + }); + it('should create a new branch', function(done) { remoteRepo.createBranch('master', 'dev', assertSuccessful(done, function(err, branch) { expect(branch).to.have.property('ref', 'refs/heads/dev'); From 2d1c29d42154a666a8541b31bdf2ed28a8570d01 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 19 May 2016 12:29:29 -0500 Subject: [PATCH 117/217] chore: actually the linter during build; fix accumulated code style violations --- .eslintrc | 26 ---------------- .eslintrc.yaml | 36 ++++++++++++++++++++++ .jscsrc | 16 ---------- gulpfile.babel.js | 21 ++++--------- lib/GitHub.js | 10 ++++++- lib/Issue.js | 10 +++---- lib/Markdown.js | 2 +- lib/Organization.js | 4 +-- lib/Repository.js | 63 ++++++++++++++++++++++++++------------- lib/Requestable.js | 12 ++++++-- lib/Search.js | 8 +++-- lib/User.js | 7 +++-- package.json | 1 + test/.eslintrc | 7 ----- test/.eslintrc.yaml | 6 ++++ test/gist.spec.js | 4 +-- test/issue.spec.js | 2 +- test/markdown.spec.js | 2 +- test/organization.spec.js | 8 ++--- test/repository.spec.js | 6 ++-- test/search.spec.js | 16 ++++++---- test/user.spec.js | 2 +- 22 files changed, 150 insertions(+), 119 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.yaml delete mode 100644 .jscsrc delete mode 100644 test/.eslintrc create mode 100644 test/.eslintrc.yaml diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 5a061f61..00000000 --- a/.eslintrc +++ /dev/null @@ -1,26 +0,0 @@ -{ - "extends": "eslint:recommended", - - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - - "rules": { - "no-bitwise": 1, - "eqeqeq": 2, - "guard-for-in": 2, - "no-extend-native": 2 - }, - - "env": { - "browser": true, - "node": true - }, - - "globals": { - "require": false, - "define": false, - "escape": false - } -} diff --git a/.eslintrc.yaml b/.eslintrc.yaml new file mode 100644 index 00000000..2718e64e --- /dev/null +++ b/.eslintrc.yaml @@ -0,0 +1,36 @@ +--- + extends: + - eslint:recommended + - google + parserOptions: + ecmaVersion: 6 + sourceType: module + rules: + arrow-parens: [error, always] + eqeqeq: error + guard-for-in: error + indent: [error, 3, {SwitchCase: 1}] + max-len: [error, {code: 120, ignoreTrailingComments: true}] + no-bitwise: warn + no-extend-native: error + no-useless-constructor: off + no-var: error + padded-blocks: off + quotes: [error, single, {avoidEscape: true}] + require-jsdoc: + - error + - require: + FunctionDeclaration: false + ClassDeclaration: true + MethodDefinition: true + spaced-comment: error + valid-jsdoc: [error, {requireParamDescription: true}] + + env: + es6: true + node: true + browser: true + # globals: + # require: false + # define: false + # escape: false diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index 0a7963d2..00000000 --- a/.jscsrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "preset": "google", - - "disallowVar": true, - "jsDoc": { - "checkParamExistence": true, - "checkParamNames": true, - "checkTypes": true, - "requireParamTypes": true, - "requireHyphenBeforeDescription": true, - }, - "maximumLineLength": 120, - "requireSpaceAfterLineComment": true, - "safeContextKeyword": ["that"], - "validateIndentation": 3, -} diff --git a/gulpfile.babel.js b/gulpfile.babel.js index 9055f7b3..c3d669f5 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -1,35 +1,26 @@ import gulp from 'gulp'; -import jscs from 'gulp-jscs'; import eslint from 'gulp-eslint'; -import stylish from 'gulp-jscs-stylish'; - import babel from 'gulp-babel'; import rename from 'gulp-rename'; import browserify from 'browserify'; import buffer from 'vinyl-buffer'; import del from 'del'; -import path from 'path'; -import {Promise} from 'es6-promise'; import source from 'vinyl-source-stream'; import sourcemaps from 'gulp-sourcemaps'; import uglify from 'gulp-uglify'; const ALL_SOURCES = [ - path.join(__dirname, '/*.js'), - path.join(__dirname, '/src/*.js'), - path.join(__dirname, '/test/*.js') + '*.js', + 'lib/*.js', + 'test/*.js' ]; gulp.task('lint', function() { - const opts = { - base: './' - }; - return gulp.src(ALL_SOURCES, opts) + return gulp.src(ALL_SOURCES) .pipe(eslint()) - .pipe(jscs()) - .pipe(stylish.combineWithHintResults()) - .pipe(stylish()) + .pipe(eslint.format()) + .pipe(eslint.failAfterError()) ; }); diff --git a/lib/GitHub.js b/lib/GitHub.js index 36829b0c..7bc0b63f 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -4,6 +4,7 @@ * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. * Github.js is freely distributable. */ +/* eslint valid-jsdoc: ["error", {"requireReturnDescription": false}] */ import Gist from './Gist'; import User from './User'; @@ -51,6 +52,7 @@ class GitHub { /** * Create a new Organization wrapper * @param {string} organization - the name of the organization + * @param {string} foo - this * @return {Organization} */ getOrganization(organization) { @@ -99,9 +101,15 @@ class GitHub { * @return {Markdown} */ getMarkdown() { - return new Markdown(this.__auth, this.__apiBase); + return new Markdown(this.__auth, this.__apiBase); } + /** + * Computes the full repository name + * @param {string} user - the username (or the full name) + * @param {string} repo - the repository name, must not be passed if `user` is the full name + * @return {string} the repository's full name + */ _getFullName(user, repo) { let fullname = user; diff --git a/lib/Issue.js b/lib/Issue.js index d1e35c89..2b2fc9dc 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -52,7 +52,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ listIssueComments(issue, cb) { - return this._request('GET', `/repos/${this.__repository}/issues/${issue}/comments`, null, cb); // jscs:ignore + return this._request('GET', `/repos/${this.__repository}/issues/${issue}/comments`, null, cb); } /** @@ -63,7 +63,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ getIssueComment(id, cb) { - return this._request('GET', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore + return this._request('GET', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); } /** @@ -75,7 +75,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ createIssueComment(issue, comment, cb) { - return this._request('POST', `/repos/${this.__repository}/issues/${issue}/comments`, {body: comment}, cb); // jscs:ignore + return this._request('POST', `/repos/${this.__repository}/issues/${issue}/comments`, {body: comment}, cb); } /** @@ -87,7 +87,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ editIssueComment(id, comment, cb) { - return this._request('PATCH', `/repos/${this.__repository}/issues/comments/${id}`, {body: comment}, cb); // jscs:ignore + return this._request('PATCH', `/repos/${this.__repository}/issues/comments/${id}`, {body: comment}, cb); } /** @@ -98,7 +98,7 @@ class Issue extends Requestable { * @return {Promise} - the promise for the http request */ deleteIssueComment(id, cb) { - return this._request('DELETE', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); // jscs:ignore + return this._request('DELETE', `/repos/${this.__repository}/issues/comments/${id}`, null, cb); } /** diff --git a/lib/Markdown.js b/lib/Markdown.js index e2778169..cb84851d 100644 --- a/lib/Markdown.js +++ b/lib/Markdown.js @@ -24,7 +24,7 @@ class Markdown extends Requestable { /** * Render html from Markdown text. * @see https://developer.github.com/v3/markdown/#render-an-arbitrary-markdown-document - * @param {Object} options + * @param {Object} options - conversion options * @param {string} [options.text] - the markdown text to convert * @param {string} [options.mode=markdown] - can be either `markdown` or `gfm` * @param {string} [options.context] - repository name if mode is gfm diff --git a/lib/Organization.js b/lib/Organization.js index 1e85dc97..ac264186 100644 --- a/lib/Organization.js +++ b/lib/Organization.js @@ -19,7 +19,7 @@ class Organization extends Requestable { */ constructor(organization, auth, apiBase) { super(auth, apiBase); - this.__name = organization; + this.__name = organization; } /** @@ -58,7 +58,7 @@ class Organization extends Requestable { /** * List the users who are members of the company * @see https://developer.github.com/v3/orgs/members/#members-list - * @param {object} options + * @param {object} options - filtering options * @param {string} [options.filter=all] - can be either `2fa_disabled` or `all` * @param {string} [options.role=all] - can be one of: `all`, `admin`, or `member` * @param {Requestable.callback} [cb] - will receive the list of users diff --git a/lib/Repository.js b/lib/Repository.js index f74b620e..b5086448 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -8,7 +8,9 @@ import Requestable from './Requestable'; import Utf8 from 'utf8'; -import {Base64} from 'js-base64'; +import { + Base64 +} from 'js-base64'; import debug from 'debug'; const log = debug('github:repository'); @@ -154,7 +156,7 @@ class Repository extends Requestable { /** * List the commits on a repository, optionally filtering by path, author or time range * @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository - * @param {Object} [options] + * @param {Object} [options] - the filtering options for commits * @param {string} [options.sha] - the SHA or branch to start from * @param {string} [options.path] - the path to search on * @param {string} [options.author] - the commit author @@ -221,6 +223,11 @@ class Repository extends Requestable { return this._request('POST', `/repos/${this.__fullname}/git/blobs`, postBody, cb); } + /** + * Get the object that represents the provided content + * @param {string|Buffer|Blob} content - the content to send to the server + * @return {Object} the representation of `content` for the GitHub API + */ _getContentObject(content) { if (typeof content === 'string') { log('contet is a string'); @@ -228,19 +235,22 @@ class Repository extends Requestable { content: Utf8.encode(content), encoding: 'utf-8' }; + } else if (typeof Buffer !== 'undefined' && content instanceof Buffer) { log('We appear to be in Node'); return { content: content.toString('base64'), encoding: 'base64' }; + } else if (typeof Blob !== 'undefined' && content instanceof Blob) { log('We appear to be in the browser'); return { content: Base64.encode(content), encoding: 'base64' }; - } else { + + } else { // eslint-disable-line log(`Not sure what this content is: ${typeof content}, ${JSON.stringify(content)}`); throw new Error('Unknown content passed to postBlob. Must be string or Buffer (node) or Blob (web)'); } @@ -258,8 +268,8 @@ class Repository extends Requestable { */ updateTree(baseTreeSHA, path, blobSHA, cb) { let newTree = { - 'base_tree': baseTreeSHA, - 'tree': [{ + base_tree: baseTreeSHA, // eslint-disable-line + tree: [{ path: path, sha: blobSHA, mode: '100644', @@ -279,7 +289,10 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ createTree(tree, baseSHA, cb) { - return this._request('POST', `/repos/${this.__fullname}/git/trees`, {tree, base_tree: baseSHA}, cb); // jscs:ignore + return this._request('POST', `/repos/${this.__fullname}/git/trees`, { + tree, + base_tree: baseSHA // eslint-disable-line + }, cb); } /** @@ -315,7 +328,10 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ updateHead(ref, commitSHA, force, cb) { - return this._request('PATCH', `/repos/${this.__fullname}/git/refs/${ref}`, {sha: commitSHA, force: force}, cb); + return this._request('PATCH', `/repos/${this.__fullname}/git/refs/${ref}`, { + sha: commitSHA, + force: force + }, cb); } /** @@ -371,7 +387,9 @@ class Repository extends Requestable { */ getContents(ref, path, raw, cb) { path = path ? `${encodeURI(path)}` : ''; - return this._request('GET', `/repos/${this.__fullname}/contents/${path}`, {ref}, cb, raw); + return this._request('GET', `/repos/${this.__fullname}/contents/${path}`, { + ref + }, cb, raw); } /** @@ -411,7 +429,10 @@ class Repository extends Requestable { return this.getRef(`heads/${oldBranch}`) .then((response) => { let sha = response.data.object.sha; - return this.createRef({sha, ref: `refs/heads/${newBranch}`}, cb); + return this.createRef({ + sha, + ref: `refs/heads/${newBranch}` + }, cb); }); } @@ -502,22 +523,22 @@ class Repository extends Requestable { } /** - * Change all references in a repo from old_path to new_path + * Change all references in a repo from oldPath to new_path * @param {string} branch - the branch to carry out the reference change, or the default branch if not specified - * @param {string} old_path - original path - * @param {string} new_path - new reference path + * @param {string} oldPath - original path + * @param {string} newPath - new reference path * @param {Function} cb - will receive the commit in which the move occurred * @return {Promise} - the promise for the http request */ - move(branch, old_path, new_path, cb) { + move(branch, oldPath, newPath, cb) { return this.getRef(`heads/${branch}`) .then((response) => { return this.getTree(`${response.data.object.sha}?recursive=true`) .then((response) => { - var _resp = response; + let _resp = response; response.data.tree.forEach((ref) => { - if (ref.path === old_path) { - ref.path = new_path; + if (ref.path === oldPath) { + ref.path = newPath; } if (ref.type === 'tree') { delete ref.sha; @@ -525,10 +546,10 @@ class Repository extends Requestable { }); return this.createTree(response.data.tree).then( (response) => { - return this.commit(_resp.data.sha, response.data.sha, `Renamed '${old_path}' to '${new_path}'`) - .then((response) => { - return this.updateHead(`heads/${branch}`, response.data.sha, true, cb); - }); + return this.commit(_resp.data.sha, response.data.sha, `Renamed '${oldPath}' to '${newPath}'`) + .then((response) => { + return this.updateHead(`heads/${branch}`, response.data.sha, true, cb); + }); } ); }); @@ -542,7 +563,7 @@ class Repository extends Requestable { * @param {string} path - the path for the file * @param {string} content - the contents of the file * @param {string} message - the commit message - * @param {Object} [options] + * @param {Object} [options] - commit options * @param {Object} [options.author] - the author of the commit * @param {Object} [options.commiter] - the committer * @param {boolean} [options.encode] - true if the content should be base64 encoded diff --git a/lib/Requestable.js b/lib/Requestable.js index 4b33bed6..c7078fe4 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -88,14 +88,14 @@ class Requestable { * Sets the default options for API requests * @protected * @param {Object} [requestOptions={}] - the current options for the request - * @return - the options to pass to the request + * @return {Object} - the options to pass to the request */ _getOptionsWithDefaults(requestOptions = {}) { if (!(requestOptions.visibility || requestOptions.affiliation)) { requestOptions.type = requestOptions.type || 'all'; } requestOptions.sort = requestOptions.sort || 'updated'; - requestOptions.per_page = requestOptions.per_page || '100'; // jscs:ignore + requestOptions.per_page = requestOptions.per_page || '100'; // eslint-disable-line return requestOptions; } @@ -230,7 +230,15 @@ module.exports = Requestable; // ////////////////////////// // // Private helper functions // // ////////////////////////// // +/** + * The error structure returned when a network call fails + */ class ResponseError extends Error { + /** + * Construct a new ResponseError + * @param {string} path - the requested path + * @param {Object} response - the object returned by Axios + */ constructor(path, response) { super(`error making request ${response.config.method} ${response.config.url}`); this.path = path; diff --git a/lib/Search.js b/lib/Search.js index f134087e..e0bde4fb 100644 --- a/lib/Search.js +++ b/lib/Search.js @@ -43,8 +43,12 @@ class Search extends Requestable { */ _search(path, withOptions = {}, cb = undefined) { let requestOptions = {}; - Object.keys(this.__defaults).forEach((prop) => requestOptions[prop] = this.__defaults[prop]); - Object.keys(withOptions).forEach((prop) => requestOptions[prop] = withOptions[prop]); + Object.keys(this.__defaults).forEach((prop) => { + requestOptions[prop] = this.__defaults[prop]; + }); + Object.keys(withOptions).forEach((prop) => { + requestOptions[prop] = withOptions[prop]; + }); log(`searching ${path} with options:`, requestOptions); return this._requestAllPages(`/search/${path}`, requestOptions, cb); diff --git a/lib/User.js b/lib/User.js index aea35d8a..a2289489 100644 --- a/lib/User.js +++ b/lib/User.js @@ -33,10 +33,11 @@ class User extends Requestable { __getScopedUrl(endpoint) { if (this.__user) { return endpoint ? - `/users/${this.__user}/${endpoint}` - : `/users/${this.__user}` + `/users/${this.__user}/${endpoint}` : + `/users/${this.__user}` ; - } else { + + } else { // eslint-disable-line switch (endpoint) { case '': return '/user'; diff --git a/package.json b/package.json index 50bc39db..71956fed 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "browserify": "^13.0.0", "codecov": "^1.0.1", "del": "^2.2.0", + "eslint-config-google": "^0.5.0", "gulp": "^3.9.0", "gulp-babel": "^6.1.2", "gulp-eslint": "^2.0.0", diff --git a/test/.eslintrc b/test/.eslintrc deleted file mode 100644 index 73d8d9b7..00000000 --- a/test/.eslintrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../.eslintrc", - - "env": { - "mocha": true - } -} diff --git a/test/.eslintrc.yaml b/test/.eslintrc.yaml new file mode 100644 index 00000000..59a40fe9 --- /dev/null +++ b/test/.eslintrc.yaml @@ -0,0 +1,6 @@ +--- + extends: ../.eslintrc.yaml + env: + mocha: true + rules: + handle-callback-err: off diff --git a/test/gist.spec.js b/test/gist.spec.js index cd503ca4..0fa476bd 100644 --- a/test/gist.spec.js +++ b/test/gist.spec.js @@ -67,9 +67,9 @@ describe('Gist', function() { }); it('should create a comment a gist', function(done) { - gist.createComment("Comment test", assertSuccessful(done, function(err, comment) { + gist.createComment('Comment test', assertSuccessful(done, function(err, comment) { expect(comment).to.have.own('body', 'Comment test'); - commentId = comment.id + commentId = comment.id; done(); })); }); diff --git a/test/issue.spec.js b/test/issue.spec.js index feefdaab..5da4e0f0 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -132,7 +132,7 @@ describe('Issue', function() { it('should delete issue comment', function(done) { remoteIssues.deleteIssueComment(issueCommentId, assertSuccessful(done, function(err, response) { - expect(response).to.be.true; + expect(response).to.be.true(); done(); })); diff --git a/test/markdown.spec.js b/test/markdown.spec.js index 3e944650..22f5d982 100644 --- a/test/markdown.spec.js +++ b/test/markdown.spec.js @@ -37,7 +37,7 @@ describe('Markdown', function() { }; markdown.render(options) .then(function({data: html}) { - expect(html).to.be('

Hello world github/linguist#1 cool, and #1!

'); // jscs:ignore + expect(html).to.be('

Hello world github/linguist#1 cool, and #1!

'); // eslint-disable-line done(); }).catch(done); }); diff --git a/test/organization.spec.js b/test/organization.spec.js index dd0a32c7..79464ef9 100644 --- a/test/organization.spec.js +++ b/test/organization.spec.js @@ -65,14 +65,14 @@ describe('Organization', function() { description: 'test create organization repo', homepage: 'https://github.com/', private: false, - has_issues: true, // jscs:ignore - has_wiki: true, // jscs:ignore - has_downloads: true // jscs:ignore + has_issues: true, // eslint-disable-line + has_wiki: true, // eslint-disable-line + has_downloads: true // eslint-disable-line }; organization.createRepo(options, assertSuccessful(done, function(err, repo) { expect(repo.name).to.equal(testRepoName); - expect(repo.full_name).to.equal(`${testUser.ORGANIZATION}/${testRepoName}`); // jscs:ignore + expect(repo.full_name).to.equal(`${testUser.ORGANIZATION}/${testRepoName}`); // eslint-disable-line done(); })); }); diff --git a/test/repository.spec.js b/test/repository.spec.js index dbf67286..2bd776ad 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -379,7 +379,7 @@ describe('Repository', function() { sort: 'updated', direction: 'desc', page: 1, - per_page: 10 // jscs:ignore + per_page: 10 //eslint-disable-line }; remoteRepo.listPullRequests(filterOpts, assertSuccessful(done, function(err, pullRequests) { @@ -514,8 +514,8 @@ describe('Repository', function() { it('should create a release', function(done) { const releaseDef = { name: releaseName, - tag_name: releaseTag, // jscs:ignore - target_commitish: sha // jscs:ignore + tag_name: releaseTag, // eslint-disable-line + target_commitish: sha // eslint-disable-line }; remoteRepo.createRelease(releaseDef, assertSuccessful(done, function(err, res) { diff --git a/test/search.spec.js b/test/search.spec.js index 37fa9146..846284a9 100644 --- a/test/search.spec.js +++ b/test/search.spec.js @@ -14,37 +14,41 @@ describe('Search', function() { }); it('should search repositories', function(done) { + let options; let search = github.search({ q: 'tetris language:assembly', sort: 'stars', order: 'desc' }); - let options = undefined; search.forRepositories(options, assertSuccessful(done)); }); it('should search code', function(done) { - let search = github.search({q: 'addClass in:file language:js repo:jquery/jquery'}); - let options = undefined; + let options; + let search = github.search({ + q: 'addClass in:file language:js repo:jquery/jquery' + }); search.forCode(options, assertSuccessful(done)); }); it('should search issues', function(done) { + let options; let search = github.search({ q: 'windows pip label:bug language:python state:open ', sort: 'created', order: 'asc' }); - let options = undefined; search.forIssues(options, assertSuccessful(done)); }); it('should search users', function(done) { - let search = github.search({q: 'tom repos:>42 followers:>1000'}); - let options = undefined; + let options; + let search = github.search({ + q: 'tom repos:>42 followers:>1000' + }); search.forUsers(options, assertSuccessful(done)); }); diff --git a/test/user.spec.js b/test/user.spec.js index c318aa0a..d0874161 100644 --- a/test/user.spec.js +++ b/test/user.spec.js @@ -23,7 +23,7 @@ describe('User', function() { const filterOpts = { type: 'owner', sort: 'updated', - per_page: 90, // jscs:ignore + per_page: 90, // eslint-disable-line page: 10 }; From ce55779922f506c432843cb1324ca35012204139 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 19 May 2016 13:08:27 -0500 Subject: [PATCH 118/217] refactor(repository): make repo#move more promise-y --- lib/Repository.js | 39 +++++++++++++++++---------------------- test/repository.spec.js | 4 ++-- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/lib/Repository.js b/lib/Repository.js index b5086448..52e2813a 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -531,29 +531,24 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ move(branch, oldPath, newPath, cb) { + let oldSha; return this.getRef(`heads/${branch}`) - .then((response) => { - return this.getTree(`${response.data.object.sha}?recursive=true`) - .then((response) => { - let _resp = response; - response.data.tree.forEach((ref) => { - if (ref.path === oldPath) { - ref.path = newPath; - } - if (ref.type === 'tree') { - delete ref.sha; - } - }); - return this.createTree(response.data.tree).then( - (response) => { - return this.commit(_resp.data.sha, response.data.sha, `Renamed '${oldPath}' to '${newPath}'`) - .then((response) => { - return this.updateHead(`heads/${branch}`, response.data.sha, true, cb); - }); - } - ); - }); - }); + .then(({data: {object}}) => this.getTree(`${object.sha}?recursive=true`)) + .then(({data: {tree, sha}}) => { + oldSha = sha; + let newTree = tree.map((ref) => { + if (ref.path === oldPath) { + ref.path = newPath; + } + if (ref.type === 'tree') { + delete ref.sha; + } + return ref; + }); + return this.createTree(newTree); + }) + .then(({data: tree}) => this.commit(oldSha, tree.sha, `Renamed '${oldPath}' to '${newPath}'`)) + .then(({data: commit}) => this.updateHead(`heads/${branch}`, commit.sha, true, cb)); } /** diff --git a/test/repository.spec.js b/test/repository.spec.js index 2bd776ad..adf9cfcc 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -141,7 +141,7 @@ describe('Repository', function() { it('should show repo contributors', function(done) { remoteRepo.getContributors(assertSuccessful(done, function(err, contributors) { if (!(contributors instanceof Array)) { - console.log(contributors); // eslint-disable-line + console.log(JSON.stringify(contributors, null, 2)); // eslint-disable-line } expect(contributors).to.be.an.array(); expect(contributors.length).to.be.above(1); @@ -258,7 +258,7 @@ describe('Repository', function() { it('should show repo collaborators', function(done) { remoteRepo.getCollaborators(assertSuccessful(done, function(err, collaborators) { if (!(collaborators instanceof Array)) { - console.log(collaborators); // eslint-disable-line + console.log(JSON.stringify(collaborators, null, 2)); // eslint-disable-line } expect(collaborators).to.be.an.array(); expect(collaborators).to.have.length(1); From caa3d860513a87939708832660f3a0fee9a32e8f Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 19 May 2016 13:14:58 -0500 Subject: [PATCH 119/217] refactor(user): rename methods to improve internal consistency --- lib/User.js | 10 +++++----- test/auth.spec.js | 4 ++-- test/user.spec.js | 14 +++++++------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/User.js b/lib/User.js index a2289489..be86c4fc 100644 --- a/lib/User.js +++ b/lib/User.js @@ -59,7 +59,7 @@ class User extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of repositories * @return {Promise} - the promise for the http request */ - getRepos(options, cb) { + listRepos(options, cb) { if (typeof options === 'function') { cb = options; options = {}; @@ -77,7 +77,7 @@ class User extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of organizations * @return {Promise} - the promise for the http request */ - getOrgs(cb) { + listOrgs(cb) { return this._request('GET', this.__getScopedUrl('orgs'), null, cb); } @@ -87,7 +87,7 @@ class User extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of gists * @return {Promise} - the promise for the http request */ - getGists(cb) { + listGists(cb) { return this._request('GET', this.__getScopedUrl('gists'), null, cb); } @@ -98,7 +98,7 @@ class User extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of repositories * @return {Promise} - the promise for the http request */ - getNotifications(options, cb) { + listNotifications(options, cb) { options = options || {}; if (typeof options === 'function') { cb = options; @@ -127,7 +127,7 @@ class User extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of starred repositories * @return {Promise} - the promise for the http request */ - getStarredRepos(cb) { + listStarredRepos(cb) { let requestOptions = this._getOptionsWithDefaults(); return this._requestAllPages(this.__getScopedUrl('starred'), requestOptions, cb); } diff --git a/test/auth.spec.js b/test/auth.spec.js index 5f77d365..806a844d 100644 --- a/test/auth.spec.js +++ b/test/auth.spec.js @@ -25,7 +25,7 @@ describe('Github', function() { }); it('should authenticate and return no errors', function(done) { - user.getNotifications(assertSuccessful(done)); + user.listNotifications(assertSuccessful(done)); }); }); @@ -82,7 +82,7 @@ describe('Github', function() { }); it('should fail authentication and return err', function(done) { - user.getNotifications(assertFailure(done, function(err) { + user.listNotifications(assertFailure(done, function(err) { expect(err.status).to.be.equal(401, 'Return 401 status for bad auth'); expect(err.response.data.message).to.equal('Bad credentials'); diff --git a/test/user.spec.js b/test/user.spec.js index d0874161..81181389 100644 --- a/test/user.spec.js +++ b/test/user.spec.js @@ -16,7 +16,7 @@ describe('User', function() { }); it('should get user repos', function(done) { - user.getRepos(assertArray(done)); + user.listRepos(assertArray(done)); }); it('should get user repos with options', function(done) { @@ -27,19 +27,19 @@ describe('User', function() { page: 10 }; - user.getRepos(filterOpts, assertArray(done)); + user.listRepos(filterOpts, assertArray(done)); }); it('should get user orgs', function(done) { - user.getOrgs(assertArray(done)); + user.listOrgs(assertArray(done)); }); it('should get user gists', function(done) { - user.getGists(assertArray(done)); + user.listGists(assertArray(done)); }); it('should get user notifications', function(done) { - user.getNotifications(assertArray(done)); + user.listNotifications(assertArray(done)); }); it('should get user notifications with options', function(done) { @@ -50,7 +50,7 @@ describe('User', function() { before: '2015-02-01T00:00:00Z' }; - user.getNotifications(filterOpts, assertArray(done)); + user.listNotifications(filterOpts, assertArray(done)); }); it('should get the user\'s profile', function(done) { @@ -58,7 +58,7 @@ describe('User', function() { }); it('should show user\'s starred repos', function(done) { - user.getStarredRepos(assertArray(done)); + user.listStarredRepos(assertArray(done)); }); it('should follow user', function(done) { From a639c59c52a2ec8a929bfa969de74c386a96e258 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 19 May 2016 13:15:16 -0500 Subject: [PATCH 120/217] chore: update changelog --- CHANGELOG.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5650c231..048cbbca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,14 +2,23 @@ ## master ### Features -Added Milestone API -* `Issue.listMilestones` -* `Issue.getMilestone` -* `Issue.editMilestone` -* `Issue.deleteMilestone` ### Fixes +## 2.0.0 +### Breaking +* `Repository#move` has a new argument list +User +* `getRepos` → `listRepos` +* `getOrgs` → `listOrgs` +* `getGists` → `listGists` +* `getNotifications` → `listNotifications` +* `getStarredRepos` → `listStarredRepos` + +### Fixes +* `Repository`: `move` now works +* `User`: `listRepos` + ## 1.2.1 ### Fixes * `Repository`: Replace invalid references to `postTree` with `createTree` From c27af212eddeaf7d1aec365a3d870d862369fd11 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Thu, 19 May 2016 13:15:22 -0500 Subject: [PATCH 121/217] 2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 71956fed..a245c817 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "1.3.0", + "version": "2.0.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From aa7ba49d8b84a3b30a2a0532dfeed9c64f697cb3 Mon Sep 17 00:00:00 2001 From: Randal Pinto Date: Mon, 23 May 2016 14:53:47 +0100 Subject: [PATCH 122/217] feature(repository): add method to get a single commit See: https://developer.github.com/v3/repos/commits/#get-a-single-commit --- lib/Repository.js | 12 ++++++++++++ test/repository.spec.js | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index 52e2813a..86c0f0b3 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -174,6 +174,18 @@ class Repository extends Requestable { return this._request('GET', `/repos/${this.__fullname}/commits`, options, cb); } + /** + * Gets a single commit information for a repository + * @see https://developer.github.com/v3/repos/commits/#get-a-single-commit + * @param {string} ref - the reference for the commit-ish + * @param {Requestable.callback} cb - will receive the commit information + * @return {Promise} - the promise for the http request + */ + getSingleCommit(ref, cb) { + ref = ref || ''; + return this._request('GET', `/repos/${this.__fullname}/commits/${ref}`, null, cb); + } + /** * Get tha sha for a particular object in the repository. This is a convenience function * @see https://developer.github.com/v3/repos/contents/#get-contents diff --git a/test/repository.spec.js b/test/repository.spec.js index adf9cfcc..7ed4ad88 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -138,6 +138,23 @@ describe('Repository', function() { })); }); + it('should get the latest commit from master', function(done) { + remoteRepo.getSingleCommit('master', assertSuccessful(done, function(err, commit) { + expect(commit).to.have.own('sha'); + expect(commit).to.have.own('commit'); + expect(commit).to.have.own('author'); + + done(); + })); + }); + + it('should fail when null ref is passed', function(done) { + remoteRepo.getSingleCommit(null, assertFailure(done, function(err) { + expect(err.status).to.be(404); + done(); + })); + }); + it('should show repo contributors', function(done) { remoteRepo.getContributors(assertSuccessful(done, function(err, contributors) { if (!(contributors instanceof Array)) { From 2aa5c11c4bf1d6e86c14611911b2009cc17ea0a2 Mon Sep 17 00:00:00 2001 From: Matt Smith Date: Wed, 25 May 2016 15:48:43 -0600 Subject: [PATCH 123/217] feature(team): add organizaiton team api --- .editorconfig | 1 + .travis.yml | 1 + lib/GitHub.js | 10 +++ lib/Organization.js | 26 +++++++ lib/Requestable.js | 5 +- lib/Team.js | 160 ++++++++++++++++++++++++++++++++++++++ package.json | 1 + test/.eslintrc.yaml | 3 + test/auth.spec.js | 2 +- test/organization.spec.js | 35 +++++++-- test/team.spec.js | 144 ++++++++++++++++++++++++++++++++++ 11 files changed, 380 insertions(+), 8 deletions(-) create mode 100644 lib/Team.js create mode 100644 test/team.spec.js diff --git a/.editorconfig b/.editorconfig index a5a6e6eb..ec408cf1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,6 +7,7 @@ end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true +max_line_length = 120 [{*.yml,package.json}] indent_size = 2 diff --git a/.travis.yml b/.travis.yml index 3ee3bdd3..ae92414d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +sudo: false language: node_js node_js: - '5' diff --git a/lib/GitHub.js b/lib/GitHub.js index 7bc0b63f..25f9aee7 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -13,6 +13,7 @@ import Search from './Search'; import RateLimit from './RateLimit'; import Repository from './Repository'; import Organization from './Organization'; +import Team from './Team'; import Markdown from './Markdown'; /** @@ -59,6 +60,15 @@ class GitHub { return new Organization(organization, this.__auth, this.__apiBase); } + /** + * create a new Team wrapper + * @param {string} teamId - the name of the team + * @return {team} + */ + getTeam(teamId) { + return new Team(teamId, this.__auth, this.__apiBase); + } + /** * Create a new Repository wrapper * @param {string} user - the user who owns the respository diff --git a/lib/Organization.js b/lib/Organization.js index ac264186..78354a8c 100644 --- a/lib/Organization.js +++ b/lib/Organization.js @@ -67,6 +67,32 @@ class Organization extends Requestable { listMembers(options, cb) { return this._request('GET', `/orgs/${this.__name}/members`, options, cb); } + + /** + * List the Teams in the Organization + * @see https://developer.github.com/v3/orgs/teams/#list-teams + * @param {Requestable.callback} [cb] - will receive the list of teams + * @return {Promise} - the promise for the http request + */ + getTeams(cb) { + return this._requestAllPages(`/orgs/${this.__name}/teams`, undefined, cb); + } + + /** + * Create a team + * @see https://developer.github.com/v3/orgs/teams/#create-team + * @param {object} options - Team creation parameters + * @param {string} options.name - The name of the team + * @param {string} [options.description] - Team description + * @param {string} [options.repo_names] - Repos to add the team to + * @param {string} [options.privacy=secret] - The level of privacy the team should have. Can be either one + * of: `secret`, or `closed` + * @param {Requestable.callback} [cb] - will receive the created team + * @return {Promise} - the promise for the http request + */ + createTeam(options, cb) { + return this._request('POST', `/orgs/${this.__name}/teams`, options, cb); + } } module.exports = Organization; diff --git a/lib/Requestable.js b/lib/Requestable.js index c7078fe4..8823ba8f 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -168,10 +168,11 @@ class Requestable { * @param {string} path - the path to request * @param {Object} data - any query parameters for the request * @param {Requestable.callback} cb - the callback that will receive `true` or `false` + * @param {method} [method=GET] - HTTP Method to use * @return {Promise} - the promise for the http request */ - _request204or404(path, data, cb) { - return this._request('GET', path, data) + _request204or404(path, data, cb, method = 'GET') { + return this._request(method, path, data) .then(function success(response) { if (cb) { cb(null, true, response); diff --git a/lib/Team.js b/lib/Team.js new file mode 100644 index 00000000..fc1d8666 --- /dev/null +++ b/lib/Team.js @@ -0,0 +1,160 @@ +/** + * @file + * @copyright 2016 Matt Smith (Development Seed) + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; +import debug from 'debug'; +const log = debug('github:team'); + +/** + * A Team allows scoping of API requests to a particular Github Organization Team. + */ +class Team extends Requestable { + /** + * Create a Team. + * @param {string} [teamId] - the id for the team + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(teamId, auth, apiBase) { + super(auth, apiBase); + this.__teamId = teamId; + } + + /** + * Get Team information + * @see https://developer.github.com/v3/orgs/teams/#get-team + * @param {Requestable.callback} [cb] - will receive the team + * @return {Promise} - the promise for the http request + */ + getTeam(cb) { + log(`Fetching Team ${this.__teamId}`); + return this._request('Get', `/teams/${this.__teamId}`, undefined, cb); + } + + /** + * List the Team's repositories + * @see https://developer.github.com/v3/orgs/teams/#list-team-repos + * @param {Requestable.callback} [cb] - will receive the list of repositories + * @return {Promise} - the promise for the http request + */ + getRepos(cb) { + log(`Fetching repositories for Team ${this.__teamId}`); + return this._requestAllPages(`/teams/${this.__teamId}/repos`, undefined, cb); + } + + /** + * Edit Team information + * @see https://developer.github.com/v3/orgs/teams/#edit-team + * @param {object} options - Parameters for team edit + * @param {string} options.name - The name of the team + * @param {string} [options.description] - Team description + * @param {string} [options.repo_names] - Repos to add the team to + * @param {string} [options.privacy=secret] - The level of privacy the team should have. Can be either one + * of: `secret`, or `closed` + * @param {Requestable.callback} [cb] - will receive the updated team + * @return {Promise} - the promise for the http request + */ + editTeam(options, cb) { + log(`Editing Team ${this.__teamId}`); + return this._request('PATCH', `/teams/${this.__teamId}`, options, cb); + } + + /** + * List the users who are members of the Team + * @see https://developer.github.com/v3/orgs/teams/#list-team-members + * @param {object} options - Parameters for listing team users + * @param {string} [options.role=all] - can be one of: `all`, `maintainer`, or `member` + * @param {Requestable.callback} [cb] - will receive the list of users + * @return {Promise} - the promise for the http request + */ + listMembers(options, cb) { + log(`Getting members of Team ${this.__teamId}`); + return this._requestAllPages(`/teams/${this.__teamId}/members`, options, cb); + } + + /** + * Get Team membership status for a user + * @see https://developer.github.com/v3/orgs/teams/#get-team-membership + * @param {string} username - can be one of: `all`, `maintainer`, or `member` + * @param {Requestable.callback} [cb] - will receive the membership status of a user + * @return {Promise} - the promise for the http request + */ + getMembership(username, cb) { + log(`Getting membership of user ${username} in Team ${this.__teamId}`); + return this._request('GET', `/teams/${this.__teamId}/memberships/${username}`, undefined, cb); + } + + /** + * Add a member to the Team + * @see https://developer.github.com/v3/orgs/teams/#add-team-membership + * @param {string} username - can be one of: `all`, `maintainer`, or `member` + * @param {object} options - Parameters for adding a team member + * @param {string} [options.role=member] - The role that this user should have in the team. Can be one + * of: `member`, or `maintainer` + * @param {Requestable.callback} [cb] - will receive the membership status of added user + * @return {Promise} - the promise for the http request + */ + addMembership(username, options, cb) { + log(`Adding user ${username} to Team ${this.__teamId}`); + return this._request('PUT', `/teams/${this.__teamId}/memberships/${username}`, options, cb); + } + + /** + * Get repo management status for team + * @see https://developer.github.com/v3/orgs/teams/#remove-team-membership + * @param {string} owner - Organization name + * @param {string} repo - Repo name + * @param {Requestable.callback} [cb] - will receive the membership status of added user + * @return {Promise} - the promise for the http request + */ + isManagedRepo(owner, repo, cb) { + log(`Getting repo management by Team ${this.__teamId} for repo ${owner}/${repo}`); + return this._request204or404(`/teams/${this.__teamId}/repos/${owner}/${repo}`, undefined, cb); + } + + /** + * Add or Update repo management status for team + * @see https://developer.github.com/v3/orgs/teams/#add-or-update-team-repository + * @param {string} owner - Organization name + * @param {string} repo - Repo name + * @param {object} options - Parameters for adding or updating repo management for the team + * @param {string} [options.permission] - The permission to grant the team on this repository. Can be one + * of: `pull`, `push`, or `admin` + * @param {Requestable.callback} [cb] - will receive the membership status of added user + * @return {Promise} - the promise for the http request + */ + manageRepo(owner, repo, options, cb) { + log(`Adding or Updating repo management by Team ${this.__teamId} for repo ${owner}/${repo}`); + return this._request204or404(`/teams/${this.__teamId}/repos/${owner}/${repo}`, options, cb, 'PUT'); + } + + /** + * Remove repo management status for team + * @see https://developer.github.com/v3/orgs/teams/#remove-team-repository + * @param {string} owner - Organization name + * @param {string} repo - Repo name + * @param {Requestable.callback} [cb] - will receive the membership status of added user + * @return {Promise} - the promise for the http request + */ + unmanageRepo(owner, repo, cb) { + log(`Remove repo management by Team ${this.__teamId} for repo ${owner}/${repo}`); + return this._request204or404(`/teams/${this.__teamId}/repos/${owner}/${repo}`, undefined, cb, 'DELETE'); + } + + /** + * Delete Team + * @see https://developer.github.com/v3/orgs/teams/#delete-team + * @param {Requestable.callback} [cb] - will receive the list of repositories + * @return {Promise} - the promise for the http request + */ + deleteTeam(cb) { + log(`Deleting Team ${this.__teamId}`); + return this._request204or404(`/teams/${this.__teamId}`, undefined, cb, 'DELETE'); + } +} + +module.exports = Team; diff --git a/package.json b/package.json index a245c817..e7d1fb35 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "codecov": "^1.0.1", "del": "^2.2.0", "eslint-config-google": "^0.5.0", + "eslint-plugin-mocha": "^2.2.0", "gulp": "^3.9.0", "gulp-babel": "^6.1.2", "gulp-eslint": "^2.0.0", diff --git a/test/.eslintrc.yaml b/test/.eslintrc.yaml index 59a40fe9..2582b354 100644 --- a/test/.eslintrc.yaml +++ b/test/.eslintrc.yaml @@ -1,6 +1,9 @@ --- extends: ../.eslintrc.yaml + plugins: + - mocha env: mocha: true rules: handle-callback-err: off + mocha/no-exclusive-tests: 2 diff --git a/test/auth.spec.js b/test/auth.spec.js index 806a844d..2c03d766 100644 --- a/test/auth.spec.js +++ b/test/auth.spec.js @@ -51,7 +51,7 @@ describe('Github', function() { done(); } catch (e) { try { - if (err && err.request.headers['x-ratelimit-remaining'] === '0') { + if (err && err.response.headers['x-ratelimit-remaining'] === '0') { done(); return; } diff --git a/test/organization.spec.js b/test/organization.spec.js index 79464ef9..9d5f75f6 100644 --- a/test/organization.spec.js +++ b/test/organization.spec.js @@ -42,12 +42,11 @@ describe('Organization', function() { }).catch(done); }); - it('should test for membership', function(done) { - organization.isMember(MEMBER_NAME) + it('should test for membership', function() { + return organization.isMember(MEMBER_NAME) .then(function(isMember) { expect(isMember).to.be.true(); - done(); - }).catch(done); + }); }); }); @@ -59,7 +58,7 @@ describe('Organization', function() { organization = github.getOrganization(testUser.ORGANIZATION); }); - it('should create an organisation repo', function(done) { + it('should create an organization repo', function(done) { const options = { name: testRepoName, description: 'test create organization repo', @@ -76,5 +75,31 @@ describe('Organization', function() { done(); })); }); + + // TODO: The longer this is in place the slower it will get if we don't cleanup random test teams + it('should list the teams in the organization', function() { + return organization.getTeams() + .then(({data}) => { + const hasTeam = data.reduce( + (found, member) => member.slug === 'fixed-test-team-1' || found, + false); + + expect(hasTeam).to.be.true(); + }); + }); + + it('should create an organization team', function(done) { + const options = { + name: testRepoName, + description: 'Created by unit tests', + privacy: 'secret' + }; + + organization.createTeam(options, assertSuccessful(done, function(err, team) { + expect(team.name).to.equal(testRepoName); + expect(team.organization.login).to.equal(testUser.ORGANIZATION); // jscs:ignore + done(); + })); + }); }); }); diff --git a/test/team.spec.js b/test/team.spec.js new file mode 100644 index 00000000..9d03c04a --- /dev/null +++ b/test/team.spec.js @@ -0,0 +1,144 @@ +import expect from 'must'; + +import Github from '../lib/GitHub'; +import testUser from './fixtures/user.json'; +import {assertFailure} from './helpers/callbacks'; +import getTestRepoName from './helpers/getTestRepoName'; + +const altUser = { + USERNAME: 'mtscout6-test' +}; + +function createTestTeam() { + const name = getTestRepoName(); + + const github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' + }); + + const org = github.getOrganization(testUser.ORGANIZATION); + + return org.createTeam({ + name, + privacy: 'closed' + }).then(({data: result}) => { + const team = github.getTeam(result.id); + return {team, name}; + }); +} + +let team; +let name; + +describe('Team', function() { // Isolate tests that are based on a fixed team + before(function() { + const github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic' + }); + + team = github.getTeam(2027812); // github-api-tests/fixed-test-team-1 + }); + + it('should get membership for a given user', function() { + return team.getMembership(altUser.USERNAME) + .then(function({data}) { + expect(data.state).to.equal('active'); + expect(data.role).to.equal('member'); + }); + }); + + it('should list the users in the team', function() { + return team.listMembers() + .then(function({data: members}) { + expect(members).to.be.an.array(); + + let hasTestUser = members.reduce( + (found, member) => member.login === testUser.USERNAME || found, + false); + + expect(hasTestUser).to.be.true(); + }); + }); + + it('should get team repos', function() { + return team.getRepos() + .then(({data}) => { + const hasRepo = data.reduce( + (found, repo) => repo.name === 'fixed-test-repo-1' || found, + false); + + expect(hasRepo).to.be.true(); + }); + }); + + it('should get team', function() { + return team.getTeam() + .then(({data}) => { + expect(data.name).to.equal('Fixed Test Team 1'); + }); + }); + + it('should check if team manages repo', function() { + return team.isManagedRepo(testUser.ORGANIZATION, 'fixed-test-repo-1') + .then((result) => { + expect(result).to.be.true(); + }); + }); +}); + +describe('Team', function() { // Isolate tests that need a new team per test + beforeEach(function() { + return createTestTeam() + .then((x) => { + team = x.team; + name = x.name; + }); + }); + + // Test for Team deletion + afterEach(function(done) { + team.deleteTeam() + .then(() => team.getTeam(assertFailure(done))); + }); + + it('should update team', function() { + const newName = `${name}-updated`; + return team.editTeam({name: newName}) + .then(function({data}) { + expect(data.name).to.equal(newName); + }); + }); + + it('should add membership for a given user', function() { + return team.addMembership(testUser.USERNAME) + .then(({data}) => { + const {state, role} = data; + expect(state === 'active' || state === 'pending').to.be.true(); + expect(role).to.equal('member'); + }); + }); + + it('should add membership as a maintainer for a given user', function() { + return team.addMembership(altUser.USERNAME, {role: 'maintainer'}) + .then(({data}) => { + const {state, role} = data; + expect(state === 'active' || state === 'pending').to.be.true(); + expect(role).to.equal('maintainer'); + }); + }); + + it('should add/remove team management of repo', function() { + return team.manageRepo(testUser.ORGANIZATION, 'fixed-test-repo-1', {permission: 'pull'}) + .then((result) => { + expect(result).to.be.true(); + return team.unmanageRepo(testUser.ORGANIZATION, 'fixed-test-repo-1'); + }) + .then((result) => { + expect(result).to.be.true(); + }); + }); +}); From 7d9afd04f94c591ccdae995423e9ddd25f7bb757 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 25 May 2016 17:09:48 -0500 Subject: [PATCH 124/217] refactor: rename Team.getRepos to Team.listRepos --- lib/Team.js | 2 +- test/team.spec.js | 46 ++++++++++++++++++++++++---------------------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/Team.js b/lib/Team.js index fc1d8666..f91c9173 100644 --- a/lib/Team.js +++ b/lib/Team.js @@ -41,7 +41,7 @@ class Team extends Requestable { * @param {Requestable.callback} [cb] - will receive the list of repositories * @return {Promise} - the promise for the http request */ - getRepos(cb) { + listRepos(cb) { log(`Fetching repositories for Team ${this.__teamId}`); return this._requestAllPages(`/teams/${this.__teamId}/repos`, undefined, cb); } diff --git a/test/team.spec.js b/test/team.spec.js index 9d03c04a..1f712617 100644 --- a/test/team.spec.js +++ b/test/team.spec.js @@ -58,45 +58,47 @@ describe('Team', function() { // Isolate tests that are based on a fixed team let hasTestUser = members.reduce( (found, member) => member.login === testUser.USERNAME || found, - false); + false + ); expect(hasTestUser).to.be.true(); }); }); it('should get team repos', function() { - return team.getRepos() - .then(({data}) => { - const hasRepo = data.reduce( - (found, repo) => repo.name === 'fixed-test-repo-1' || found, - false); - - expect(hasRepo).to.be.true(); - }); + return team.listRepos() + .then(({data}) => { + const hasRepo = data.reduce( + (found, repo) => repo.name === 'fixed-test-repo-1' || found, + false + ); + + expect(hasRepo).to.be.true(); + }); }); it('should get team', function() { return team.getTeam() - .then(({data}) => { - expect(data.name).to.equal('Fixed Test Team 1'); - }); + .then(({data}) => { + expect(data.name).to.equal('Fixed Test Team 1'); + }); }); it('should check if team manages repo', function() { return team.isManagedRepo(testUser.ORGANIZATION, 'fixed-test-repo-1') - .then((result) => { - expect(result).to.be.true(); - }); + .then((result) => { + expect(result).to.be.true(); + }); }); }); describe('Team', function() { // Isolate tests that need a new team per test beforeEach(function() { return createTestTeam() - .then((x) => { - team = x.team; - name = x.name; - }); + .then((x) => { + team = x.team; + name = x.name; + }); }); // Test for Team deletion @@ -108,9 +110,9 @@ describe('Team', function() { // Isolate tests that need a new team per test it('should update team', function() { const newName = `${name}-updated`; return team.editTeam({name: newName}) - .then(function({data}) { - expect(data.name).to.equal(newName); - }); + .then(function({data}) { + expect(data.name).to.equal(newName); + }); }); it('should add membership for a given user', function() { From 42cb9704379093d0837946eda93ab5adc0de2bbe Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 25 May 2016 16:56:14 -0500 Subject: [PATCH 125/217] chore: update Readme to reflect 2.x breaking change; drop 0.10 test on 6.x; update changelog Fixes #338 --- .travis.yml | 3 ++- CHANGELOG.md | 14 +++++++++++++- README.md | 30 +++++++++++++++--------------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index ae92414d..c00581ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,11 @@ sudo: false language: node_js node_js: + - '6' - '5' - '4' - '0.12' - - '0.10' + cache: directories: - node_modules diff --git a/CHANGELOG.md b/CHANGELOG.md index 048cbbca..b82ab5b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,19 @@ # Change Log -## master +## 2.1.0 ### Features +Team API +* `Organization.getTeams` +* `Team.getTeam` +* `Team.listRepos` +* `Team.editTeam` +* `Team.listMembers` +* `Team.getMembership` +* `Team.addMembership` +* `Team.isManagedRepo` +* `Team.manageRepo` +* `Team.unmanageRepo` +* `Team.deleteTeam` ### Fixes diff --git a/README.md b/README.md index 98716949..28f61b90 100644 --- a/README.md +++ b/README.md @@ -28,10 +28,10 @@ npm install github-api ## Compatibility Github.js is tested on Node: +* 6.x * 5.x * 4.x * 0.12 -* 0.10 ## GitHub Tools @@ -47,11 +47,11 @@ as well. In the meantime, we recommend you to take a look at other projects of t or using a new promise-based API. For now the promise-based API just returns the raw HTTP request promise; this might change in the next version. */ -var GitHub = require('github-api'); +import GitHub from 'github-api'; // unauthenticated client -var gh = new GitHub(); -var gist = gh.getGist(); // not a gist yet +const gh = new GitHub(); +let gist = gh.getGist(); // not a gist yet gist.create({ public: true, description: 'My first gist', @@ -60,37 +60,37 @@ gist.create({ contents: "Aren't gists great!" } } -}).then(function(httpResponse) { +}).then(function({data}) { // Promises! - var gist = httpResponse.data; + let gistJson = data; gist.read(function(err, gist, xhr) { // if no error occurred then err == null - // gist == httpResponse.data + // gistJson === httpResponse.data - // xhr == httpResponse + // xhr === httpResponse }); }); ``` ```javascript -var GitHub = require('github-api'); +import GitHub from 'github-api'; // basic auth -var gh = new GitHub({ +const gh = new GitHub({ username: 'FOO', password: 'NotFoo' }); -var me = gh.getUser(); -me.getNotification(function(err, notifcations) { +const me = gh.getUser(); +me.listNotifications(function(err, notifcations) { // do some stuff }); -var clayreimann = gh.getUser('clayreimann'); +const clayreimann = gh.getUser('clayreimann'); clayreimann.getStarredRepos() - .then(function(httpPromise) { - var repos = httpPromise.data; + .then(function({data: reposJson}) { + // do stuff with reposJson }); ``` From 548757d5a0371062b1429dc82606ed8ed1f1f693 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 25 May 2016 17:13:43 -0500 Subject: [PATCH 126/217] adding docs for v2.0.0 --- CHANGELOG.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b82ab5b5..c3a01047 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,8 +15,6 @@ Team API * `Team.unmanageRepo` * `Team.deleteTeam` -### Fixes - ## 2.0.0 ### Breaking * `Repository#move` has a new argument list From 187d0a43d57c53f73d66fcf43a2b80f2435e1233 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 25 May 2016 17:19:34 -0500 Subject: [PATCH 127/217] 2.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e7d1fb35..b0f128fb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "2.0.0", + "version": "2.1.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 9d59b2839b071c327e60790a845bce69265f249a Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 25 May 2016 17:25:10 -0500 Subject: [PATCH 128/217] chore: fix release script so that a version bump level is required [ci skip] --- release.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/release.sh b/release.sh index 994df005..0b3a3c37 100755 --- a/release.sh +++ b/release.sh @@ -4,6 +4,12 @@ # make sure all our dependencies are installed so we can publish docs npm install +# guard against stupid +if [ -z "$1" ]; then + echo "You must specify a new version level: [patch, minor, major]"; + exit 1; +fi + # bump the version echo "npm version $1" npm version $1 From 02daa5cb6d0e4d65cd4c1f23be39f8e8ef94cb5e Mon Sep 17 00:00:00 2001 From: Matt Smith Date: Fri, 27 May 2016 12:29:28 -0600 Subject: [PATCH 129/217] chore: Add missed method to changelog for 2.1.0 release (#339) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3a01047..bfe90247 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 2.1.0 ### Features Team API +* `Organization.createTeam` * `Organization.getTeams` * `Team.getTeam` * `Team.listRepos` From 2d102be55af850f4867281fc31a003b4b479d969 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Fri, 27 May 2016 13:35:03 -0500 Subject: [PATCH 130/217] feature(issue): allow users to fetch an issue's events closes #180 --- CHANGELOG.md | 6 ++++++ lib/Issue.js | 11 +++++++++++ test/issue.spec.js | 7 +++++++ 3 files changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfe90247..21d8f014 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## master +### Features +* add `Issue.listIssueEvents` + +### Fixes + ## 2.1.0 ### Features Team API diff --git a/lib/Issue.js b/lib/Issue.js index 2b2fc9dc..d5c03d4a 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -44,6 +44,17 @@ class Issue extends Requestable { return this._requestAllPages(`/repos/${this.__repository}/issues`, options, cb); } + /** + * List the events for an issue + * @see https://developer.github.com/v3/issues/events/#list-events-for-an-issue + * @param {number} issue - the issue to get events for + * @param {Requestable.callback} [cb] - will receive the list of events + * @return {Promise} - the promise for the http request + */ + listIssueEvents(issue, cb) { + return this._request('GET', `/repos/${this.__repository}/issues/${issue}/events`, null, cb); + } + /** * List comments on an issue * @see https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue diff --git a/test/issue.spec.js b/test/issue.spec.js index 5da4e0f0..ce502cec 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -39,6 +39,13 @@ describe('Issue', function() { })); }); + it('should get issue events', function() { + return remoteIssues.listIssueEvents(remoteIssueId) + .then(function({data: events}) { + expect(events).to.be.an.array(); + }); + }); + it('should get all milestones', function(done) { remoteIssues.listMilestones() .then(({data: milestones}) => { From 7c734635b849e6a25c172716bd2e7b30e9125e23 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Fri, 27 May 2016 14:40:41 -0500 Subject: [PATCH 131/217] fix(search): compensate for the search api returning an object instead of an array closes #335 --- CHANGELOG.md | 11 +++++----- lib/Requestable.js | 53 +++++++++++++++++++++++++++------------------ test/search.spec.js | 36 ++++++++++++++++++++++-------- 3 files changed, 65 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21d8f014..4684efb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,13 @@ # Change Log -## master +## 2.2.0 - 2016/05/27 ### Features * add `Issue.listIssueEvents` ### Fixes +* Search returns results again -## 2.1.0 +## 2.1.0 - 2016/05/26 ### Features Team API * `Organization.createTeam` @@ -40,7 +41,7 @@ User ### Fixes * `Repository`: Replace invalid references to `postTree` with `createTree` -## 1.2.0 - 2015/05/11 +## 1.2.0 - 2016/05/11 ### Features * Search API now returns all pages of results * Added `Repository.listReleases` @@ -58,7 +59,7 @@ Added functions for issue comments ### Fixes * all functions now return a Promise -## 1.1.0 - 2015/05/03 +## 1.1.0 - 2016/05/03 ### Features Added methods for commenting on Gists: * `Gist.listComments` @@ -70,7 +71,7 @@ Added methods for commenting on Gists: ### Fixes * `Repository.deleteFile` now correctly returns a promise. -## 1.0.0 - 2015/04/27 +## 1.0.0 - 2016/04/27 Complete rewrite in ES2015. * Promise-ified the API diff --git a/lib/Requestable.js b/lib/Requestable.js index 8823ba8f..fa26d9d6 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -16,6 +16,25 @@ if (typeof Promise === 'undefined') { polyfill(); } +/** + * The error structure returned when a network call fails + */ +class ResponseError extends Error { + /** + * Construct a new ResponseError + * @param {string} message - an message to return instead of the the default error message + * @param {string} path - the requested path + * @param {Object} response - the object returned by Axios + */ + constructor(message, path, response) { + super(message); + this.path = path; + this.request = response.config; + this.response = response; + this.status = response.status; + } +} + /** * Requestable wraps the logic for making http requests to the API */ @@ -208,7 +227,16 @@ class Requestable { return this._request('GET', path, options) .then((response) => { - results.push.apply(results, response.data); + let thisGroup; + if (response.data instanceof Array) { + thisGroup = response.data; + } else if (response.data.items instanceof Array) { + thisGroup = response.data.items; + } else { + let message = `cannot figure out how to append ${response.data} to the result set`; + throw new ResponseError(message, path, response); + } + results.push.apply(results, thisGroup); const nextUrl = getNextPage(response.headers.link); if (nextUrl) { @@ -231,24 +259,6 @@ module.exports = Requestable; // ////////////////////////// // // Private helper functions // // ////////////////////////// // -/** - * The error structure returned when a network call fails - */ -class ResponseError extends Error { - /** - * Construct a new ResponseError - * @param {string} path - the requested path - * @param {Object} response - the object returned by Axios - */ - constructor(path, response) { - super(`error making request ${response.config.method} ${response.config.url}`); - this.path = path; - this.request = response.config; - this.response = response; - this.status = response.status; - } -} - const METHODS_WITH_NO_BODY = ['GET', 'HEAD', 'DELETE']; function methodHasNoBody(method) { return METHODS_WITH_NO_BODY.indexOf(method) !== -1; @@ -267,8 +277,9 @@ function getNextPage(linksHeader = '') { function callbackErrorOrThrow(cb, path) { return function handler(response) { - log(`error making request ${response.config.method} ${response.config.url} ${JSON.stringify(response.data)}`); - let error = new ResponseError(path, response); + let message = `error making request ${response.config.method} ${response.config.url}`; + let error = new ResponseError(message, path, response); + log(`${message} ${JSON.stringify(response.data)}`); if (cb) { log('going to error callback'); cb(error); diff --git a/test/search.spec.js b/test/search.spec.js index 846284a9..c53326d1 100644 --- a/test/search.spec.js +++ b/test/search.spec.js @@ -1,8 +1,10 @@ +import expect from 'must'; + import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; -import {assertSuccessful} from './helpers/callbacks'; describe('Search', function() { + this.timeout(20 * 1000); let github; before(function() { @@ -13,7 +15,7 @@ describe('Search', function() { }); }); - it('should search repositories', function(done) { + it('should search repositories', function() { let options; let search = github.search({ q: 'tetris language:assembly', @@ -21,19 +23,27 @@ describe('Search', function() { order: 'desc' }); - search.forRepositories(options, assertSuccessful(done)); + return search.forRepositories(options) + .then(function({data}) { + expect(data).to.be.an.array(); + expect(data.length).to.be.above(0); + }); }); - it('should search code', function(done) { + it('should search code', function() { let options; let search = github.search({ q: 'addClass in:file language:js repo:jquery/jquery' }); - search.forCode(options, assertSuccessful(done)); + return search.forCode(options) + .then(function({data}) { + expect(data).to.be.an.array(); + expect(data.length).to.be.above(0); + }); }); - it('should search issues', function(done) { + it('should search issues', function() { let options; let search = github.search({ q: 'windows pip label:bug language:python state:open ', @@ -41,15 +51,23 @@ describe('Search', function() { order: 'asc' }); - search.forIssues(options, assertSuccessful(done)); + return search.forIssues(options) + .then(function({data}) { + expect(data).to.be.an.array(); + expect(data.length).to.be.above(0); + }); }); - it('should search users', function(done) { + it('should search users', function() { let options; let search = github.search({ q: 'tom repos:>42 followers:>1000' }); - search.forUsers(options, assertSuccessful(done)); + return search.forUsers(options) + .then(function({data}) { + expect(data).to.be.an.array(); + expect(data.length).to.be.above(0); + }); }); }); From 7748652270092a169ab8813d1f0351393ac4a462 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Fri, 27 May 2016 14:42:45 -0500 Subject: [PATCH 132/217] 2.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b0f128fb..f6626629 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "2.1.0", + "version": "2.2.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 99b7e4b1c1897688e59938d9ab7028e9bea7b6aa Mon Sep 17 00:00:00 2001 From: Matthew Versluys Date: Thu, 2 Jun 2016 08:27:58 -0700 Subject: [PATCH 133/217] feature(repository): add getReadme Provides support for the preferred method of retrieving the README from a repository, as opposed to using `getContents`. --- lib/Repository.js | 14 ++++++++++++++ test/repository.spec.js | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index 86c0f0b3..d77a0006 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -404,6 +404,20 @@ class Repository extends Requestable { }, cb, raw); } + /** + * Get the README of a repository + * @see https://developer.github.com/v3/repos/contents/#get-the-readme + * @param {string} ref - the ref to check + * @param {boolean} raw - `true` if the results should be returned raw instead of GitHub's normalized format + * @param {Function} cb - will receive the fetched data + * @return {Promise} - the promise for the http request + */ + getReadme(ref, raw, cb) { + return this._request('GET', `/repos/${this.__fullname}/readme`, { + ref + }, cb, raw); + } + /** * Fork a repository * @see https://developer.github.com/v3/repos/forks/#create-a-fork diff --git a/test/repository.spec.js b/test/repository.spec.js index 7ed4ad88..3afaff07 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -75,6 +75,14 @@ describe('Repository', function() { })); }); + it('should show repo readme', function(done) { + remoteRepo.getReadme('master', 'raw', assertSuccessful(done, function(err, text) { + expect(text).to.contain('# Github.js'); + + done(); + })); + }); + it('should get ref from repo', function(done) { remoteRepo.getRef('heads/master', assertSuccessful(done)); }); From 2ddd1793581a16996c41675b9a601c814012b4c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Lund=C3=A9n?= Date: Tue, 14 Jun 2016 19:31:44 +0200 Subject: [PATCH 134/217] chore: remove "foo" parameter from JSDoc --- lib/GitHub.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/GitHub.js b/lib/GitHub.js index 25f9aee7..944fc868 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -53,7 +53,6 @@ class GitHub { /** * Create a new Organization wrapper * @param {string} organization - the name of the organization - * @param {string} foo - this * @return {Organization} */ getOrganization(organization) { From a91fc87a0591961b46c780e55cfbafc1d0ea1a70 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 15 Jun 2016 17:05:58 +0100 Subject: [PATCH 135/217] chore: updated callbacks to be Requestable.callback Closes gh-351 --- lib/Repository.js | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/Repository.js b/lib/Repository.js index d77a0006..d8da0d45 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -313,7 +313,7 @@ class Repository extends Requestable { * @param {string} parent - the SHA of the parent commit * @param {string} tree - the SHA of the tree for this commit * @param {string} message - the commit message - * @param {Function} cb - will receive the commit that is created + * @param {Requestable.callback} cb - will receive the commit that is created * @return {Promise} - the promise for the http request */ commit(parent, tree, message, cb) { @@ -336,7 +336,7 @@ class Repository extends Requestable { * @param {string} ref - the ref to update * @param {string} commitSHA - the SHA to point the reference to * @param {boolean} force - indicates whether to force or ensure a fast-forward update - * @param {Function} cb - will receive the updated ref back + * @param {Requestable.callback} cb - will receive the updated ref back * @return {Promise} - the promise for the http request */ updateHead(ref, commitSHA, force, cb) { @@ -349,7 +349,7 @@ class Repository extends Requestable { /** * Get information about the repository * @see https://developer.github.com/v3/repos/#get - * @param {Function} cb - will receive the information about the repository + * @param {Requestable.callback} cb - will receive the information about the repository * @return {Promise} - the promise for the http request */ getDetails(cb) { @@ -359,7 +359,7 @@ class Repository extends Requestable { /** * List the contributors to the repository * @see https://developer.github.com/v3/repos/#list-contributors - * @param {Function} cb - will receive the list of contributors + * @param {Requestable.callback} cb - will receive the list of contributors * @return {Promise} - the promise for the http request */ getContributors(cb) { @@ -370,7 +370,7 @@ class Repository extends Requestable { * List the users who are collaborators on the repository. The currently authenticated user must have * push access to use this method * @see https://developer.github.com/v3/repos/collaborators/#list-collaborators - * @param {Function} cb - will receive the list of collaborators + * @param {Requestable.callback} cb - will receive the list of collaborators * @return {Promise} - the promise for the http request */ getCollaborators(cb) { @@ -381,7 +381,7 @@ class Repository extends Requestable { * Check if a user is a collaborator on the repository * @see https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-collaborator * @param {string} username - the user to check - * @param {Function} cb - will receive true if the user is a collaborator and false if they are not + * @param {Requestable.callback} cb - will receive true if the user is a collaborator and false if they are not * @return {Promise} - the promise for the http request {Boolean} [description] */ isCollaborator(username, cb) { @@ -394,7 +394,7 @@ class Repository extends Requestable { * @param {string} ref - the ref to check * @param {string} path - the path containing the content to fetch * @param {boolean} raw - `true` if the results should be returned raw instead of GitHub's normalized format - * @param {Function} cb - will receive the fetched data + * @param {Requestable.callback} cb - will receive the fetched data * @return {Promise} - the promise for the http request */ getContents(ref, path, raw, cb) { @@ -409,7 +409,7 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/repos/contents/#get-the-readme * @param {string} ref - the ref to check * @param {boolean} raw - `true` if the results should be returned raw instead of GitHub's normalized format - * @param {Function} cb - will receive the fetched data + * @param {Requestable.callback} cb - will receive the fetched data * @return {Promise} - the promise for the http request */ getReadme(ref, raw, cb) { @@ -421,7 +421,7 @@ class Repository extends Requestable { /** * Fork a repository * @see https://developer.github.com/v3/repos/forks/#create-a-fork - * @param {Function} cb - will receive the information about the newly created fork + * @param {Requestable.callback} cb - will receive the information about the newly created fork * @return {Promise} - the promise for the http request */ fork(cb) { @@ -431,7 +431,7 @@ class Repository extends Requestable { /** * List a repository's forks * @see https://developer.github.com/v3/repos/forks/#list-forks - * @param {Function} cb - will receive the list of repositories forked from this one + * @param {Requestable.callback} cb - will receive the list of repositories forked from this one * @return {Promise} - the promise for the http request */ listForks(cb) { @@ -442,7 +442,7 @@ class Repository extends Requestable { * Create a new branch from an existing branch. * @param {string} [oldBranch=master] - the name of the existing branch * @param {string} newBranch - the name of the new branch - * @param {Function} cb - will receive the commit data for the head of the new branch + * @param {Requestable.callback} cb - will receive the commit data for the head of the new branch * @return {Promise} - the promise for the http request */ createBranch(oldBranch, newBranch, cb) { @@ -466,7 +466,7 @@ class Repository extends Requestable { * Create a new pull request * @see https://developer.github.com/v3/pulls/#create-a-pull-request * @param {Object} options - the pull request description - * @param {Function} cb - will receive the new pull request + * @param {Requestable.callback} cb - will receive the new pull request * @return {Promise} - the promise for the http request */ createPullRequest(options, cb) { @@ -476,7 +476,7 @@ class Repository extends Requestable { /** * List the hooks for the repository * @see https://developer.github.com/v3/repos/hooks/#list-hooks - * @param {Function} cb - will receive the list of hooks + * @param {Requestable.callback} cb - will receive the list of hooks * @return {Promise} - the promise for the http request */ listHooks(cb) { @@ -487,7 +487,7 @@ class Repository extends Requestable { * Get a hook for the repository * @see https://developer.github.com/v3/repos/hooks/#get-single-hook * @param {number} id - the id of the webook - * @param {Function} cb - will receive the details of the webook + * @param {Requestable.callback} cb - will receive the details of the webook * @return {Promise} - the promise for the http request */ getHook(id, cb) { @@ -498,7 +498,7 @@ class Repository extends Requestable { * Add a new hook to the repository * @see https://developer.github.com/v3/repos/hooks/#create-a-hook * @param {Object} options - the configuration describing the new hook - * @param {Function} cb - will receive the new webhook + * @param {Requestable.callback} cb - will receive the new webhook * @return {Promise} - the promise for the http request */ createHook(options, cb) { @@ -510,7 +510,7 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/repos/hooks/#edit-a-hook * @param {number} id - the id of the webhook * @param {Object} options - the new description of the webhook - * @param {Function} cb - will receive the updated webhook + * @param {Requestable.callback} cb - will receive the updated webhook * @return {Promise} - the promise for the http request */ updateHook(id, options, cb) { @@ -521,7 +521,7 @@ class Repository extends Requestable { * Delete a webhook * @see https://developer.github.com/v3/repos/hooks/#delete-a-hook * @param {number} id - the id of the webhook to be deleted - * @param {Function} cb - will receive true if the call is successful + * @param {Requestable.callback} cb - will receive true if the call is successful * @return {Promise} - the promise for the http request */ deleteHook(id, cb) { @@ -533,7 +533,7 @@ class Repository extends Requestable { * @see https://developer.github.com/v3/repos/contents/#delete-a-file * @param {string} branch - the branch to delete from, or the default branch if not specified * @param {string} path - the path of the file to remove - * @param {Function} cb - will receive the commit in which the delete occurred + * @param {Requestable.callback} cb - will receive the commit in which the delete occurred * @return {Promise} - the promise for the http request */ deleteFile(branch, path, cb) { @@ -553,7 +553,7 @@ class Repository extends Requestable { * @param {string} branch - the branch to carry out the reference change, or the default branch if not specified * @param {string} oldPath - original path * @param {string} newPath - new reference path - * @param {Function} cb - will receive the commit in which the move occurred + * @param {Requestable.callback} cb - will receive the commit in which the move occurred * @return {Promise} - the promise for the http request */ move(branch, oldPath, newPath, cb) { @@ -588,7 +588,7 @@ class Repository extends Requestable { * @param {Object} [options.author] - the author of the commit * @param {Object} [options.commiter] - the committer * @param {boolean} [options.encode] - true if the content should be base64 encoded - * @param {Function} cb - will receive the new commit + * @param {Requestable.callback} cb - will receive the new commit * @return {Promise} - the promise for the http request */ writeFile(branch, path, content, message, options, cb) { From 7ac1633ea979aea6d03a5b83b4b2c2de46c98566 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 17 Jun 2016 12:10:14 +0100 Subject: [PATCH 136/217] chore: removed use strict statement in Repository.js Closes gh-349 --- lib/Repository.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Repository.js b/lib/Repository.js index d8da0d45..e2277780 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -1,4 +1,3 @@ -'use strict'; /** * @file * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. From f5d5c4349b8675be33339fe558964cc38a0efb0e Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 17 Jun 2016 14:57:58 +0100 Subject: [PATCH 137/217] feature(repository): add listPullRequestFiles (#353) --- lib/Repository.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index e2277780..1fcd05bc 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -108,6 +108,17 @@ class Repository extends Requestable { return this._request('GET', `/repos/${this.__fullname}/pulls/${number}`, null, cb); } + /** + * List the files of a specific pull request + * @see https://developer.github.com/v3/pulls/#list-pull-requests-files + * @param {number|string} number - the PR you wish to fetch + * @param {Requestable.callback} [cb] - will receive the list of files from the API + * @return {Promise} - the promise for the http request + */ + listPullRequestFiles(number, cb) { + return this._request('GET', `/repos/${this.__fullname}/pulls/${number}/files`, null, cb); + } + /** * Compare two branches/commits/repositories * @see https://developer.github.com/v3/repos/commits/#compare-two-commits From 0198ac0866a8ca68d59bf91177b9563ee1f47e39 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 17 Jun 2016 14:59:59 +0100 Subject: [PATCH 138/217] feature(repository): add updatePullRequst --- lib/Repository.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index 1fcd05bc..74fc3645 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -483,6 +483,18 @@ class Repository extends Requestable { return this._request('POST', `/repos/${this.__fullname}/pulls`, options, cb); } + /** + * Update a pull request + * @see https://developer.github.com/v3/pulls/#update-a-pull-request + * @param {number|string} number - the number of the pull request to update + * @param {Object} options - the pull request description + * @param {Requestable.callback} [cb] - will receive the pull request information + * @return {Promise} - the promise for the http request + */ + updatePullRequst(number, options, cb) { + return this._request('PATCH', `/repos/${this.__fullname}/pulls/${number}`, options, cb); + } + /** * List the hooks for the repository * @see https://developer.github.com/v3/repos/hooks/#list-hooks From ac7509653fea51ecb0de9258fe1072f072ee86a7 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 17 Jun 2016 15:02:05 +0100 Subject: [PATCH 139/217] feature(repository): add mergePullRequest Closes #278, closes #281 --- lib/Repository.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index 74fc3645..de77ae48 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -722,6 +722,18 @@ class Repository extends Requestable { deleteRelease(id, cb) { return this._request('DELETE', `/repos/${this.__fullname}/releases/${id}`, null, cb); } + + /** + * Merge a pull request + * @see https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button + * @param {number|string} number - the number of the pull request to merge + * @param {Object} options - the merge options for the pull request + * @param {Requestable.callback} [cb] - will receive the merge information if the operation is successful + * @return {Promise} - the promise for the http request + */ + mergePullRequest(number, options, cb) { + return this._request('PUT', `/repos/${this.__fullname}/pulls/${number}/merge`, options, cb); + } } module.exports = Repository; From f72397d937532c9042ba35a9019ed71449512079 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Fri, 17 Jun 2016 09:41:44 -0500 Subject: [PATCH 140/217] chore: update package.json and changelog [ci skip] --- CHANGELOG.md | 7 +++++++ package.json | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4684efb9..925b11c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 2.3.0 - 2016/06/17 +### Features +* add `Repository.mergePullRequest` +* add `Repository.updatePullRequest` +* add `Repository.listPullRequestFiles` +* add `Repository.getReadme` + ## 2.2.0 - 2016/05/27 ### Features * add `Issue.listIssueEvents` diff --git a/package.json b/package.json index f6626629..710c69ae 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,6 @@ "github", "api" ], - "gitHead": "aa8aa3c8cd5ce5240373d4fd1d06a7ab4af41a36", "bugs": { "url": "https://github.com/michael/github/issues" } From 30f9e765149d410e76d47741d372a9e20ee8cf07 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Fri, 17 Jun 2016 09:42:29 -0500 Subject: [PATCH 141/217] 2.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 710c69ae..6f15d8f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "2.2.0", + "version": "2.3.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From e264b01bcdf4066adb18b622ffd8a194f1dacfdc Mon Sep 17 00:00:00 2001 From: David Cook Date: Wed, 22 Jun 2016 11:07:19 -0500 Subject: [PATCH 142/217] refactor(requestable): fix error handling to allow for either an axios response or an Error * Add request/response fixture data for rate limit * Add tests for exhausted rate limit * Add status code and text to request error messages * Check created milestone ID before other tests * Fix ResponseError handling * Improve successCallback error handling * Add fixture data to replace live search API --- lib/Requestable.js | 14 +- package.json | 1 + test/error.spec.js | 83 + test/fixtures/record.js | 34 + test/fixtures/repos-ratelimit-exhausted.js | 27 + test/fixtures/repos-ratelimit-ok.js | 31 + test/fixtures/search.json | 53591 +++++++++++++++++++ test/helpers/callbacks.js | 2 +- test/issue.spec.js | 2 + test/search.spec.js | 7 + 10 files changed, 53787 insertions(+), 5 deletions(-) create mode 100644 test/error.spec.js create mode 100644 test/fixtures/record.js create mode 100644 test/fixtures/repos-ratelimit-exhausted.js create mode 100644 test/fixtures/repos-ratelimit-ok.js create mode 100644 test/fixtures/search.json diff --git a/lib/Requestable.js b/lib/Requestable.js index fa26d9d6..95c23bbd 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -276,10 +276,16 @@ function getNextPage(linksHeader = '') { } function callbackErrorOrThrow(cb, path) { - return function handler(response) { - let message = `error making request ${response.config.method} ${response.config.url}`; - let error = new ResponseError(message, path, response); - log(`${message} ${JSON.stringify(response.data)}`); + return function handler(object) { + let error; + if (object.hasOwnProperty('config')) { + const {status, statusText, config: {method, url}} = object; + let message = (`${status} error making request ${method} ${url}: "${statusText}"`); + error = new ResponseError(message, path, object); + log(`${message} ${JSON.stringify(object.data)}`); + } else { + error = object; + } if (cb) { log('going to error callback'); cb(error); diff --git a/package.json b/package.json index 6f15d8f6..15d451a0 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "minami": "^1.1.1", "mocha": "^2.3.4", "must": "^0.13.1", + "nock": "^8.0.0", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" }, diff --git a/test/error.spec.js b/test/error.spec.js new file mode 100644 index 00000000..9c9f23e5 --- /dev/null +++ b/test/error.spec.js @@ -0,0 +1,83 @@ +import assert from 'assert'; +import expect from 'must'; +import nock from 'nock'; + +import Github from '../lib/GitHub'; +import testUser from './fixtures/user.json'; +import {assertSuccessful, assertFailure} from './helpers/callbacks'; +import fixtureExhausted from './fixtures/repos-ratelimit-exhausted.js'; +import fixtureOk from './fixtures/repos-ratelimit-ok.js'; + +describe('Rate limit error', function() { + let github; + let user; + let scope; + + before(function() { + github = new Github(); + user = github.getUser(testUser.USERNAME); + }); + + beforeEach(function() { + scope = fixtureExhausted(); + }); + + it('should reject promise with 403 error', function() { + return user.listRepos().then(function() { + assert.fail(undefined, undefined, 'Promise was resolved instead of rejected'); + }, function(error) { + expect(error).to.be.an.error(); + expect(error).to.have.own('response'); + expect(error.response).to.have.own('status'); + expect(error.response.status).to.be(403); + }); + }); + + it('should call callback', function(done) { + user.listRepos(assertFailure(done, function(error) { + expect(error).to.be.an.error(); + expect(error).to.have.own('response'); + expect(error.response).to.have.own('status'); + expect(error.response.status).to.be(403); + done(); + })); + }); + + afterEach(function() { + scope.done(); + nock.cleanAll(); + }); +}); + +describe('Rate limit OK', function() { + let github; + let user; + let scope; + + before(function() { + github = new Github(); + user = github.getUser(testUser.USERNAME); + }); + + beforeEach(function() { + scope = fixtureOk(); + }); + + it('should resolve promise', function() { + return expect(user.listRepos()).to.resolve.to.object(); + }); + + it('should call callback with array of results', function(done) { + user.listRepos(assertSuccessful(done, function(error, result) { + expect(error).is.not.an.error(); + expect(error).is.not.truthy(); + expect(result).is.array(); + done(); + })); + }); + + afterEach(function() { + scope.done(); + nock.cleanAll(); + }); +}); diff --git a/test/fixtures/record.js b/test/fixtures/record.js new file mode 100644 index 00000000..f17e446e --- /dev/null +++ b/test/fixtures/record.js @@ -0,0 +1,34 @@ +import fs from 'fs'; +import nock from 'nock'; +import path from 'path'; +import GitHub from '../../lib/GitHub'; +import testUser from './user.json'; + +const gh = new GitHub(); + +let fileName; +gh.getRateLimit().getRateLimit() + .then((resp) => { + if (resp.data.rate.remaining === 0) { + fileName = 'repos-ratelimit-exhausted.js'; + } else { + fileName = 'repos-ratelimit-ok.js'; + } + nock.recorder.rec({ + dont_print: true + }); + gh.getUser(testUser.USERNAME).listRepos(); + setTimeout(() => { + const fixtures = nock.recorder.play(); + const filePath = path.join(__dirname, fileName); + const text = ('/* eslint-disable */\n' + + 'import nock from \'nock\';\n' + + 'export default function fixture() {\n' + + ' let scope;\n' + + ' scope = ' + fixtures.join('\nscope = ').trim().replace(/\n/g, '\n ') + '\n' + + ' return scope;\n' + + '}\n'); + fs.writeFileSync(filePath, text); + console.log('Wrote fixture data to', fileName); + }, 10000); + }).catch(console.error); diff --git a/test/fixtures/repos-ratelimit-exhausted.js b/test/fixtures/repos-ratelimit-exhausted.js new file mode 100644 index 00000000..151277f7 --- /dev/null +++ b/test/fixtures/repos-ratelimit-exhausted.js @@ -0,0 +1,27 @@ +/* eslint-disable */ +import nock from 'nock'; +export default function fixture() { + let scope; + scope = nock('https://api.github.com:443', {"encodedQueryParams":true}) + .get('/users/mikedeboertest/repos') + .query({"type":"all","sort":"updated","per_page":"100"}) + .reply(403, {"message":"API rate limit exceeded for 174.20.8.171. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url":"https://developer.github.com/v3/#rate-limiting"}, { server: 'GitHub.com', + date: 'Sat, 18 Jun 2016 11:50:00 GMT', + 'content-type': 'application/json; charset=utf-8', + 'content-length': '246', + connection: 'close', + status: '403 Forbidden', + 'x-ratelimit-limit': '60', + 'x-ratelimit-remaining': '0', + 'x-ratelimit-reset': '1466253529', + 'x-github-media-type': 'github.v3; format=json', + 'access-control-expose-headers': 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval', + 'access-control-allow-origin': '*', + 'content-security-policy': 'default-src \'none\'', + 'strict-transport-security': 'max-age=31536000; includeSubdomains; preload', + 'x-content-type-options': 'nosniff', + 'x-frame-options': 'deny', + 'x-xss-protection': '1; mode=block', + 'x-github-request-id': 'AE1408AB:EA59:14F2183:57653568' }); + return scope; +} diff --git a/test/fixtures/repos-ratelimit-ok.js b/test/fixtures/repos-ratelimit-ok.js new file mode 100644 index 00000000..f22b7298 --- /dev/null +++ b/test/fixtures/repos-ratelimit-ok.js @@ -0,0 +1,31 @@ +/* eslint-disable */ +import nock from 'nock'; +export default function fixture() { + let scope; + scope = nock('https://api.github.com:443', {"encodedQueryParams":true}) + .get('/users/mikedeboertest/repos') + .query({"type":"all","sort":"updated","per_page":"100"}) + .reply(200, [{"id":61223052,"name":"1466007969664-48479","full_name":"mikedeboertest/1466007969664-48479","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1466007969664-48479","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479","forks_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1466007969664-48479/deployments","created_at":"2016-06-15T16:26:32Z","updated_at":"2016-06-15T16:26:32Z","pushed_at":"2016-06-15T16:26:34Z","git_url":"git://github.com/mikedeboertest/1466007969664-48479.git","ssh_url":"git@github.com:mikedeboertest/1466007969664-48479.git","clone_url":"https://github.com/mikedeboertest/1466007969664-48479.git","svn_url":"https://github.com/mikedeboertest/1466007969664-48479","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":61223047,"name":"1466007968216-77827","full_name":"mikedeboertest/1466007968216-77827","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1466007968216-77827","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827","forks_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1466007968216-77827/deployments","created_at":"2016-06-15T16:26:29Z","updated_at":"2016-06-15T16:26:29Z","pushed_at":"2016-06-15T16:26:34Z","git_url":"git://github.com/mikedeboertest/1466007968216-77827.git","ssh_url":"git@github.com:mikedeboertest/1466007968216-77827.git","clone_url":"https://github.com/mikedeboertest/1466007968216-77827.git","svn_url":"https://github.com/mikedeboertest/1466007968216-77827","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":61223043,"name":"1466007967200-21287","full_name":"mikedeboertest/1466007967200-21287","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1466007967200-21287","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287","forks_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1466007967200-21287/deployments","created_at":"2016-06-15T16:26:28Z","updated_at":"2016-06-15T16:26:28Z","pushed_at":"2016-06-15T16:26:34Z","git_url":"git://github.com/mikedeboertest/1466007967200-21287.git","ssh_url":"git@github.com:mikedeboertest/1466007967200-21287.git","clone_url":"https://github.com/mikedeboertest/1466007967200-21287.git","svn_url":"https://github.com/mikedeboertest/1466007967200-21287","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":59675273,"name":"1464190257040-1677","full_name":"mikedeboertest/1464190257040-1677","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1464190257040-1677","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677","forks_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1464190257040-1677/deployments","created_at":"2016-05-25T15:31:53Z","updated_at":"2016-05-25T15:33:10Z","pushed_at":"2016-05-25T15:34:09Z","git_url":"git://github.com/mikedeboertest/1464190257040-1677.git","ssh_url":"git@github.com:mikedeboertest/1464190257040-1677.git","clone_url":"https://github.com/mikedeboertest/1464190257040-1677.git","svn_url":"https://github.com/mikedeboertest/1464190257040-1677","homepage":null,"size":4,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":59491156,"name":"1464014781403-67984","full_name":"mikedeboertest/1464014781403-67984","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1464014781403-67984","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984","forks_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1464014781403-67984/deployments","created_at":"2016-05-23T14:47:24Z","updated_at":"2016-05-23T14:48:41Z","pushed_at":"2016-05-23T14:47:25Z","git_url":"git://github.com/mikedeboertest/1464014781403-67984.git","ssh_url":"git@github.com:mikedeboertest/1464014781403-67984.git","clone_url":"https://github.com/mikedeboertest/1464014781403-67984.git","svn_url":"https://github.com/mikedeboertest/1464014781403-67984","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":59488747,"name":"1464013020573-30609","full_name":"mikedeboertest/1464013020573-30609","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1464013020573-30609","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609","forks_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1464013020573-30609/deployments","created_at":"2016-05-23T14:17:26Z","updated_at":"2016-05-23T14:17:26Z","pushed_at":"2016-05-23T14:17:27Z","git_url":"git://github.com/mikedeboertest/1464013020573-30609.git","ssh_url":"git@github.com:mikedeboertest/1464013020573-30609.git","clone_url":"https://github.com/mikedeboertest/1464013020573-30609.git","svn_url":"https://github.com/mikedeboertest/1464013020573-30609","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":59302174,"name":"1463755268475-95976","full_name":"mikedeboertest/1463755268475-95976","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463755268475-95976","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976","forks_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463755268475-95976/deployments","created_at":"2016-05-20T14:41:49Z","updated_at":"2016-05-20T14:41:49Z","pushed_at":"2016-05-20T14:41:58Z","git_url":"git://github.com/mikedeboertest/1463755268475-95976.git","ssh_url":"git@github.com:mikedeboertest/1463755268475-95976.git","clone_url":"https://github.com/mikedeboertest/1463755268475-95976.git","svn_url":"https://github.com/mikedeboertest/1463755268475-95976","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":59230219,"name":"1463681113858-76250","full_name":"mikedeboertest/1463681113858-76250","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463681113858-76250","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250","forks_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463681113858-76250/deployments","created_at":"2016-05-19T18:05:14Z","updated_at":"2016-05-19T18:05:14Z","pushed_at":"2016-05-19T18:05:19Z","git_url":"git://github.com/mikedeboertest/1463681113858-76250.git","ssh_url":"git@github.com:mikedeboertest/1463681113858-76250.git","clone_url":"https://github.com/mikedeboertest/1463681113858-76250.git","svn_url":"https://github.com/mikedeboertest/1463681113858-76250","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":59230157,"name":"1463681047051-11244","full_name":"mikedeboertest/1463681047051-11244","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463681047051-11244","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244","forks_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463681047051-11244/deployments","created_at":"2016-05-19T18:04:07Z","updated_at":"2016-05-19T18:04:42Z","pushed_at":"2016-05-19T18:04:44Z","git_url":"git://github.com/mikedeboertest/1463681047051-11244.git","ssh_url":"git@github.com:mikedeboertest/1463681047051-11244.git","clone_url":"https://github.com/mikedeboertest/1463681047051-11244.git","svn_url":"https://github.com/mikedeboertest/1463681047051-11244","homepage":null,"size":6,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"},{"id":59229755,"name":"1463680679643-22824","full_name":"mikedeboertest/1463680679643-22824","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463680679643-22824","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824","forks_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463680679643-22824/deployments","created_at":"2016-05-19T17:58:00Z","updated_at":"2016-05-19T17:58:00Z","pushed_at":"2016-05-19T17:58:08Z","git_url":"git://github.com/mikedeboertest/1463680679643-22824.git","ssh_url":"git@github.com:mikedeboertest/1463680679643-22824.git","clone_url":"https://github.com/mikedeboertest/1463680679643-22824.git","svn_url":"https://github.com/mikedeboertest/1463680679643-22824","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":59229667,"name":"1463680609045-98875","full_name":"mikedeboertest/1463680609045-98875","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463680609045-98875","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875","forks_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463680609045-98875/deployments","created_at":"2016-05-19T17:56:49Z","updated_at":"2016-05-19T17:57:35Z","pushed_at":"2016-05-19T17:57:37Z","git_url":"git://github.com/mikedeboertest/1463680609045-98875.git","ssh_url":"git@github.com:mikedeboertest/1463680609045-98875.git","clone_url":"https://github.com/mikedeboertest/1463680609045-98875.git","svn_url":"https://github.com/mikedeboertest/1463680609045-98875","homepage":null,"size":6,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"},{"id":58823781,"name":"1463250529752-2838","full_name":"mikedeboertest/1463250529752-2838","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463250529752-2838","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838","forks_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463250529752-2838/deployments","created_at":"2016-05-14T18:29:24Z","updated_at":"2016-05-14T18:29:59Z","pushed_at":"2016-05-14T18:29:56Z","git_url":"git://github.com/mikedeboertest/1463250529752-2838.git","ssh_url":"git@github.com:mikedeboertest/1463250529752-2838.git","clone_url":"https://github.com/mikedeboertest/1463250529752-2838.git","svn_url":"https://github.com/mikedeboertest/1463250529752-2838","homepage":null,"size":6,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"},{"id":58823599,"name":"1463250340268-79337","full_name":"mikedeboertest/1463250340268-79337","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463250340268-79337","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337","forks_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463250340268-79337/deployments","created_at":"2016-05-14T18:26:15Z","updated_at":"2016-05-14T18:26:15Z","pushed_at":"2016-05-14T18:26:18Z","git_url":"git://github.com/mikedeboertest/1463250340268-79337.git","ssh_url":"git@github.com:mikedeboertest/1463250340268-79337.git","clone_url":"https://github.com/mikedeboertest/1463250340268-79337.git","svn_url":"https://github.com/mikedeboertest/1463250340268-79337","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58823433,"name":"1463250256546-33252","full_name":"mikedeboertest/1463250256546-33252","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463250256546-33252","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252","forks_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463250256546-33252/deployments","created_at":"2016-05-14T18:24:52Z","updated_at":"2016-05-14T18:24:52Z","pushed_at":"2016-05-14T18:25:19Z","git_url":"git://github.com/mikedeboertest/1463250256546-33252.git","ssh_url":"git@github.com:mikedeboertest/1463250256546-33252.git","clone_url":"https://github.com/mikedeboertest/1463250256546-33252.git","svn_url":"https://github.com/mikedeboertest/1463250256546-33252","homepage":null,"size":1,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"},{"id":58823363,"name":"1463250134207-67700","full_name":"mikedeboertest/1463250134207-67700","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463250134207-67700","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700","forks_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463250134207-67700/deployments","created_at":"2016-05-14T18:22:52Z","updated_at":"2016-05-14T18:22:52Z","pushed_at":"2016-05-14T18:22:56Z","git_url":"git://github.com/mikedeboertest/1463250134207-67700.git","ssh_url":"git@github.com:mikedeboertest/1463250134207-67700.git","clone_url":"https://github.com/mikedeboertest/1463250134207-67700.git","svn_url":"https://github.com/mikedeboertest/1463250134207-67700","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58823282,"name":"1463250004216-11319","full_name":"mikedeboertest/1463250004216-11319","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463250004216-11319","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319","forks_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463250004216-11319/deployments","created_at":"2016-05-14T18:20:40Z","updated_at":"2016-05-14T18:20:40Z","pushed_at":"2016-05-14T18:20:43Z","git_url":"git://github.com/mikedeboertest/1463250004216-11319.git","ssh_url":"git@github.com:mikedeboertest/1463250004216-11319.git","clone_url":"https://github.com/mikedeboertest/1463250004216-11319.git","svn_url":"https://github.com/mikedeboertest/1463250004216-11319","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58821871,"name":"1463248083993-41353","full_name":"mikedeboertest/1463248083993-41353","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463248083993-41353","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353","forks_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463248083993-41353/deployments","created_at":"2016-05-14T17:48:39Z","updated_at":"2016-05-14T17:48:39Z","pushed_at":"2016-05-14T17:48:43Z","git_url":"git://github.com/mikedeboertest/1463248083993-41353.git","ssh_url":"git@github.com:mikedeboertest/1463248083993-41353.git","clone_url":"https://github.com/mikedeboertest/1463248083993-41353.git","svn_url":"https://github.com/mikedeboertest/1463248083993-41353","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58821783,"name":"1463247976655-95370","full_name":"mikedeboertest/1463247976655-95370","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463247976655-95370","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370","forks_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463247976655-95370/deployments","created_at":"2016-05-14T17:46:53Z","updated_at":"2016-05-14T17:46:53Z","pushed_at":"2016-05-14T17:46:57Z","git_url":"git://github.com/mikedeboertest/1463247976655-95370.git","ssh_url":"git@github.com:mikedeboertest/1463247976655-95370.git","clone_url":"https://github.com/mikedeboertest/1463247976655-95370.git","svn_url":"https://github.com/mikedeboertest/1463247976655-95370","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58821247,"name":"1463247323044-36209","full_name":"mikedeboertest/1463247323044-36209","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463247323044-36209","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209","forks_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463247323044-36209/deployments","created_at":"2016-05-14T17:35:56Z","updated_at":"2016-05-14T17:36:28Z","pushed_at":"2016-05-14T17:36:31Z","git_url":"git://github.com/mikedeboertest/1463247323044-36209.git","ssh_url":"git@github.com:mikedeboertest/1463247323044-36209.git","clone_url":"https://github.com/mikedeboertest/1463247323044-36209.git","svn_url":"https://github.com/mikedeboertest/1463247323044-36209","homepage":null,"size":6,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"},{"id":58820899,"name":"1463246865022-49863","full_name":"mikedeboertest/1463246865022-49863","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463246865022-49863","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863","forks_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463246865022-49863/deployments","created_at":"2016-05-14T17:28:19Z","updated_at":"2016-05-14T17:28:19Z","pushed_at":"2016-05-14T17:28:26Z","git_url":"git://github.com/mikedeboertest/1463246865022-49863.git","ssh_url":"git@github.com:mikedeboertest/1463246865022-49863.git","clone_url":"https://github.com/mikedeboertest/1463246865022-49863.git","svn_url":"https://github.com/mikedeboertest/1463246865022-49863","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58802047,"name":"1463221398969-91943","full_name":"mikedeboertest/1463221398969-91943","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463221398969-91943","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943","forks_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463221398969-91943/deployments","created_at":"2016-05-14T10:23:56Z","updated_at":"2016-05-14T10:23:56Z","pushed_at":"2016-05-14T10:24:02Z","git_url":"git://github.com/mikedeboertest/1463221398969-91943.git","ssh_url":"git@github.com:mikedeboertest/1463221398969-91943.git","clone_url":"https://github.com/mikedeboertest/1463221398969-91943.git","svn_url":"https://github.com/mikedeboertest/1463221398969-91943","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58801785,"name":"1463220955896-74691","full_name":"mikedeboertest/1463220955896-74691","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463220955896-74691","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691","forks_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463220955896-74691/deployments","created_at":"2016-05-14T10:16:38Z","updated_at":"2016-05-14T10:16:38Z","pushed_at":"2016-05-14T10:16:43Z","git_url":"git://github.com/mikedeboertest/1463220955896-74691.git","ssh_url":"git@github.com:mikedeboertest/1463220955896-74691.git","clone_url":"https://github.com/mikedeboertest/1463220955896-74691.git","svn_url":"https://github.com/mikedeboertest/1463220955896-74691","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58764717,"name":"1463165299919-53197","full_name":"mikedeboertest/1463165299919-53197","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1463165299919-53197","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197","forks_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1463165299919-53197/deployments","created_at":"2016-05-13T18:48:41Z","updated_at":"2016-05-13T18:48:41Z","pushed_at":"2016-05-13T18:48:48Z","git_url":"git://github.com/mikedeboertest/1463165299919-53197.git","ssh_url":"git@github.com:mikedeboertest/1463165299919-53197.git","clone_url":"https://github.com/mikedeboertest/1463165299919-53197.git","svn_url":"https://github.com/mikedeboertest/1463165299919-53197","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":58551013,"name":"1462976008238-82297","full_name":"mikedeboertest/1462976008238-82297","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1462976008238-82297","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297","forks_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1462976008238-82297/deployments","created_at":"2016-05-11T14:13:52Z","updated_at":"2016-05-11T14:13:52Z","pushed_at":"2016-05-11T14:14:09Z","git_url":"git://github.com/mikedeboertest/1462976008238-82297.git","ssh_url":"git@github.com:mikedeboertest/1462976008238-82297.git","clone_url":"https://github.com/mikedeboertest/1462976008238-82297.git","svn_url":"https://github.com/mikedeboertest/1462976008238-82297","homepage":null,"size":1,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"},{"id":58037771,"name":"23054","full_name":"mikedeboertest/23054","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/23054","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/23054","forks_url":"https://api.github.com/repos/mikedeboertest/23054/forks","keys_url":"https://api.github.com/repos/mikedeboertest/23054/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/23054/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/23054/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/23054/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/23054/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/23054/events","assignees_url":"https://api.github.com/repos/mikedeboertest/23054/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/23054/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/23054/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/23054/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/23054/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/23054/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/23054/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/23054/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/23054/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/23054/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/23054/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/23054/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/23054/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/23054/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/23054/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/23054/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/23054/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/23054/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/23054/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/23054/merges","archive_url":"https://api.github.com/repos/mikedeboertest/23054/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/23054/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/23054/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/23054/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/23054/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/23054/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/23054/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/23054/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/23054/deployments","created_at":"2016-05-04T08:58:56Z","updated_at":"2016-05-04T08:58:56Z","pushed_at":"2016-05-04T08:58:57Z","git_url":"git://github.com/mikedeboertest/23054.git","ssh_url":"git@github.com:mikedeboertest/23054.git","clone_url":"https://github.com/mikedeboertest/23054.git","svn_url":"https://github.com/mikedeboertest/23054","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":57249771,"name":"1461792161253-59167","full_name":"mikedeboertest/1461792161253-59167","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1461792161253-59167","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167","forks_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1461792161253-59167/deployments","created_at":"2016-04-27T21:22:57Z","updated_at":"2016-04-27T21:22:57Z","pushed_at":"2016-04-27T21:23:06Z","git_url":"git://github.com/mikedeboertest/1461792161253-59167.git","ssh_url":"git@github.com:mikedeboertest/1461792161253-59167.git","clone_url":"https://github.com/mikedeboertest/1461792161253-59167.git","svn_url":"https://github.com/mikedeboertest/1461792161253-59167","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"},{"id":57248531,"name":"1461791596897-87484","full_name":"mikedeboertest/1461791596897-87484","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/1461791596897-87484","description":null,"fork":false,"url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484","forks_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/forks","keys_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/events","assignees_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/merges","archive_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/1461791596897-87484/deployments","created_at":"2016-04-27T21:13:32Z","updated_at":"2016-04-27T21:13:32Z","pushed_at":"2016-04-27T21:13:49Z","git_url":"git://github.com/mikedeboertest/1461791596897-87484.git","ssh_url":"git@github.com:mikedeboertest/1461791596897-87484.git","clone_url":"https://github.com/mikedeboertest/1461791596897-87484.git","svn_url":"https://github.com/mikedeboertest/1461791596897-87484","homepage":null,"size":2,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"},{"id":57236022,"name":"TestRepo","full_name":"mikedeboertest/TestRepo","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/TestRepo","description":"Used for automated testing","fork":false,"url":"https://api.github.com/repos/mikedeboertest/TestRepo","forks_url":"https://api.github.com/repos/mikedeboertest/TestRepo/forks","keys_url":"https://api.github.com/repos/mikedeboertest/TestRepo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/TestRepo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/TestRepo/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/TestRepo/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/TestRepo/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/TestRepo/events","assignees_url":"https://api.github.com/repos/mikedeboertest/TestRepo/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/TestRepo/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/TestRepo/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/TestRepo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/TestRepo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/TestRepo/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/TestRepo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/TestRepo/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/TestRepo/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/TestRepo/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/TestRepo/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/TestRepo/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/TestRepo/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/TestRepo/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/TestRepo/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/TestRepo/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/TestRepo/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/TestRepo/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/TestRepo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/TestRepo/merges","archive_url":"https://api.github.com/repos/mikedeboertest/TestRepo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/TestRepo/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/TestRepo/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/TestRepo/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/TestRepo/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/TestRepo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/TestRepo/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/TestRepo/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/TestRepo/deployments","created_at":"2016-04-27T18:20:55Z","updated_at":"2016-04-27T18:20:55Z","pushed_at":"2016-04-27T18:20:56Z","git_url":"git://github.com/mikedeboertest/TestRepo.git","ssh_url":"git@github.com:mikedeboertest/TestRepo.git","clone_url":"https://github.com/mikedeboertest/TestRepo.git","svn_url":"https://github.com/mikedeboertest/TestRepo","homepage":null,"size":0,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":14,"forks":0,"open_issues":14,"watchers":0,"default_branch":"master"},{"id":57235903,"name":"github","full_name":"mikedeboertest/github","owner":{"login":"mikedeboertest","id":2493292,"avatar_url":"https://avatars.githubusercontent.com/u/2493292?v=3","gravatar_id":"","url":"https://api.github.com/users/mikedeboertest","html_url":"https://github.com/mikedeboertest","followers_url":"https://api.github.com/users/mikedeboertest/followers","following_url":"https://api.github.com/users/mikedeboertest/following{/other_user}","gists_url":"https://api.github.com/users/mikedeboertest/gists{/gist_id}","starred_url":"https://api.github.com/users/mikedeboertest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikedeboertest/subscriptions","organizations_url":"https://api.github.com/users/mikedeboertest/orgs","repos_url":"https://api.github.com/users/mikedeboertest/repos","events_url":"https://api.github.com/users/mikedeboertest/events{/privacy}","received_events_url":"https://api.github.com/users/mikedeboertest/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mikedeboertest/github","description":"A higher-level wrapper around the Github API. Intended for the browser.","fork":true,"url":"https://api.github.com/repos/mikedeboertest/github","forks_url":"https://api.github.com/repos/mikedeboertest/github/forks","keys_url":"https://api.github.com/repos/mikedeboertest/github/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mikedeboertest/github/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mikedeboertest/github/teams","hooks_url":"https://api.github.com/repos/mikedeboertest/github/hooks","issue_events_url":"https://api.github.com/repos/mikedeboertest/github/issues/events{/number}","events_url":"https://api.github.com/repos/mikedeboertest/github/events","assignees_url":"https://api.github.com/repos/mikedeboertest/github/assignees{/user}","branches_url":"https://api.github.com/repos/mikedeboertest/github/branches{/branch}","tags_url":"https://api.github.com/repos/mikedeboertest/github/tags","blobs_url":"https://api.github.com/repos/mikedeboertest/github/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mikedeboertest/github/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mikedeboertest/github/git/refs{/sha}","trees_url":"https://api.github.com/repos/mikedeboertest/github/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mikedeboertest/github/statuses/{sha}","languages_url":"https://api.github.com/repos/mikedeboertest/github/languages","stargazers_url":"https://api.github.com/repos/mikedeboertest/github/stargazers","contributors_url":"https://api.github.com/repos/mikedeboertest/github/contributors","subscribers_url":"https://api.github.com/repos/mikedeboertest/github/subscribers","subscription_url":"https://api.github.com/repos/mikedeboertest/github/subscription","commits_url":"https://api.github.com/repos/mikedeboertest/github/commits{/sha}","git_commits_url":"https://api.github.com/repos/mikedeboertest/github/git/commits{/sha}","comments_url":"https://api.github.com/repos/mikedeboertest/github/comments{/number}","issue_comment_url":"https://api.github.com/repos/mikedeboertest/github/issues/comments{/number}","contents_url":"https://api.github.com/repos/mikedeboertest/github/contents/{+path}","compare_url":"https://api.github.com/repos/mikedeboertest/github/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mikedeboertest/github/merges","archive_url":"https://api.github.com/repos/mikedeboertest/github/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mikedeboertest/github/downloads","issues_url":"https://api.github.com/repos/mikedeboertest/github/issues{/number}","pulls_url":"https://api.github.com/repos/mikedeboertest/github/pulls{/number}","milestones_url":"https://api.github.com/repos/mikedeboertest/github/milestones{/number}","notifications_url":"https://api.github.com/repos/mikedeboertest/github/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mikedeboertest/github/labels{/name}","releases_url":"https://api.github.com/repos/mikedeboertest/github/releases{/id}","deployments_url":"https://api.github.com/repos/mikedeboertest/github/deployments","created_at":"2016-04-27T18:19:02Z","updated_at":"2016-04-27T18:19:03Z","pushed_at":"2016-04-27T18:15:51Z","git_url":"git://github.com/mikedeboertest/github.git","ssh_url":"git@github.com:mikedeboertest/github.git","clone_url":"https://github.com/mikedeboertest/github.git","svn_url":"https://github.com/mikedeboertest/github","homepage":"","size":1734,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}], { server: 'GitHub.com', + date: 'Sat, 18 Jun 2016 11:38:49 GMT', + 'content-type': 'application/json; charset=utf-8', + 'content-length': '153901', + connection: 'close', + status: '200 OK', + 'x-ratelimit-limit': '60', + 'x-ratelimit-remaining': '59', + 'x-ratelimit-reset': '1466253529', + 'cache-control': 'public, max-age=60, s-maxage=60', + vary: 'Accept, Accept-Encoding', + etag: '"1901b5d7790ae51d7c5ce6d4b98ac7bc"', + 'x-github-media-type': 'github.v3; format=json', + 'access-control-expose-headers': 'ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval', + 'access-control-allow-origin': '*', + 'content-security-policy': 'default-src \'none\'', + 'strict-transport-security': 'max-age=31536000; includeSubdomains; preload', + 'x-content-type-options': 'nosniff', + 'x-frame-options': 'deny', + 'x-xss-protection': '1; mode=block', + 'x-served-by': 'a51acaae89a7607fd7ee967627be18e4', + 'x-github-request-id': 'AE1408AB:13AFE:4000839:576532C8' }); + return scope; +} diff --git a/test/fixtures/search.json b/test/fixtures/search.json new file mode 100644 index 00000000..e87ad025 --- /dev/null +++ b/test/fixtures/search.json @@ -0,0 +1,53591 @@ +[ + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/repositories?q=tetris+language:assembly&sort=stars&order=desc&type=all&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 473, + "incomplete_results": false, + "items": [ + { + "id": 8688362, + "name": "Nand2Tetris", + "full_name": "havivha/Nand2Tetris", + "owner": { + "login": "havivha", + "id": 2629901, + "avatar_url": "https://avatars.githubusercontent.com/u/2629901?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/havivha", + "html_url": "https://github.com/havivha", + "followers_url": "https://api.github.com/users/havivha/followers", + "following_url": "https://api.github.com/users/havivha/following{/other_user}", + "gists_url": "https://api.github.com/users/havivha/gists{/gist_id}", + "starred_url": "https://api.github.com/users/havivha/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/havivha/subscriptions", + "organizations_url": "https://api.github.com/users/havivha/orgs", + "repos_url": "https://api.github.com/users/havivha/repos", + "events_url": "https://api.github.com/users/havivha/events{/privacy}", + "received_events_url": "https://api.github.com/users/havivha/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/havivha/Nand2Tetris", + "description": "Computer implementation as described in \"The Elements of Computing Systems\"", + "fork": false, + "url": "https://api.github.com/repos/havivha/Nand2Tetris", + "forks_url": "https://api.github.com/repos/havivha/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/havivha/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/havivha/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/havivha/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/havivha/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/havivha/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/havivha/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/havivha/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/havivha/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/havivha/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/havivha/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/havivha/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/havivha/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/havivha/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/havivha/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/havivha/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/havivha/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/havivha/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/havivha/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/havivha/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/havivha/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/havivha/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/havivha/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/havivha/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/havivha/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/havivha/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/havivha/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/havivha/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/havivha/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/havivha/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/havivha/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/havivha/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/havivha/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/havivha/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/havivha/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/havivha/Nand2Tetris/deployments", + "created_at": "2013-03-10T17:04:20Z", + "updated_at": "2016-06-19T05:26:22Z", + "pushed_at": "2015-06-10T14:38:16Z", + "git_url": "git://github.com/havivha/Nand2Tetris.git", + "ssh_url": "git@github.com:havivha/Nand2Tetris.git", + "clone_url": "https://github.com/havivha/Nand2Tetris.git", + "svn_url": "https://github.com/havivha/Nand2Tetris", + "homepage": null, + "size": 474, + "stargazers_count": 51, + "watchers_count": 51, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 46, + "mirror_url": null, + "open_issues_count": 1, + "forks": 46, + "open_issues": 1, + "watchers": 51, + "default_branch": "master", + "score": 22.6195 + }, + { + "id": 37400358, + "name": "tetrasm", + "full_name": "programble/tetrasm", + "owner": { + "login": "programble", + "id": 166462, + "avatar_url": "https://avatars.githubusercontent.com/u/166462?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/programble", + "html_url": "https://github.com/programble", + "followers_url": "https://api.github.com/users/programble/followers", + "following_url": "https://api.github.com/users/programble/following{/other_user}", + "gists_url": "https://api.github.com/users/programble/gists{/gist_id}", + "starred_url": "https://api.github.com/users/programble/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/programble/subscriptions", + "organizations_url": "https://api.github.com/users/programble/orgs", + "repos_url": "https://api.github.com/users/programble/repos", + "events_url": "https://api.github.com/users/programble/events{/privacy}", + "received_events_url": "https://api.github.com/users/programble/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/programble/tetrasm", + "description": "Tetris for x86 in NASM", + "fork": false, + "url": "https://api.github.com/repos/programble/tetrasm", + "forks_url": "https://api.github.com/repos/programble/tetrasm/forks", + "keys_url": "https://api.github.com/repos/programble/tetrasm/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/programble/tetrasm/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/programble/tetrasm/teams", + "hooks_url": "https://api.github.com/repos/programble/tetrasm/hooks", + "issue_events_url": "https://api.github.com/repos/programble/tetrasm/issues/events{/number}", + "events_url": "https://api.github.com/repos/programble/tetrasm/events", + "assignees_url": "https://api.github.com/repos/programble/tetrasm/assignees{/user}", + "branches_url": "https://api.github.com/repos/programble/tetrasm/branches{/branch}", + "tags_url": "https://api.github.com/repos/programble/tetrasm/tags", + "blobs_url": "https://api.github.com/repos/programble/tetrasm/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/programble/tetrasm/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/programble/tetrasm/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/programble/tetrasm/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/programble/tetrasm/statuses/{sha}", + "languages_url": "https://api.github.com/repos/programble/tetrasm/languages", + "stargazers_url": "https://api.github.com/repos/programble/tetrasm/stargazers", + "contributors_url": "https://api.github.com/repos/programble/tetrasm/contributors", + "subscribers_url": "https://api.github.com/repos/programble/tetrasm/subscribers", + "subscription_url": "https://api.github.com/repos/programble/tetrasm/subscription", + "commits_url": "https://api.github.com/repos/programble/tetrasm/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/programble/tetrasm/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/programble/tetrasm/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/programble/tetrasm/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/programble/tetrasm/contents/{+path}", + "compare_url": "https://api.github.com/repos/programble/tetrasm/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/programble/tetrasm/merges", + "archive_url": "https://api.github.com/repos/programble/tetrasm/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/programble/tetrasm/downloads", + "issues_url": "https://api.github.com/repos/programble/tetrasm/issues{/number}", + "pulls_url": "https://api.github.com/repos/programble/tetrasm/pulls{/number}", + "milestones_url": "https://api.github.com/repos/programble/tetrasm/milestones{/number}", + "notifications_url": "https://api.github.com/repos/programble/tetrasm/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/programble/tetrasm/labels{/name}", + "releases_url": "https://api.github.com/repos/programble/tetrasm/releases{/id}", + "deployments_url": "https://api.github.com/repos/programble/tetrasm/deployments", + "created_at": "2015-06-14T05:26:28Z", + "updated_at": "2016-05-12T00:48:31Z", + "pushed_at": "2015-09-14T18:47:29Z", + "git_url": "git://github.com/programble/tetrasm.git", + "ssh_url": "git@github.com:programble/tetrasm.git", + "clone_url": "https://github.com/programble/tetrasm.git", + "svn_url": "https://github.com/programble/tetrasm", + "homepage": null, + "size": 420, + "stargazers_count": 47, + "watchers_count": 47, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 3, + "mirror_url": null, + "open_issues_count": 1, + "forks": 3, + "open_issues": 1, + "watchers": 47, + "default_branch": "master", + "score": 20.474998 + }, + { + "id": 21095601, + "name": "Tetris-Duel", + "full_name": "Tetris-Duel-Team/Tetris-Duel", + "owner": { + "login": "Tetris-Duel-Team", + "id": 7956696, + "avatar_url": "https://avatars.githubusercontent.com/u/7956696?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Tetris-Duel-Team", + "html_url": "https://github.com/Tetris-Duel-Team", + "followers_url": "https://api.github.com/users/Tetris-Duel-Team/followers", + "following_url": "https://api.github.com/users/Tetris-Duel-Team/following{/other_user}", + "gists_url": "https://api.github.com/users/Tetris-Duel-Team/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Tetris-Duel-Team/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Tetris-Duel-Team/subscriptions", + "organizations_url": "https://api.github.com/users/Tetris-Duel-Team/orgs", + "repos_url": "https://api.github.com/users/Tetris-Duel-Team/repos", + "events_url": "https://api.github.com/users/Tetris-Duel-Team/events{/privacy}", + "received_events_url": "https://api.github.com/users/Tetris-Duel-Team/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Tetris-Duel-Team/Tetris-Duel", + "description": "Multiplayer Tetris for Raspberry Pi (in bare metal assembly)", + "fork": false, + "url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel", + "forks_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/forks", + "keys_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/teams", + "hooks_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/hooks", + "issue_events_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/issues/events{/number}", + "events_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/events", + "assignees_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/assignees{/user}", + "branches_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/branches{/branch}", + "tags_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/tags", + "blobs_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/languages", + "stargazers_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/stargazers", + "contributors_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/contributors", + "subscribers_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/subscribers", + "subscription_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/subscription", + "commits_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/contents/{+path}", + "compare_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/merges", + "archive_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/downloads", + "issues_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/issues{/number}", + "pulls_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/labels{/name}", + "releases_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/releases{/id}", + "deployments_url": "https://api.github.com/repos/Tetris-Duel-Team/Tetris-Duel/deployments", + "created_at": "2014-06-22T14:23:25Z", + "updated_at": "2016-06-02T15:14:04Z", + "pushed_at": "2016-02-05T04:33:56Z", + "git_url": "git://github.com/Tetris-Duel-Team/Tetris-Duel.git", + "ssh_url": "git@github.com:Tetris-Duel-Team/Tetris-Duel.git", + "clone_url": "https://github.com/Tetris-Duel-Team/Tetris-Duel.git", + "svn_url": "https://github.com/Tetris-Duel-Team/Tetris-Duel", + "homepage": "", + "size": 11094, + "stargazers_count": 46, + "watchers_count": 46, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 6, + "mirror_url": null, + "open_issues_count": 0, + "forks": 6, + "open_issues": 0, + "watchers": 46, + "default_branch": "master", + "score": 19.276867 + }, + { + "id": 31056900, + "name": "tetris.c64", + "full_name": "wiebow/tetris.c64", + "owner": { + "login": "wiebow", + "id": 1338966, + "avatar_url": "https://avatars.githubusercontent.com/u/1338966?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wiebow", + "html_url": "https://github.com/wiebow", + "followers_url": "https://api.github.com/users/wiebow/followers", + "following_url": "https://api.github.com/users/wiebow/following{/other_user}", + "gists_url": "https://api.github.com/users/wiebow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wiebow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wiebow/subscriptions", + "organizations_url": "https://api.github.com/users/wiebow/orgs", + "repos_url": "https://api.github.com/users/wiebow/repos", + "events_url": "https://api.github.com/users/wiebow/events{/privacy}", + "received_events_url": "https://api.github.com/users/wiebow/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wiebow/tetris.c64", + "description": "Tetris in 6502 for the Commodore 64", + "fork": false, + "url": "https://api.github.com/repos/wiebow/tetris.c64", + "forks_url": "https://api.github.com/repos/wiebow/tetris.c64/forks", + "keys_url": "https://api.github.com/repos/wiebow/tetris.c64/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wiebow/tetris.c64/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wiebow/tetris.c64/teams", + "hooks_url": "https://api.github.com/repos/wiebow/tetris.c64/hooks", + "issue_events_url": "https://api.github.com/repos/wiebow/tetris.c64/issues/events{/number}", + "events_url": "https://api.github.com/repos/wiebow/tetris.c64/events", + "assignees_url": "https://api.github.com/repos/wiebow/tetris.c64/assignees{/user}", + "branches_url": "https://api.github.com/repos/wiebow/tetris.c64/branches{/branch}", + "tags_url": "https://api.github.com/repos/wiebow/tetris.c64/tags", + "blobs_url": "https://api.github.com/repos/wiebow/tetris.c64/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wiebow/tetris.c64/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wiebow/tetris.c64/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wiebow/tetris.c64/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wiebow/tetris.c64/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wiebow/tetris.c64/languages", + "stargazers_url": "https://api.github.com/repos/wiebow/tetris.c64/stargazers", + "contributors_url": "https://api.github.com/repos/wiebow/tetris.c64/contributors", + "subscribers_url": "https://api.github.com/repos/wiebow/tetris.c64/subscribers", + "subscription_url": "https://api.github.com/repos/wiebow/tetris.c64/subscription", + "commits_url": "https://api.github.com/repos/wiebow/tetris.c64/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wiebow/tetris.c64/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wiebow/tetris.c64/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wiebow/tetris.c64/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wiebow/tetris.c64/contents/{+path}", + "compare_url": "https://api.github.com/repos/wiebow/tetris.c64/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wiebow/tetris.c64/merges", + "archive_url": "https://api.github.com/repos/wiebow/tetris.c64/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wiebow/tetris.c64/downloads", + "issues_url": "https://api.github.com/repos/wiebow/tetris.c64/issues{/number}", + "pulls_url": "https://api.github.com/repos/wiebow/tetris.c64/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wiebow/tetris.c64/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wiebow/tetris.c64/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wiebow/tetris.c64/labels{/name}", + "releases_url": "https://api.github.com/repos/wiebow/tetris.c64/releases{/id}", + "deployments_url": "https://api.github.com/repos/wiebow/tetris.c64/deployments", + "created_at": "2015-02-20T08:46:43Z", + "updated_at": "2016-06-19T00:29:00Z", + "pushed_at": "2016-04-04T17:54:55Z", + "git_url": "git://github.com/wiebow/tetris.c64.git", + "ssh_url": "git@github.com:wiebow/tetris.c64.git", + "clone_url": "https://github.com/wiebow/tetris.c64.git", + "svn_url": "https://github.com/wiebow/tetris.c64", + "homepage": "http://wiebow.github.io/tetris.c64", + "size": 85, + "stargazers_count": 20, + "watchers_count": 20, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": true, + "forks_count": 3, + "mirror_url": null, + "open_issues_count": 0, + "forks": 3, + "open_issues": 0, + "watchers": 20, + "default_branch": "master", + "score": 17.023262 + }, + { + "id": 12466077, + "name": "tetranglix", + "full_name": "Shikhin/tetranglix", + "owner": { + "login": "Shikhin", + "id": 617680, + "avatar_url": "https://avatars.githubusercontent.com/u/617680?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Shikhin", + "html_url": "https://github.com/Shikhin", + "followers_url": "https://api.github.com/users/Shikhin/followers", + "following_url": "https://api.github.com/users/Shikhin/following{/other_user}", + "gists_url": "https://api.github.com/users/Shikhin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Shikhin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Shikhin/subscriptions", + "organizations_url": "https://api.github.com/users/Shikhin/orgs", + "repos_url": "https://api.github.com/users/Shikhin/repos", + "events_url": "https://api.github.com/users/Shikhin/events{/privacy}", + "received_events_url": "https://api.github.com/users/Shikhin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Shikhin/tetranglix", + "description": "A bootable 512-byte Tetris clone.", + "fork": false, + "url": "https://api.github.com/repos/Shikhin/tetranglix", + "forks_url": "https://api.github.com/repos/Shikhin/tetranglix/forks", + "keys_url": "https://api.github.com/repos/Shikhin/tetranglix/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Shikhin/tetranglix/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Shikhin/tetranglix/teams", + "hooks_url": "https://api.github.com/repos/Shikhin/tetranglix/hooks", + "issue_events_url": "https://api.github.com/repos/Shikhin/tetranglix/issues/events{/number}", + "events_url": "https://api.github.com/repos/Shikhin/tetranglix/events", + "assignees_url": "https://api.github.com/repos/Shikhin/tetranglix/assignees{/user}", + "branches_url": "https://api.github.com/repos/Shikhin/tetranglix/branches{/branch}", + "tags_url": "https://api.github.com/repos/Shikhin/tetranglix/tags", + "blobs_url": "https://api.github.com/repos/Shikhin/tetranglix/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Shikhin/tetranglix/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Shikhin/tetranglix/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Shikhin/tetranglix/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Shikhin/tetranglix/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Shikhin/tetranglix/languages", + "stargazers_url": "https://api.github.com/repos/Shikhin/tetranglix/stargazers", + "contributors_url": "https://api.github.com/repos/Shikhin/tetranglix/contributors", + "subscribers_url": "https://api.github.com/repos/Shikhin/tetranglix/subscribers", + "subscription_url": "https://api.github.com/repos/Shikhin/tetranglix/subscription", + "commits_url": "https://api.github.com/repos/Shikhin/tetranglix/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Shikhin/tetranglix/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Shikhin/tetranglix/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Shikhin/tetranglix/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Shikhin/tetranglix/contents/{+path}", + "compare_url": "https://api.github.com/repos/Shikhin/tetranglix/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Shikhin/tetranglix/merges", + "archive_url": "https://api.github.com/repos/Shikhin/tetranglix/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Shikhin/tetranglix/downloads", + "issues_url": "https://api.github.com/repos/Shikhin/tetranglix/issues{/number}", + "pulls_url": "https://api.github.com/repos/Shikhin/tetranglix/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Shikhin/tetranglix/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Shikhin/tetranglix/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Shikhin/tetranglix/labels{/name}", + "releases_url": "https://api.github.com/repos/Shikhin/tetranglix/releases{/id}", + "deployments_url": "https://api.github.com/repos/Shikhin/tetranglix/deployments", + "created_at": "2013-08-29T17:03:07Z", + "updated_at": "2016-04-10T15:46:33Z", + "pushed_at": "2014-03-25T15:36:15Z", + "git_url": "git://github.com/Shikhin/tetranglix.git", + "ssh_url": "git@github.com:Shikhin/tetranglix.git", + "clone_url": "https://github.com/Shikhin/tetranglix.git", + "svn_url": "https://github.com/Shikhin/tetranglix", + "homepage": "", + "size": 314, + "stargazers_count": 15, + "watchers_count": 15, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 15, + "default_branch": "master", + "score": 13.566106 + }, + { + "id": 4731946, + "name": "tetris-464", + "full_name": "cjauvin/tetris-464", + "owner": { + "login": "cjauvin", + "id": 488992, + "avatar_url": "https://avatars.githubusercontent.com/u/488992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cjauvin", + "html_url": "https://github.com/cjauvin", + "followers_url": "https://api.github.com/users/cjauvin/followers", + "following_url": "https://api.github.com/users/cjauvin/following{/other_user}", + "gists_url": "https://api.github.com/users/cjauvin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cjauvin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cjauvin/subscriptions", + "organizations_url": "https://api.github.com/users/cjauvin/orgs", + "repos_url": "https://api.github.com/users/cjauvin/repos", + "events_url": "https://api.github.com/users/cjauvin/events{/privacy}", + "received_events_url": "https://api.github.com/users/cjauvin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cjauvin/tetris-464", + "description": "A stripped down Tetris clone for the C=64 (no points, no levels, no nothing, except the bare block falling, controlling and colliding mechanism), in about a KLOC of 6502 assembly.", + "fork": false, + "url": "https://api.github.com/repos/cjauvin/tetris-464", + "forks_url": "https://api.github.com/repos/cjauvin/tetris-464/forks", + "keys_url": "https://api.github.com/repos/cjauvin/tetris-464/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cjauvin/tetris-464/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cjauvin/tetris-464/teams", + "hooks_url": "https://api.github.com/repos/cjauvin/tetris-464/hooks", + "issue_events_url": "https://api.github.com/repos/cjauvin/tetris-464/issues/events{/number}", + "events_url": "https://api.github.com/repos/cjauvin/tetris-464/events", + "assignees_url": "https://api.github.com/repos/cjauvin/tetris-464/assignees{/user}", + "branches_url": "https://api.github.com/repos/cjauvin/tetris-464/branches{/branch}", + "tags_url": "https://api.github.com/repos/cjauvin/tetris-464/tags", + "blobs_url": "https://api.github.com/repos/cjauvin/tetris-464/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cjauvin/tetris-464/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cjauvin/tetris-464/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cjauvin/tetris-464/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cjauvin/tetris-464/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cjauvin/tetris-464/languages", + "stargazers_url": "https://api.github.com/repos/cjauvin/tetris-464/stargazers", + "contributors_url": "https://api.github.com/repos/cjauvin/tetris-464/contributors", + "subscribers_url": "https://api.github.com/repos/cjauvin/tetris-464/subscribers", + "subscription_url": "https://api.github.com/repos/cjauvin/tetris-464/subscription", + "commits_url": "https://api.github.com/repos/cjauvin/tetris-464/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cjauvin/tetris-464/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cjauvin/tetris-464/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cjauvin/tetris-464/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cjauvin/tetris-464/contents/{+path}", + "compare_url": "https://api.github.com/repos/cjauvin/tetris-464/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cjauvin/tetris-464/merges", + "archive_url": "https://api.github.com/repos/cjauvin/tetris-464/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cjauvin/tetris-464/downloads", + "issues_url": "https://api.github.com/repos/cjauvin/tetris-464/issues{/number}", + "pulls_url": "https://api.github.com/repos/cjauvin/tetris-464/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cjauvin/tetris-464/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cjauvin/tetris-464/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cjauvin/tetris-464/labels{/name}", + "releases_url": "https://api.github.com/repos/cjauvin/tetris-464/releases{/id}", + "deployments_url": "https://api.github.com/repos/cjauvin/tetris-464/deployments", + "created_at": "2012-06-20T21:55:01Z", + "updated_at": "2016-05-08T21:31:45Z", + "pushed_at": "2014-02-01T14:50:07Z", + "git_url": "git://github.com/cjauvin/tetris-464.git", + "ssh_url": "git@github.com:cjauvin/tetris-464.git", + "clone_url": "https://github.com/cjauvin/tetris-464.git", + "svn_url": "https://github.com/cjauvin/tetris-464", + "homepage": "", + "size": 236, + "stargazers_count": 13, + "watchers_count": 13, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 13, + "default_branch": "master", + "score": 8.032027 + }, + { + "id": 13047218, + "name": "nand2tetris", + "full_name": "davidbrenner/nand2tetris", + "owner": { + "login": "davidbrenner", + "id": 236870, + "avatar_url": "https://avatars.githubusercontent.com/u/236870?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/davidbrenner", + "html_url": "https://github.com/davidbrenner", + "followers_url": "https://api.github.com/users/davidbrenner/followers", + "following_url": "https://api.github.com/users/davidbrenner/following{/other_user}", + "gists_url": "https://api.github.com/users/davidbrenner/gists{/gist_id}", + "starred_url": "https://api.github.com/users/davidbrenner/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/davidbrenner/subscriptions", + "organizations_url": "https://api.github.com/users/davidbrenner/orgs", + "repos_url": "https://api.github.com/users/davidbrenner/repos", + "events_url": "https://api.github.com/users/davidbrenner/events{/privacy}", + "received_events_url": "https://api.github.com/users/davidbrenner/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/davidbrenner/nand2tetris", + "description": "Implementation of a general purpose computer and OS built from first principles.", + "fork": false, + "url": "https://api.github.com/repos/davidbrenner/nand2tetris", + "forks_url": "https://api.github.com/repos/davidbrenner/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/davidbrenner/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/davidbrenner/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/davidbrenner/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/davidbrenner/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/davidbrenner/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/davidbrenner/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/davidbrenner/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/davidbrenner/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/davidbrenner/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/davidbrenner/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/davidbrenner/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/davidbrenner/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/davidbrenner/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/davidbrenner/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/davidbrenner/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/davidbrenner/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/davidbrenner/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/davidbrenner/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/davidbrenner/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/davidbrenner/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/davidbrenner/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/davidbrenner/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/davidbrenner/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/davidbrenner/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/davidbrenner/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/davidbrenner/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/davidbrenner/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/davidbrenner/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/davidbrenner/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/davidbrenner/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/davidbrenner/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/davidbrenner/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/davidbrenner/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/davidbrenner/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/davidbrenner/nand2tetris/deployments", + "created_at": "2013-09-23T21:07:41Z", + "updated_at": "2016-04-03T04:00:48Z", + "pushed_at": "2013-09-29T04:50:51Z", + "git_url": "git://github.com/davidbrenner/nand2tetris.git", + "ssh_url": "git@github.com:davidbrenner/nand2tetris.git", + "clone_url": "https://github.com/davidbrenner/nand2tetris.git", + "svn_url": "https://github.com/davidbrenner/nand2tetris", + "homepage": "", + "size": 460, + "stargazers_count": 10, + "watchers_count": 10, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 5, + "mirror_url": null, + "open_issues_count": 0, + "forks": 5, + "open_issues": 0, + "watchers": 10, + "default_branch": "master", + "score": 12.851244 + }, + { + "id": 15853035, + "name": "nand2tetris", + "full_name": "SeaRbSg/nand2tetris", + "owner": { + "login": "SeaRbSg", + "id": 5482773, + "avatar_url": "https://avatars.githubusercontent.com/u/5482773?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/SeaRbSg", + "html_url": "https://github.com/SeaRbSg", + "followers_url": "https://api.github.com/users/SeaRbSg/followers", + "following_url": "https://api.github.com/users/SeaRbSg/following{/other_user}", + "gists_url": "https://api.github.com/users/SeaRbSg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SeaRbSg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SeaRbSg/subscriptions", + "organizations_url": "https://api.github.com/users/SeaRbSg/orgs", + "repos_url": "https://api.github.com/users/SeaRbSg/repos", + "events_url": "https://api.github.com/users/SeaRbSg/events{/privacy}", + "received_events_url": "https://api.github.com/users/SeaRbSg/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/SeaRbSg/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/SeaRbSg/nand2tetris", + "forks_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/SeaRbSg/nand2tetris/deployments", + "created_at": "2014-01-12T23:13:08Z", + "updated_at": "2016-02-21T01:22:54Z", + "pushed_at": "2014-05-11T14:43:14Z", + "git_url": "git://github.com/SeaRbSg/nand2tetris.git", + "ssh_url": "git@github.com:SeaRbSg/nand2tetris.git", + "clone_url": "https://github.com/SeaRbSg/nand2tetris.git", + "svn_url": "https://github.com/SeaRbSg/nand2tetris", + "homepage": null, + "size": 3368, + "stargazers_count": 9, + "watchers_count": 9, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 9, + "default_branch": "master", + "score": 6.425622 + }, + { + "id": 22265170, + "name": "nand2tetris", + "full_name": "Sean-Der/nand2tetris", + "owner": { + "login": "Sean-Der", + "id": 1302304, + "avatar_url": "https://avatars.githubusercontent.com/u/1302304?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Sean-Der", + "html_url": "https://github.com/Sean-Der", + "followers_url": "https://api.github.com/users/Sean-Der/followers", + "following_url": "https://api.github.com/users/Sean-Der/following{/other_user}", + "gists_url": "https://api.github.com/users/Sean-Der/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Sean-Der/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Sean-Der/subscriptions", + "organizations_url": "https://api.github.com/users/Sean-Der/orgs", + "repos_url": "https://api.github.com/users/Sean-Der/repos", + "events_url": "https://api.github.com/users/Sean-Der/events{/privacy}", + "received_events_url": "https://api.github.com/users/Sean-Der/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Sean-Der/nand2tetris", + "description": "nand2tetris problems", + "fork": false, + "url": "https://api.github.com/repos/Sean-Der/nand2tetris", + "forks_url": "https://api.github.com/repos/Sean-Der/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Sean-Der/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Sean-Der/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Sean-Der/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Sean-Der/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Sean-Der/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Sean-Der/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Sean-Der/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Sean-Der/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Sean-Der/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Sean-Der/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Sean-Der/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Sean-Der/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Sean-Der/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Sean-Der/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Sean-Der/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Sean-Der/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Sean-Der/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Sean-Der/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Sean-Der/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Sean-Der/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Sean-Der/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Sean-Der/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Sean-Der/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Sean-Der/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Sean-Der/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Sean-Der/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Sean-Der/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Sean-Der/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Sean-Der/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Sean-Der/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Sean-Der/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Sean-Der/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Sean-Der/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Sean-Der/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Sean-Der/nand2tetris/deployments", + "created_at": "2014-07-25T17:36:40Z", + "updated_at": "2016-05-27T10:00:18Z", + "pushed_at": "2015-01-14T07:36:35Z", + "git_url": "git://github.com/Sean-Der/nand2tetris.git", + "ssh_url": "git@github.com:Sean-Der/nand2tetris.git", + "clone_url": "https://github.com/Sean-Der/nand2tetris.git", + "svn_url": "https://github.com/Sean-Der/nand2tetris", + "homepage": null, + "size": 1704, + "stargazers_count": 6, + "watchers_count": 6, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 9, + "mirror_url": null, + "open_issues_count": 0, + "forks": 9, + "open_issues": 0, + "watchers": 6, + "default_branch": "master", + "score": 12.925428 + }, + { + "id": 9770879, + "name": "nand2tetris", + "full_name": "jcoglan/nand2tetris", + "owner": { + "login": "jcoglan", + "id": 9265, + "avatar_url": "https://avatars.githubusercontent.com/u/9265?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jcoglan", + "html_url": "https://github.com/jcoglan", + "followers_url": "https://api.github.com/users/jcoglan/followers", + "following_url": "https://api.github.com/users/jcoglan/following{/other_user}", + "gists_url": "https://api.github.com/users/jcoglan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jcoglan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jcoglan/subscriptions", + "organizations_url": "https://api.github.com/users/jcoglan/orgs", + "repos_url": "https://api.github.com/users/jcoglan/repos", + "events_url": "https://api.github.com/users/jcoglan/events{/privacy}", + "received_events_url": "https://api.github.com/users/jcoglan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jcoglan/nand2tetris", + "description": "Solutions for http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/jcoglan/nand2tetris", + "forks_url": "https://api.github.com/repos/jcoglan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jcoglan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jcoglan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jcoglan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jcoglan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jcoglan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jcoglan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jcoglan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jcoglan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jcoglan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jcoglan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jcoglan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jcoglan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jcoglan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jcoglan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jcoglan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jcoglan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jcoglan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jcoglan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jcoglan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jcoglan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jcoglan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jcoglan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jcoglan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jcoglan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jcoglan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jcoglan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jcoglan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jcoglan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jcoglan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jcoglan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jcoglan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jcoglan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jcoglan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jcoglan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jcoglan/nand2tetris/deployments", + "created_at": "2013-04-30T12:47:22Z", + "updated_at": "2016-06-03T05:29:13Z", + "pushed_at": "2013-05-07T11:05:53Z", + "git_url": "git://github.com/jcoglan/nand2tetris.git", + "ssh_url": "git@github.com:jcoglan/nand2tetris.git", + "clone_url": "https://github.com/jcoglan/nand2tetris.git", + "svn_url": "https://github.com/jcoglan/nand2tetris", + "homepage": null, + "size": 616, + "stargazers_count": 5, + "watchers_count": 5, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 4, + "mirror_url": null, + "open_issues_count": 1, + "forks": 4, + "open_issues": 1, + "watchers": 5, + "default_branch": "master", + "score": 11.299362 + }, + { + "id": 50568612, + "name": "nand2tetris", + "full_name": "mudphone/nand2tetris", + "owner": { + "login": "mudphone", + "id": 24647, + "avatar_url": "https://avatars.githubusercontent.com/u/24647?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mudphone", + "html_url": "https://github.com/mudphone", + "followers_url": "https://api.github.com/users/mudphone/followers", + "following_url": "https://api.github.com/users/mudphone/following{/other_user}", + "gists_url": "https://api.github.com/users/mudphone/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mudphone/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mudphone/subscriptions", + "organizations_url": "https://api.github.com/users/mudphone/orgs", + "repos_url": "https://api.github.com/users/mudphone/repos", + "events_url": "https://api.github.com/users/mudphone/events{/privacy}", + "received_events_url": "https://api.github.com/users/mudphone/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mudphone/nand2tetris", + "description": "Recursive, top-down, language processing, and So Can You!", + "fork": false, + "url": "https://api.github.com/repos/mudphone/nand2tetris", + "forks_url": "https://api.github.com/repos/mudphone/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mudphone/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mudphone/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mudphone/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mudphone/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mudphone/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mudphone/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mudphone/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mudphone/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mudphone/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mudphone/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mudphone/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mudphone/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mudphone/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mudphone/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mudphone/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mudphone/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mudphone/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mudphone/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mudphone/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mudphone/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mudphone/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mudphone/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mudphone/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mudphone/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mudphone/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mudphone/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mudphone/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mudphone/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mudphone/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mudphone/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mudphone/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mudphone/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mudphone/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mudphone/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mudphone/nand2tetris/deployments", + "created_at": "2016-01-28T08:36:04Z", + "updated_at": "2016-05-21T17:49:54Z", + "pushed_at": "2016-05-21T18:20:21Z", + "git_url": "git://github.com/mudphone/nand2tetris.git", + "ssh_url": "git@github.com:mudphone/nand2tetris.git", + "clone_url": "https://github.com/mudphone/nand2tetris.git", + "svn_url": "https://github.com/mudphone/nand2tetris", + "homepage": "", + "size": 288, + "stargazers_count": 5, + "watchers_count": 5, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 5, + "default_branch": "master", + "score": 5.654875 + }, + { + "id": 3924601, + "name": "mips-tetris", + "full_name": "johngunderman/mips-tetris", + "owner": { + "login": "johngunderman", + "id": 66752, + "avatar_url": "https://avatars.githubusercontent.com/u/66752?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/johngunderman", + "html_url": "https://github.com/johngunderman", + "followers_url": "https://api.github.com/users/johngunderman/followers", + "following_url": "https://api.github.com/users/johngunderman/following{/other_user}", + "gists_url": "https://api.github.com/users/johngunderman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/johngunderman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/johngunderman/subscriptions", + "organizations_url": "https://api.github.com/users/johngunderman/orgs", + "repos_url": "https://api.github.com/users/johngunderman/repos", + "events_url": "https://api.github.com/users/johngunderman/events{/privacy}", + "received_events_url": "https://api.github.com/users/johngunderman/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/johngunderman/mips-tetris", + "description": "Tetris implemented in MIPS assembly", + "fork": false, + "url": "https://api.github.com/repos/johngunderman/mips-tetris", + "forks_url": "https://api.github.com/repos/johngunderman/mips-tetris/forks", + "keys_url": "https://api.github.com/repos/johngunderman/mips-tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/johngunderman/mips-tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/johngunderman/mips-tetris/teams", + "hooks_url": "https://api.github.com/repos/johngunderman/mips-tetris/hooks", + "issue_events_url": "https://api.github.com/repos/johngunderman/mips-tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/johngunderman/mips-tetris/events", + "assignees_url": "https://api.github.com/repos/johngunderman/mips-tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/johngunderman/mips-tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/johngunderman/mips-tetris/tags", + "blobs_url": "https://api.github.com/repos/johngunderman/mips-tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/johngunderman/mips-tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/johngunderman/mips-tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/johngunderman/mips-tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/johngunderman/mips-tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/johngunderman/mips-tetris/languages", + "stargazers_url": "https://api.github.com/repos/johngunderman/mips-tetris/stargazers", + "contributors_url": "https://api.github.com/repos/johngunderman/mips-tetris/contributors", + "subscribers_url": "https://api.github.com/repos/johngunderman/mips-tetris/subscribers", + "subscription_url": "https://api.github.com/repos/johngunderman/mips-tetris/subscription", + "commits_url": "https://api.github.com/repos/johngunderman/mips-tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/johngunderman/mips-tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/johngunderman/mips-tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/johngunderman/mips-tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/johngunderman/mips-tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/johngunderman/mips-tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/johngunderman/mips-tetris/merges", + "archive_url": "https://api.github.com/repos/johngunderman/mips-tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/johngunderman/mips-tetris/downloads", + "issues_url": "https://api.github.com/repos/johngunderman/mips-tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/johngunderman/mips-tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/johngunderman/mips-tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/johngunderman/mips-tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/johngunderman/mips-tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/johngunderman/mips-tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/johngunderman/mips-tetris/deployments", + "created_at": "2012-04-04T01:43:31Z", + "updated_at": "2016-02-27T18:25:14Z", + "pushed_at": "2012-05-04T20:13:55Z", + "git_url": "git://github.com/johngunderman/mips-tetris.git", + "ssh_url": "git@github.com:johngunderman/mips-tetris.git", + "clone_url": "https://github.com/johngunderman/mips-tetris.git", + "svn_url": "https://github.com/johngunderman/mips-tetris", + "homepage": "", + "size": 1045, + "stargazers_count": 4, + "watchers_count": 4, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "score": 13.566106 + }, + { + "id": 7028354, + "name": "nand2tetris", + "full_name": "seebees/nand2tetris", + "owner": { + "login": "seebees", + "id": 300465, + "avatar_url": "https://avatars.githubusercontent.com/u/300465?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/seebees", + "html_url": "https://github.com/seebees", + "followers_url": "https://api.github.com/users/seebees/followers", + "following_url": "https://api.github.com/users/seebees/following{/other_user}", + "gists_url": "https://api.github.com/users/seebees/gists{/gist_id}", + "starred_url": "https://api.github.com/users/seebees/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/seebees/subscriptions", + "organizations_url": "https://api.github.com/users/seebees/orgs", + "repos_url": "https://api.github.com/users/seebees/repos", + "events_url": "https://api.github.com/users/seebees/events{/privacy}", + "received_events_url": "https://api.github.com/users/seebees/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/seebees/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/seebees/nand2tetris", + "forks_url": "https://api.github.com/repos/seebees/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/seebees/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/seebees/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/seebees/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/seebees/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/seebees/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/seebees/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/seebees/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/seebees/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/seebees/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/seebees/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/seebees/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/seebees/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/seebees/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/seebees/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/seebees/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/seebees/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/seebees/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/seebees/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/seebees/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/seebees/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/seebees/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/seebees/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/seebees/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/seebees/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/seebees/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/seebees/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/seebees/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/seebees/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/seebees/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/seebees/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/seebees/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/seebees/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/seebees/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/seebees/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/seebees/nand2tetris/deployments", + "created_at": "2012-12-06T02:14:42Z", + "updated_at": "2016-05-24T00:30:40Z", + "pushed_at": "2013-02-16T03:21:44Z", + "git_url": "git://github.com/seebees/nand2tetris.git", + "ssh_url": "git@github.com:seebees/nand2tetris.git", + "clone_url": "https://github.com/seebees/nand2tetris.git", + "svn_url": "https://github.com/seebees/nand2tetris", + "homepage": null, + "size": 636, + "stargazers_count": 4, + "watchers_count": 4, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 7, + "mirror_url": null, + "open_issues_count": 0, + "forks": 7, + "open_issues": 0, + "watchers": 4, + "default_branch": "master", + "score": 11.30975 + }, + { + "id": 3081286, + "name": "Tetris", + "full_name": "dtrupenn/Tetris", + "owner": { + "login": "dtrupenn", + "id": 872147, + "avatar_url": "https://avatars.githubusercontent.com/u/872147?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dtrupenn", + "html_url": "https://github.com/dtrupenn", + "followers_url": "https://api.github.com/users/dtrupenn/followers", + "following_url": "https://api.github.com/users/dtrupenn/following{/other_user}", + "gists_url": "https://api.github.com/users/dtrupenn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dtrupenn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dtrupenn/subscriptions", + "organizations_url": "https://api.github.com/users/dtrupenn/orgs", + "repos_url": "https://api.github.com/users/dtrupenn/repos", + "events_url": "https://api.github.com/users/dtrupenn/events{/privacy}", + "received_events_url": "https://api.github.com/users/dtrupenn/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dtrupenn/Tetris", + "description": "A C implementation of Tetris using Pennsim through LC4", + "fork": false, + "url": "https://api.github.com/repos/dtrupenn/Tetris", + "forks_url": "https://api.github.com/repos/dtrupenn/Tetris/forks", + "keys_url": "https://api.github.com/repos/dtrupenn/Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dtrupenn/Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dtrupenn/Tetris/teams", + "hooks_url": "https://api.github.com/repos/dtrupenn/Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dtrupenn/Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dtrupenn/Tetris/events", + "assignees_url": "https://api.github.com/repos/dtrupenn/Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dtrupenn/Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dtrupenn/Tetris/tags", + "blobs_url": "https://api.github.com/repos/dtrupenn/Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dtrupenn/Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dtrupenn/Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dtrupenn/Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dtrupenn/Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dtrupenn/Tetris/languages", + "stargazers_url": "https://api.github.com/repos/dtrupenn/Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dtrupenn/Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dtrupenn/Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dtrupenn/Tetris/subscription", + "commits_url": "https://api.github.com/repos/dtrupenn/Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dtrupenn/Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dtrupenn/Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dtrupenn/Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dtrupenn/Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dtrupenn/Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dtrupenn/Tetris/merges", + "archive_url": "https://api.github.com/repos/dtrupenn/Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dtrupenn/Tetris/downloads", + "issues_url": "https://api.github.com/repos/dtrupenn/Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dtrupenn/Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dtrupenn/Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dtrupenn/Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dtrupenn/Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dtrupenn/Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dtrupenn/Tetris/deployments", + "created_at": "2012-01-01T00:31:50Z", + "updated_at": "2016-02-09T14:01:44Z", + "pushed_at": "2012-01-01T00:37:02Z", + "git_url": "git://github.com/dtrupenn/Tetris.git", + "ssh_url": "git@github.com:dtrupenn/Tetris.git", + "clone_url": "https://github.com/dtrupenn/Tetris.git", + "svn_url": "https://github.com/dtrupenn/Tetris", + "homepage": "", + "size": 496, + "stargazers_count": 3, + "watchers_count": 3, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 3, + "default_branch": "master", + "score": 11.815747 + }, + { + "id": 8496749, + "name": "bootris", + "full_name": "dbittman/bootris", + "owner": { + "login": "dbittman", + "id": 3292300, + "avatar_url": "https://avatars.githubusercontent.com/u/3292300?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dbittman", + "html_url": "https://github.com/dbittman", + "followers_url": "https://api.github.com/users/dbittman/followers", + "following_url": "https://api.github.com/users/dbittman/following{/other_user}", + "gists_url": "https://api.github.com/users/dbittman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dbittman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dbittman/subscriptions", + "organizations_url": "https://api.github.com/users/dbittman/orgs", + "repos_url": "https://api.github.com/users/dbittman/repos", + "events_url": "https://api.github.com/users/dbittman/events{/privacy}", + "received_events_url": "https://api.github.com/users/dbittman/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dbittman/bootris", + "description": "Bootsector Tetris Game", + "fork": false, + "url": "https://api.github.com/repos/dbittman/bootris", + "forks_url": "https://api.github.com/repos/dbittman/bootris/forks", + "keys_url": "https://api.github.com/repos/dbittman/bootris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dbittman/bootris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dbittman/bootris/teams", + "hooks_url": "https://api.github.com/repos/dbittman/bootris/hooks", + "issue_events_url": "https://api.github.com/repos/dbittman/bootris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dbittman/bootris/events", + "assignees_url": "https://api.github.com/repos/dbittman/bootris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dbittman/bootris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dbittman/bootris/tags", + "blobs_url": "https://api.github.com/repos/dbittman/bootris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dbittman/bootris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dbittman/bootris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dbittman/bootris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dbittman/bootris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dbittman/bootris/languages", + "stargazers_url": "https://api.github.com/repos/dbittman/bootris/stargazers", + "contributors_url": "https://api.github.com/repos/dbittman/bootris/contributors", + "subscribers_url": "https://api.github.com/repos/dbittman/bootris/subscribers", + "subscription_url": "https://api.github.com/repos/dbittman/bootris/subscription", + "commits_url": "https://api.github.com/repos/dbittman/bootris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dbittman/bootris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dbittman/bootris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dbittman/bootris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dbittman/bootris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dbittman/bootris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dbittman/bootris/merges", + "archive_url": "https://api.github.com/repos/dbittman/bootris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dbittman/bootris/downloads", + "issues_url": "https://api.github.com/repos/dbittman/bootris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dbittman/bootris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dbittman/bootris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dbittman/bootris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dbittman/bootris/labels{/name}", + "releases_url": "https://api.github.com/repos/dbittman/bootris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dbittman/bootris/deployments", + "created_at": "2013-03-01T07:46:44Z", + "updated_at": "2016-01-09T00:19:37Z", + "pushed_at": "2013-03-01T08:22:10Z", + "git_url": "git://github.com/dbittman/bootris.git", + "ssh_url": "git@github.com:dbittman/bootris.git", + "clone_url": "https://github.com/dbittman/bootris.git", + "svn_url": "https://github.com/dbittman/bootris", + "homepage": null, + "size": 108, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 10.256741 + }, + { + "id": 8799619, + "name": "Nand2Tetris", + "full_name": "timlhenderson/Nand2Tetris", + "owner": { + "login": "timlhenderson", + "id": 3543717, + "avatar_url": "https://avatars.githubusercontent.com/u/3543717?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/timlhenderson", + "html_url": "https://github.com/timlhenderson", + "followers_url": "https://api.github.com/users/timlhenderson/followers", + "following_url": "https://api.github.com/users/timlhenderson/following{/other_user}", + "gists_url": "https://api.github.com/users/timlhenderson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/timlhenderson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/timlhenderson/subscriptions", + "organizations_url": "https://api.github.com/users/timlhenderson/orgs", + "repos_url": "https://api.github.com/users/timlhenderson/repos", + "events_url": "https://api.github.com/users/timlhenderson/events{/privacy}", + "received_events_url": "https://api.github.com/users/timlhenderson/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/timlhenderson/Nand2Tetris", + "description": "My solutions to the computer science course NAND to Tetris", + "fork": false, + "url": "https://api.github.com/repos/timlhenderson/Nand2Tetris", + "forks_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/timlhenderson/Nand2Tetris/deployments", + "created_at": "2013-03-15T13:21:12Z", + "updated_at": "2015-04-30T11:16:04Z", + "pushed_at": "2012-10-15T06:48:42Z", + "git_url": "git://github.com/timlhenderson/Nand2Tetris.git", + "ssh_url": "git@github.com:timlhenderson/Nand2Tetris.git", + "clone_url": "https://github.com/timlhenderson/Nand2Tetris.git", + "svn_url": "https://github.com/timlhenderson/Nand2Tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 117, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 3, + "mirror_url": null, + "open_issues_count": 0, + "forks": 3, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 10.17458 + }, + { + "id": 7025062, + "name": "From-Nand-to-Tetris", + "full_name": "itzhak-razi/From-Nand-to-Tetris", + "owner": { + "login": "itzhak-razi", + "id": 1174967, + "avatar_url": "https://avatars.githubusercontent.com/u/1174967?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/itzhak-razi", + "html_url": "https://github.com/itzhak-razi", + "followers_url": "https://api.github.com/users/itzhak-razi/followers", + "following_url": "https://api.github.com/users/itzhak-razi/following{/other_user}", + "gists_url": "https://api.github.com/users/itzhak-razi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/itzhak-razi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/itzhak-razi/subscriptions", + "organizations_url": "https://api.github.com/users/itzhak-razi/orgs", + "repos_url": "https://api.github.com/users/itzhak-razi/repos", + "events_url": "https://api.github.com/users/itzhak-razi/events{/privacy}", + "received_events_url": "https://api.github.com/users/itzhak-razi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/itzhak-razi/From-Nand-to-Tetris", + "description": "assignments", + "fork": false, + "url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris", + "forks_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/forks", + "keys_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/teams", + "hooks_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/events", + "assignees_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/tags", + "blobs_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/languages", + "stargazers_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/subscription", + "commits_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/merges", + "archive_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/downloads", + "issues_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/itzhak-razi/From-Nand-to-Tetris/deployments", + "created_at": "2012-12-05T21:38:17Z", + "updated_at": "2016-02-01T16:47:32Z", + "pushed_at": "2012-11-23T01:12:58Z", + "git_url": "git://github.com/itzhak-razi/From-Nand-to-Tetris.git", + "ssh_url": "git@github.com:itzhak-razi/From-Nand-to-Tetris.git", + "clone_url": "https://github.com/itzhak-razi/From-Nand-to-Tetris.git", + "svn_url": "https://github.com/itzhak-razi/From-Nand-to-Tetris", + "homepage": null, + "size": 1193, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 8, + "mirror_url": null, + "open_issues_count": 0, + "forks": 8, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 9.638433 + }, + { + "id": 27810275, + "name": "Nand2Tetris", + "full_name": "xctom/Nand2Tetris", + "owner": { + "login": "xctom", + "id": 4891624, + "avatar_url": "https://avatars.githubusercontent.com/u/4891624?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/xctom", + "html_url": "https://github.com/xctom", + "followers_url": "https://api.github.com/users/xctom/followers", + "following_url": "https://api.github.com/users/xctom/following{/other_user}", + "gists_url": "https://api.github.com/users/xctom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xctom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xctom/subscriptions", + "organizations_url": "https://api.github.com/users/xctom/orgs", + "repos_url": "https://api.github.com/users/xctom/repos", + "events_url": "https://api.github.com/users/xctom/events{/privacy}", + "received_events_url": "https://api.github.com/users/xctom/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/xctom/Nand2Tetris", + "description": "All projects for Nand2Teris", + "fork": false, + "url": "https://api.github.com/repos/xctom/Nand2Tetris", + "forks_url": "https://api.github.com/repos/xctom/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/xctom/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/xctom/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/xctom/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/xctom/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/xctom/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/xctom/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/xctom/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/xctom/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/xctom/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/xctom/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/xctom/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/xctom/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/xctom/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/xctom/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/xctom/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/xctom/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/xctom/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/xctom/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/xctom/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/xctom/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/xctom/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/xctom/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/xctom/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/xctom/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/xctom/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/xctom/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/xctom/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/xctom/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/xctom/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/xctom/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/xctom/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/xctom/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/xctom/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/xctom/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/xctom/Nand2Tetris/deployments", + "created_at": "2014-12-10T08:46:59Z", + "updated_at": "2015-12-12T06:24:34Z", + "pushed_at": "2014-12-10T09:16:48Z", + "git_url": "git://github.com/xctom/Nand2Tetris.git", + "ssh_url": "git@github.com:xctom/Nand2Tetris.git", + "clone_url": "https://github.com/xctom/Nand2Tetris.git", + "svn_url": "https://github.com/xctom/Nand2Tetris", + "homepage": null, + "size": 444, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 12, + "mirror_url": null, + "open_issues_count": 0, + "forks": 12, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 8.032027 + }, + { + "id": 9916585, + "name": "nand2tetris", + "full_name": "benmoss/nand2tetris", + "owner": { + "login": "benmoss", + "id": 239754, + "avatar_url": "https://avatars.githubusercontent.com/u/239754?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/benmoss", + "html_url": "https://github.com/benmoss", + "followers_url": "https://api.github.com/users/benmoss/followers", + "following_url": "https://api.github.com/users/benmoss/following{/other_user}", + "gists_url": "https://api.github.com/users/benmoss/gists{/gist_id}", + "starred_url": "https://api.github.com/users/benmoss/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/benmoss/subscriptions", + "organizations_url": "https://api.github.com/users/benmoss/orgs", + "repos_url": "https://api.github.com/users/benmoss/repos", + "events_url": "https://api.github.com/users/benmoss/events{/privacy}", + "received_events_url": "https://api.github.com/users/benmoss/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/benmoss/nand2tetris", + "description": "http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/benmoss/nand2tetris", + "forks_url": "https://api.github.com/repos/benmoss/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/benmoss/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/benmoss/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/benmoss/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/benmoss/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/benmoss/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/benmoss/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/benmoss/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/benmoss/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/benmoss/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/benmoss/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/benmoss/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/benmoss/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/benmoss/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/benmoss/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/benmoss/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/benmoss/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/benmoss/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/benmoss/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/benmoss/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/benmoss/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/benmoss/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/benmoss/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/benmoss/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/benmoss/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/benmoss/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/benmoss/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/benmoss/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/benmoss/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/benmoss/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/benmoss/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/benmoss/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/benmoss/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/benmoss/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/benmoss/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/benmoss/nand2tetris/deployments", + "created_at": "2013-05-07T16:37:55Z", + "updated_at": "2015-04-27T00:18:28Z", + "pushed_at": "2014-11-03T16:42:14Z", + "git_url": "git://github.com/benmoss/nand2tetris.git", + "ssh_url": "git@github.com:benmoss/nand2tetris.git", + "clone_url": "https://github.com/benmoss/nand2tetris.git", + "svn_url": "https://github.com/benmoss/nand2tetris", + "homepage": null, + "size": 644, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 4.8425837 + }, + { + "id": 10392131, + "name": "nand2tetris", + "full_name": "mattkgross/nand2tetris", + "owner": { + "login": "mattkgross", + "id": 3393610, + "avatar_url": "https://avatars.githubusercontent.com/u/3393610?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mattkgross", + "html_url": "https://github.com/mattkgross", + "followers_url": "https://api.github.com/users/mattkgross/followers", + "following_url": "https://api.github.com/users/mattkgross/following{/other_user}", + "gists_url": "https://api.github.com/users/mattkgross/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mattkgross/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mattkgross/subscriptions", + "organizations_url": "https://api.github.com/users/mattkgross/orgs", + "repos_url": "https://api.github.com/users/mattkgross/repos", + "events_url": "https://api.github.com/users/mattkgross/events{/privacy}", + "received_events_url": "https://api.github.com/users/mattkgross/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mattkgross/nand2tetris", + "description": "Tetris Build. Start at Logic Gates, then Assemblers & OS, then APIs & User Interface.", + "fork": false, + "url": "https://api.github.com/repos/mattkgross/nand2tetris", + "forks_url": "https://api.github.com/repos/mattkgross/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mattkgross/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mattkgross/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mattkgross/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mattkgross/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mattkgross/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mattkgross/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mattkgross/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mattkgross/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mattkgross/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mattkgross/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mattkgross/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mattkgross/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mattkgross/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mattkgross/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mattkgross/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mattkgross/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mattkgross/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mattkgross/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mattkgross/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mattkgross/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mattkgross/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mattkgross/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mattkgross/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mattkgross/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mattkgross/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mattkgross/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mattkgross/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mattkgross/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mattkgross/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mattkgross/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mattkgross/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mattkgross/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mattkgross/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mattkgross/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mattkgross/nand2tetris/deployments", + "created_at": "2013-05-30T21:12:42Z", + "updated_at": "2015-04-20T17:22:10Z", + "pushed_at": "2013-06-13T02:53:18Z", + "git_url": "git://github.com/mattkgross/nand2tetris.git", + "ssh_url": "git@github.com:mattkgross/nand2tetris.git", + "clone_url": "https://github.com/mattkgross/nand2tetris.git", + "svn_url": "https://github.com/mattkgross/nand2tetris", + "homepage": null, + "size": 7364, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 4.8192167 + }, + { + "id": 26382269, + "name": "nand2tetris", + "full_name": "anirudt/nand2tetris", + "owner": { + "login": "anirudt", + "id": 5916149, + "avatar_url": "https://avatars.githubusercontent.com/u/5916149?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/anirudt", + "html_url": "https://github.com/anirudt", + "followers_url": "https://api.github.com/users/anirudt/followers", + "following_url": "https://api.github.com/users/anirudt/following{/other_user}", + "gists_url": "https://api.github.com/users/anirudt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/anirudt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/anirudt/subscriptions", + "organizations_url": "https://api.github.com/users/anirudt/orgs", + "repos_url": "https://api.github.com/users/anirudt/repos", + "events_url": "https://api.github.com/users/anirudt/events{/privacy}", + "received_events_url": "https://api.github.com/users/anirudt/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/anirudt/nand2tetris", + "description": "Nand2Tetris implementation from 'The Elements of Computing Systems'", + "fork": false, + "url": "https://api.github.com/repos/anirudt/nand2tetris", + "forks_url": "https://api.github.com/repos/anirudt/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/anirudt/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/anirudt/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/anirudt/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/anirudt/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/anirudt/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/anirudt/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/anirudt/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/anirudt/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/anirudt/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/anirudt/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/anirudt/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/anirudt/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/anirudt/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/anirudt/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/anirudt/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/anirudt/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/anirudt/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/anirudt/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/anirudt/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/anirudt/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/anirudt/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/anirudt/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/anirudt/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/anirudt/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/anirudt/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/anirudt/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/anirudt/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/anirudt/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/anirudt/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/anirudt/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/anirudt/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/anirudt/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/anirudt/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/anirudt/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/anirudt/nand2tetris/deployments", + "created_at": "2014-11-09T02:37:16Z", + "updated_at": "2016-05-23T18:19:05Z", + "pushed_at": "2014-11-13T13:27:28Z", + "git_url": "git://github.com/anirudt/nand2tetris.git", + "ssh_url": "git@github.com:anirudt/nand2tetris.git", + "clone_url": "https://github.com/anirudt/nand2tetris.git", + "svn_url": "https://github.com/anirudt/nand2tetris", + "homepage": null, + "size": 356, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 4.8192167 + }, + { + "id": 42813938, + "name": "nand2tetris-memo", + "full_name": "hirak/nand2tetris-memo", + "owner": { + "login": "hirak", + "id": 835251, + "avatar_url": "https://avatars.githubusercontent.com/u/835251?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hirak", + "html_url": "https://github.com/hirak", + "followers_url": "https://api.github.com/users/hirak/followers", + "following_url": "https://api.github.com/users/hirak/following{/other_user}", + "gists_url": "https://api.github.com/users/hirak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hirak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hirak/subscriptions", + "organizations_url": "https://api.github.com/users/hirak/orgs", + "repos_url": "https://api.github.com/users/hirak/repos", + "events_url": "https://api.github.com/users/hirak/events{/privacy}", + "received_events_url": "https://api.github.com/users/hirak/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hirak/nand2tetris-memo", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/hirak/nand2tetris-memo", + "forks_url": "https://api.github.com/repos/hirak/nand2tetris-memo/forks", + "keys_url": "https://api.github.com/repos/hirak/nand2tetris-memo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hirak/nand2tetris-memo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hirak/nand2tetris-memo/teams", + "hooks_url": "https://api.github.com/repos/hirak/nand2tetris-memo/hooks", + "issue_events_url": "https://api.github.com/repos/hirak/nand2tetris-memo/issues/events{/number}", + "events_url": "https://api.github.com/repos/hirak/nand2tetris-memo/events", + "assignees_url": "https://api.github.com/repos/hirak/nand2tetris-memo/assignees{/user}", + "branches_url": "https://api.github.com/repos/hirak/nand2tetris-memo/branches{/branch}", + "tags_url": "https://api.github.com/repos/hirak/nand2tetris-memo/tags", + "blobs_url": "https://api.github.com/repos/hirak/nand2tetris-memo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hirak/nand2tetris-memo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hirak/nand2tetris-memo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hirak/nand2tetris-memo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hirak/nand2tetris-memo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hirak/nand2tetris-memo/languages", + "stargazers_url": "https://api.github.com/repos/hirak/nand2tetris-memo/stargazers", + "contributors_url": "https://api.github.com/repos/hirak/nand2tetris-memo/contributors", + "subscribers_url": "https://api.github.com/repos/hirak/nand2tetris-memo/subscribers", + "subscription_url": "https://api.github.com/repos/hirak/nand2tetris-memo/subscription", + "commits_url": "https://api.github.com/repos/hirak/nand2tetris-memo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hirak/nand2tetris-memo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hirak/nand2tetris-memo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hirak/nand2tetris-memo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hirak/nand2tetris-memo/contents/{+path}", + "compare_url": "https://api.github.com/repos/hirak/nand2tetris-memo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hirak/nand2tetris-memo/merges", + "archive_url": "https://api.github.com/repos/hirak/nand2tetris-memo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hirak/nand2tetris-memo/downloads", + "issues_url": "https://api.github.com/repos/hirak/nand2tetris-memo/issues{/number}", + "pulls_url": "https://api.github.com/repos/hirak/nand2tetris-memo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hirak/nand2tetris-memo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hirak/nand2tetris-memo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hirak/nand2tetris-memo/labels{/name}", + "releases_url": "https://api.github.com/repos/hirak/nand2tetris-memo/releases{/id}", + "deployments_url": "https://api.github.com/repos/hirak/nand2tetris-memo/deployments", + "created_at": "2015-09-20T13:29:15Z", + "updated_at": "2016-01-06T21:12:41Z", + "pushed_at": "2015-11-06T06:53:00Z", + "git_url": "git://github.com/hirak/nand2tetris-memo.git", + "ssh_url": "git@github.com:hirak/nand2tetris-memo.git", + "clone_url": "https://github.com/hirak/nand2tetris-memo.git", + "svn_url": "https://github.com/hirak/nand2tetris-memo", + "homepage": null, + "size": 356, + "stargazers_count": 2, + "watchers_count": 2, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master", + "score": 4.0160136 + }, + { + "id": 14554907, + "name": "8088-Microprocessor-Tetris", + "full_name": "coolhongly/8088-Microprocessor-Tetris", + "owner": { + "login": "coolhongly", + "id": 775239, + "avatar_url": "https://avatars.githubusercontent.com/u/775239?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/coolhongly", + "html_url": "https://github.com/coolhongly", + "followers_url": "https://api.github.com/users/coolhongly/followers", + "following_url": "https://api.github.com/users/coolhongly/following{/other_user}", + "gists_url": "https://api.github.com/users/coolhongly/gists{/gist_id}", + "starred_url": "https://api.github.com/users/coolhongly/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/coolhongly/subscriptions", + "organizations_url": "https://api.github.com/users/coolhongly/orgs", + "repos_url": "https://api.github.com/users/coolhongly/repos", + "events_url": "https://api.github.com/users/coolhongly/events{/privacy}", + "received_events_url": "https://api.github.com/users/coolhongly/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/coolhongly/8088-Microprocessor-Tetris", + "description": "Tetris", + "fork": false, + "url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris", + "forks_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/forks", + "keys_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/teams", + "hooks_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/events", + "assignees_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/tags", + "blobs_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/languages", + "stargazers_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/subscription", + "commits_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/merges", + "archive_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/downloads", + "issues_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/coolhongly/8088-Microprocessor-Tetris/deployments", + "created_at": "2013-11-20T11:34:34Z", + "updated_at": "2015-09-17T17:02:21Z", + "pushed_at": "2014-09-11T05:20:19Z", + "git_url": "git://github.com/coolhongly/8088-Microprocessor-Tetris.git", + "ssh_url": "git@github.com:coolhongly/8088-Microprocessor-Tetris.git", + "clone_url": "https://github.com/coolhongly/8088-Microprocessor-Tetris.git", + "svn_url": "https://github.com/coolhongly/8088-Microprocessor-Tetris", + "homepage": null, + "size": 4048, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 13.675654 + }, + { + "id": 9820994, + "name": "tetris-assembly", + "full_name": "caioflores/tetris-assembly", + "owner": { + "login": "caioflores", + "id": 4183877, + "avatar_url": "https://avatars.githubusercontent.com/u/4183877?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/caioflores", + "html_url": "https://github.com/caioflores", + "followers_url": "https://api.github.com/users/caioflores/followers", + "following_url": "https://api.github.com/users/caioflores/following{/other_user}", + "gists_url": "https://api.github.com/users/caioflores/gists{/gist_id}", + "starred_url": "https://api.github.com/users/caioflores/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/caioflores/subscriptions", + "organizations_url": "https://api.github.com/users/caioflores/orgs", + "repos_url": "https://api.github.com/users/caioflores/repos", + "events_url": "https://api.github.com/users/caioflores/events{/privacy}", + "received_events_url": "https://api.github.com/users/caioflores/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/caioflores/tetris-assembly", + "description": "Tetris assembly ICMC", + "fork": false, + "url": "https://api.github.com/repos/caioflores/tetris-assembly", + "forks_url": "https://api.github.com/repos/caioflores/tetris-assembly/forks", + "keys_url": "https://api.github.com/repos/caioflores/tetris-assembly/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/caioflores/tetris-assembly/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/caioflores/tetris-assembly/teams", + "hooks_url": "https://api.github.com/repos/caioflores/tetris-assembly/hooks", + "issue_events_url": "https://api.github.com/repos/caioflores/tetris-assembly/issues/events{/number}", + "events_url": "https://api.github.com/repos/caioflores/tetris-assembly/events", + "assignees_url": "https://api.github.com/repos/caioflores/tetris-assembly/assignees{/user}", + "branches_url": "https://api.github.com/repos/caioflores/tetris-assembly/branches{/branch}", + "tags_url": "https://api.github.com/repos/caioflores/tetris-assembly/tags", + "blobs_url": "https://api.github.com/repos/caioflores/tetris-assembly/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/caioflores/tetris-assembly/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/caioflores/tetris-assembly/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/caioflores/tetris-assembly/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/caioflores/tetris-assembly/statuses/{sha}", + "languages_url": "https://api.github.com/repos/caioflores/tetris-assembly/languages", + "stargazers_url": "https://api.github.com/repos/caioflores/tetris-assembly/stargazers", + "contributors_url": "https://api.github.com/repos/caioflores/tetris-assembly/contributors", + "subscribers_url": "https://api.github.com/repos/caioflores/tetris-assembly/subscribers", + "subscription_url": "https://api.github.com/repos/caioflores/tetris-assembly/subscription", + "commits_url": "https://api.github.com/repos/caioflores/tetris-assembly/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/caioflores/tetris-assembly/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/caioflores/tetris-assembly/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/caioflores/tetris-assembly/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/caioflores/tetris-assembly/contents/{+path}", + "compare_url": "https://api.github.com/repos/caioflores/tetris-assembly/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/caioflores/tetris-assembly/merges", + "archive_url": "https://api.github.com/repos/caioflores/tetris-assembly/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/caioflores/tetris-assembly/downloads", + "issues_url": "https://api.github.com/repos/caioflores/tetris-assembly/issues{/number}", + "pulls_url": "https://api.github.com/repos/caioflores/tetris-assembly/pulls{/number}", + "milestones_url": "https://api.github.com/repos/caioflores/tetris-assembly/milestones{/number}", + "notifications_url": "https://api.github.com/repos/caioflores/tetris-assembly/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/caioflores/tetris-assembly/labels{/name}", + "releases_url": "https://api.github.com/repos/caioflores/tetris-assembly/releases{/id}", + "deployments_url": "https://api.github.com/repos/caioflores/tetris-assembly/deployments", + "created_at": "2013-05-02T19:30:29Z", + "updated_at": "2016-03-23T16:47:26Z", + "pushed_at": "2013-05-02T19:45:04Z", + "git_url": "git://github.com/caioflores/tetris-assembly.git", + "ssh_url": "git@github.com:caioflores/tetris-assembly.git", + "clone_url": "https://github.com/caioflores/tetris-assembly.git", + "svn_url": "https://github.com/caioflores/tetris-assembly", + "homepage": null, + "size": 100, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 11.870342 + }, + { + "id": 30859168, + "name": "NandToTetris", + "full_name": "markqian/NandToTetris", + "owner": { + "login": "markqian", + "id": 222635, + "avatar_url": "https://avatars.githubusercontent.com/u/222635?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/markqian", + "html_url": "https://github.com/markqian", + "followers_url": "https://api.github.com/users/markqian/followers", + "following_url": "https://api.github.com/users/markqian/following{/other_user}", + "gists_url": "https://api.github.com/users/markqian/gists{/gist_id}", + "starred_url": "https://api.github.com/users/markqian/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/markqian/subscriptions", + "organizations_url": "https://api.github.com/users/markqian/orgs", + "repos_url": "https://api.github.com/users/markqian/repos", + "events_url": "https://api.github.com/users/markqian/events{/privacy}", + "received_events_url": "https://api.github.com/users/markqian/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/markqian/NandToTetris", + "description": "Nand to Tetris projects", + "fork": false, + "url": "https://api.github.com/repos/markqian/NandToTetris", + "forks_url": "https://api.github.com/repos/markqian/NandToTetris/forks", + "keys_url": "https://api.github.com/repos/markqian/NandToTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/markqian/NandToTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/markqian/NandToTetris/teams", + "hooks_url": "https://api.github.com/repos/markqian/NandToTetris/hooks", + "issue_events_url": "https://api.github.com/repos/markqian/NandToTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/markqian/NandToTetris/events", + "assignees_url": "https://api.github.com/repos/markqian/NandToTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/markqian/NandToTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/markqian/NandToTetris/tags", + "blobs_url": "https://api.github.com/repos/markqian/NandToTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/markqian/NandToTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/markqian/NandToTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/markqian/NandToTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/markqian/NandToTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/markqian/NandToTetris/languages", + "stargazers_url": "https://api.github.com/repos/markqian/NandToTetris/stargazers", + "contributors_url": "https://api.github.com/repos/markqian/NandToTetris/contributors", + "subscribers_url": "https://api.github.com/repos/markqian/NandToTetris/subscribers", + "subscription_url": "https://api.github.com/repos/markqian/NandToTetris/subscription", + "commits_url": "https://api.github.com/repos/markqian/NandToTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/markqian/NandToTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/markqian/NandToTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/markqian/NandToTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/markqian/NandToTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/markqian/NandToTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/markqian/NandToTetris/merges", + "archive_url": "https://api.github.com/repos/markqian/NandToTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/markqian/NandToTetris/downloads", + "issues_url": "https://api.github.com/repos/markqian/NandToTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/markqian/NandToTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/markqian/NandToTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/markqian/NandToTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/markqian/NandToTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/markqian/NandToTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/markqian/NandToTetris/deployments", + "created_at": "2015-02-16T08:08:18Z", + "updated_at": "2015-02-16T08:21:15Z", + "pushed_at": "2015-02-16T08:13:46Z", + "git_url": "git://github.com/markqian/NandToTetris.git", + "ssh_url": "git@github.com:markqian/NandToTetris.git", + "clone_url": "https://github.com/markqian/NandToTetris.git", + "svn_url": "https://github.com/markqian/NandToTetris", + "homepage": "", + "size": 332, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 6.8093047 + }, + { + "id": 35788139, + "name": "TetrisCE", + "full_name": "drdnar/TetrisCE", + "owner": { + "login": "drdnar", + "id": 9597986, + "avatar_url": "https://avatars.githubusercontent.com/u/9597986?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/drdnar", + "html_url": "https://github.com/drdnar", + "followers_url": "https://api.github.com/users/drdnar/followers", + "following_url": "https://api.github.com/users/drdnar/following{/other_user}", + "gists_url": "https://api.github.com/users/drdnar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/drdnar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/drdnar/subscriptions", + "organizations_url": "https://api.github.com/users/drdnar/orgs", + "repos_url": "https://api.github.com/users/drdnar/repos", + "events_url": "https://api.github.com/users/drdnar/events{/privacy}", + "received_events_url": "https://api.github.com/users/drdnar/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/drdnar/TetrisCE", + "description": "A Tetris clone for the TI-84 Plus CE", + "fork": false, + "url": "https://api.github.com/repos/drdnar/TetrisCE", + "forks_url": "https://api.github.com/repos/drdnar/TetrisCE/forks", + "keys_url": "https://api.github.com/repos/drdnar/TetrisCE/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/drdnar/TetrisCE/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/drdnar/TetrisCE/teams", + "hooks_url": "https://api.github.com/repos/drdnar/TetrisCE/hooks", + "issue_events_url": "https://api.github.com/repos/drdnar/TetrisCE/issues/events{/number}", + "events_url": "https://api.github.com/repos/drdnar/TetrisCE/events", + "assignees_url": "https://api.github.com/repos/drdnar/TetrisCE/assignees{/user}", + "branches_url": "https://api.github.com/repos/drdnar/TetrisCE/branches{/branch}", + "tags_url": "https://api.github.com/repos/drdnar/TetrisCE/tags", + "blobs_url": "https://api.github.com/repos/drdnar/TetrisCE/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/drdnar/TetrisCE/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/drdnar/TetrisCE/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/drdnar/TetrisCE/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/drdnar/TetrisCE/statuses/{sha}", + "languages_url": "https://api.github.com/repos/drdnar/TetrisCE/languages", + "stargazers_url": "https://api.github.com/repos/drdnar/TetrisCE/stargazers", + "contributors_url": "https://api.github.com/repos/drdnar/TetrisCE/contributors", + "subscribers_url": "https://api.github.com/repos/drdnar/TetrisCE/subscribers", + "subscription_url": "https://api.github.com/repos/drdnar/TetrisCE/subscription", + "commits_url": "https://api.github.com/repos/drdnar/TetrisCE/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/drdnar/TetrisCE/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/drdnar/TetrisCE/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/drdnar/TetrisCE/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/drdnar/TetrisCE/contents/{+path}", + "compare_url": "https://api.github.com/repos/drdnar/TetrisCE/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/drdnar/TetrisCE/merges", + "archive_url": "https://api.github.com/repos/drdnar/TetrisCE/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/drdnar/TetrisCE/downloads", + "issues_url": "https://api.github.com/repos/drdnar/TetrisCE/issues{/number}", + "pulls_url": "https://api.github.com/repos/drdnar/TetrisCE/pulls{/number}", + "milestones_url": "https://api.github.com/repos/drdnar/TetrisCE/milestones{/number}", + "notifications_url": "https://api.github.com/repos/drdnar/TetrisCE/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/drdnar/TetrisCE/labels{/name}", + "releases_url": "https://api.github.com/repos/drdnar/TetrisCE/releases{/id}", + "deployments_url": "https://api.github.com/repos/drdnar/TetrisCE/deployments", + "created_at": "2015-05-18T00:07:48Z", + "updated_at": "2016-02-01T22:21:14Z", + "pushed_at": "2016-03-23T22:21:39Z", + "git_url": "git://github.com/drdnar/TetrisCE.git", + "ssh_url": "git@github.com:drdnar/TetrisCE.git", + "clone_url": "https://github.com/drdnar/TetrisCE.git", + "svn_url": "https://github.com/drdnar/TetrisCE", + "homepage": null, + "size": 161, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 4.579539 + }, + { + "id": 26052006, + "name": "nand2tetris", + "full_name": "mudge/nand2tetris", + "owner": { + "login": "mudge", + "id": 287, + "avatar_url": "https://avatars.githubusercontent.com/u/287?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mudge", + "html_url": "https://github.com/mudge", + "followers_url": "https://api.github.com/users/mudge/followers", + "following_url": "https://api.github.com/users/mudge/following{/other_user}", + "gists_url": "https://api.github.com/users/mudge/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mudge/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mudge/subscriptions", + "organizations_url": "https://api.github.com/users/mudge/orgs", + "repos_url": "https://api.github.com/users/mudge/repos", + "events_url": "https://api.github.com/users/mudge/events{/privacy}", + "received_events_url": "https://api.github.com/users/mudge/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mudge/nand2tetris", + "description": "On-going solutions to the \"From NAND to Tetris\" exercises", + "fork": false, + "url": "https://api.github.com/repos/mudge/nand2tetris", + "forks_url": "https://api.github.com/repos/mudge/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mudge/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mudge/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mudge/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mudge/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mudge/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mudge/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mudge/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mudge/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mudge/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mudge/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mudge/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mudge/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mudge/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mudge/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mudge/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mudge/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mudge/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mudge/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mudge/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mudge/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mudge/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mudge/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mudge/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mudge/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mudge/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mudge/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mudge/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mudge/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mudge/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mudge/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mudge/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mudge/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mudge/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mudge/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mudge/nand2tetris/deployments", + "created_at": "2014-11-01T13:58:17Z", + "updated_at": "2014-11-23T20:37:32Z", + "pushed_at": "2014-11-23T20:37:32Z", + "git_url": "git://github.com/mudge/nand2tetris.git", + "ssh_url": "git@github.com:mudge/nand2tetris.git", + "clone_url": "https://github.com/mudge/nand2tetris.git", + "svn_url": "https://github.com/mudge/nand2tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 428, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 4.2394085 + }, + { + "id": 43105091, + "name": "buildAComputer", + "full_name": "timqian/buildAComputer", + "owner": { + "login": "timqian", + "id": 5512552, + "avatar_url": "https://avatars.githubusercontent.com/u/5512552?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/timqian", + "html_url": "https://github.com/timqian", + "followers_url": "https://api.github.com/users/timqian/followers", + "following_url": "https://api.github.com/users/timqian/following{/other_user}", + "gists_url": "https://api.github.com/users/timqian/gists{/gist_id}", + "starred_url": "https://api.github.com/users/timqian/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/timqian/subscriptions", + "organizations_url": "https://api.github.com/users/timqian/orgs", + "repos_url": "https://api.github.com/users/timqian/repos", + "events_url": "https://api.github.com/users/timqian/events{/privacy}", + "received_events_url": "https://api.github.com/users/timqian/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/timqian/buildAComputer", + "description": "My implementation of the project: [From NAND to Tetris](http://nand2tetris.org/)", + "fork": false, + "url": "https://api.github.com/repos/timqian/buildAComputer", + "forks_url": "https://api.github.com/repos/timqian/buildAComputer/forks", + "keys_url": "https://api.github.com/repos/timqian/buildAComputer/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/timqian/buildAComputer/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/timqian/buildAComputer/teams", + "hooks_url": "https://api.github.com/repos/timqian/buildAComputer/hooks", + "issue_events_url": "https://api.github.com/repos/timqian/buildAComputer/issues/events{/number}", + "events_url": "https://api.github.com/repos/timqian/buildAComputer/events", + "assignees_url": "https://api.github.com/repos/timqian/buildAComputer/assignees{/user}", + "branches_url": "https://api.github.com/repos/timqian/buildAComputer/branches{/branch}", + "tags_url": "https://api.github.com/repos/timqian/buildAComputer/tags", + "blobs_url": "https://api.github.com/repos/timqian/buildAComputer/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/timqian/buildAComputer/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/timqian/buildAComputer/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/timqian/buildAComputer/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/timqian/buildAComputer/statuses/{sha}", + "languages_url": "https://api.github.com/repos/timqian/buildAComputer/languages", + "stargazers_url": "https://api.github.com/repos/timqian/buildAComputer/stargazers", + "contributors_url": "https://api.github.com/repos/timqian/buildAComputer/contributors", + "subscribers_url": "https://api.github.com/repos/timqian/buildAComputer/subscribers", + "subscription_url": "https://api.github.com/repos/timqian/buildAComputer/subscription", + "commits_url": "https://api.github.com/repos/timqian/buildAComputer/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/timqian/buildAComputer/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/timqian/buildAComputer/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/timqian/buildAComputer/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/timqian/buildAComputer/contents/{+path}", + "compare_url": "https://api.github.com/repos/timqian/buildAComputer/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/timqian/buildAComputer/merges", + "archive_url": "https://api.github.com/repos/timqian/buildAComputer/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/timqian/buildAComputer/downloads", + "issues_url": "https://api.github.com/repos/timqian/buildAComputer/issues{/number}", + "pulls_url": "https://api.github.com/repos/timqian/buildAComputer/pulls{/number}", + "milestones_url": "https://api.github.com/repos/timqian/buildAComputer/milestones{/number}", + "notifications_url": "https://api.github.com/repos/timqian/buildAComputer/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/timqian/buildAComputer/labels{/name}", + "releases_url": "https://api.github.com/repos/timqian/buildAComputer/releases{/id}", + "deployments_url": "https://api.github.com/repos/timqian/buildAComputer/deployments", + "created_at": "2015-09-25T02:31:04Z", + "updated_at": "2015-09-25T05:07:22Z", + "pushed_at": "2015-10-03T02:44:20Z", + "git_url": "git://github.com/timqian/buildAComputer.git", + "ssh_url": "git@github.com:timqian/buildAComputer.git", + "clone_url": "https://github.com/timqian/buildAComputer.git", + "svn_url": "https://github.com/timqian/buildAComputer", + "homepage": "", + "size": 276, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.4189136 + }, + { + "id": 10192719, + "name": "NAND2Tetris", + "full_name": "BenTristem/NAND2Tetris", + "owner": { + "login": "BenTristem", + "id": 4483240, + "avatar_url": "https://avatars.githubusercontent.com/u/4483240?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/BenTristem", + "html_url": "https://github.com/BenTristem", + "followers_url": "https://api.github.com/users/BenTristem/followers", + "following_url": "https://api.github.com/users/BenTristem/following{/other_user}", + "gists_url": "https://api.github.com/users/BenTristem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BenTristem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BenTristem/subscriptions", + "organizations_url": "https://api.github.com/users/BenTristem/orgs", + "repos_url": "https://api.github.com/users/BenTristem/repos", + "events_url": "https://api.github.com/users/BenTristem/events{/privacy}", + "received_events_url": "https://api.github.com/users/BenTristem/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/BenTristem/NAND2Tetris", + "description": "NAND2Tetris project", + "fork": false, + "url": "https://api.github.com/repos/BenTristem/NAND2Tetris", + "forks_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/forks", + "keys_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/teams", + "hooks_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/events", + "assignees_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/tags", + "blobs_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/subscription", + "commits_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/merges", + "archive_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/downloads", + "issues_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/BenTristem/NAND2Tetris/deployments", + "created_at": "2013-05-21T09:59:34Z", + "updated_at": "2014-12-15T20:08:02Z", + "pushed_at": "2013-05-22T10:23:40Z", + "git_url": "git://github.com/BenTristem/NAND2Tetris.git", + "ssh_url": "git@github.com:BenTristem/NAND2Tetris.git", + "clone_url": "https://github.com/BenTristem/NAND2Tetris.git", + "svn_url": "https://github.com/BenTristem/NAND2Tetris", + "homepage": null, + "size": 9840, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 31913292, + "name": "nand2tetris", + "full_name": "jennahowe/nand2tetris", + "owner": { + "login": "jennahowe", + "id": 7994800, + "avatar_url": "https://avatars.githubusercontent.com/u/7994800?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jennahowe", + "html_url": "https://github.com/jennahowe", + "followers_url": "https://api.github.com/users/jennahowe/followers", + "following_url": "https://api.github.com/users/jennahowe/following{/other_user}", + "gists_url": "https://api.github.com/users/jennahowe/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jennahowe/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jennahowe/subscriptions", + "organizations_url": "https://api.github.com/users/jennahowe/orgs", + "repos_url": "https://api.github.com/users/jennahowe/repos", + "events_url": "https://api.github.com/users/jennahowe/events{/privacy}", + "received_events_url": "https://api.github.com/users/jennahowe/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jennahowe/nand2tetris", + "description": "My work on the nand2tetris (Elements of Computing Systems) MIT course http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/jennahowe/nand2tetris", + "forks_url": "https://api.github.com/repos/jennahowe/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jennahowe/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jennahowe/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jennahowe/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jennahowe/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jennahowe/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jennahowe/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jennahowe/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jennahowe/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jennahowe/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jennahowe/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jennahowe/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jennahowe/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jennahowe/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jennahowe/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jennahowe/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jennahowe/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jennahowe/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jennahowe/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jennahowe/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jennahowe/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jennahowe/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jennahowe/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jennahowe/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jennahowe/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jennahowe/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jennahowe/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jennahowe/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jennahowe/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jennahowe/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jennahowe/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jennahowe/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jennahowe/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jennahowe/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jennahowe/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jennahowe/nand2tetris/deployments", + "created_at": "2015-03-09T17:44:28Z", + "updated_at": "2015-03-18T15:37:15Z", + "pushed_at": "2015-03-18T15:37:13Z", + "git_url": "git://github.com/jennahowe/nand2tetris.git", + "ssh_url": "git@github.com:jennahowe/nand2tetris.git", + "clone_url": "https://github.com/jennahowe/nand2tetris.git", + "svn_url": "https://github.com/jennahowe/nand2tetris", + "homepage": "", + "size": 348, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 32660807, + "name": "nand2tetris", + "full_name": "rayning0/nand2tetris", + "owner": { + "login": "rayning0", + "id": 1870151, + "avatar_url": "https://avatars.githubusercontent.com/u/1870151?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rayning0", + "html_url": "https://github.com/rayning0", + "followers_url": "https://api.github.com/users/rayning0/followers", + "following_url": "https://api.github.com/users/rayning0/following{/other_user}", + "gists_url": "https://api.github.com/users/rayning0/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rayning0/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rayning0/subscriptions", + "organizations_url": "https://api.github.com/users/rayning0/orgs", + "repos_url": "https://api.github.com/users/rayning0/repos", + "events_url": "https://api.github.com/users/rayning0/events{/privacy}", + "received_events_url": "https://api.github.com/users/rayning0/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/rayning0/nand2tetris", + "description": "Nand2Tetris (http://www.nand2tetris.org), or Harvard CS 101. Building the hardware/software of a virtual computer from ground up.", + "fork": false, + "url": "https://api.github.com/repos/rayning0/nand2tetris", + "forks_url": "https://api.github.com/repos/rayning0/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/rayning0/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rayning0/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rayning0/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/rayning0/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/rayning0/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/rayning0/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/rayning0/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/rayning0/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/rayning0/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/rayning0/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rayning0/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rayning0/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rayning0/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rayning0/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rayning0/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/rayning0/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/rayning0/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/rayning0/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/rayning0/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/rayning0/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rayning0/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rayning0/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rayning0/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rayning0/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/rayning0/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rayning0/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/rayning0/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rayning0/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/rayning0/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/rayning0/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rayning0/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rayning0/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rayning0/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/rayning0/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/rayning0/nand2tetris/deployments", + "created_at": "2015-03-22T03:47:39Z", + "updated_at": "2015-03-22T15:06:03Z", + "pushed_at": "2015-03-22T15:04:05Z", + "git_url": "git://github.com/rayning0/nand2tetris.git", + "ssh_url": "git@github.com:rayning0/nand2tetris.git", + "clone_url": "https://github.com/rayning0/nand2tetris.git", + "svn_url": "https://github.com/rayning0/nand2tetris", + "homepage": null, + "size": 616, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 42123459, + "name": "nand2tetris", + "full_name": "filhoweuler/nand2tetris", + "owner": { + "login": "filhoweuler", + "id": 6530179, + "avatar_url": "https://avatars.githubusercontent.com/u/6530179?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/filhoweuler", + "html_url": "https://github.com/filhoweuler", + "followers_url": "https://api.github.com/users/filhoweuler/followers", + "following_url": "https://api.github.com/users/filhoweuler/following{/other_user}", + "gists_url": "https://api.github.com/users/filhoweuler/gists{/gist_id}", + "starred_url": "https://api.github.com/users/filhoweuler/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/filhoweuler/subscriptions", + "organizations_url": "https://api.github.com/users/filhoweuler/orgs", + "repos_url": "https://api.github.com/users/filhoweuler/repos", + "events_url": "https://api.github.com/users/filhoweuler/events{/privacy}", + "received_events_url": "https://api.github.com/users/filhoweuler/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/filhoweuler/nand2tetris", + "description": "Repositorio criado para salvar trabalhos da disciplina de AOC 2015/2", + "fork": false, + "url": "https://api.github.com/repos/filhoweuler/nand2tetris", + "forks_url": "https://api.github.com/repos/filhoweuler/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/filhoweuler/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/filhoweuler/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/filhoweuler/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/filhoweuler/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/filhoweuler/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/filhoweuler/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/filhoweuler/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/filhoweuler/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/filhoweuler/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/filhoweuler/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/filhoweuler/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/filhoweuler/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/filhoweuler/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/filhoweuler/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/filhoweuler/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/filhoweuler/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/filhoweuler/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/filhoweuler/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/filhoweuler/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/filhoweuler/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/filhoweuler/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/filhoweuler/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/filhoweuler/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/filhoweuler/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/filhoweuler/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/filhoweuler/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/filhoweuler/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/filhoweuler/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/filhoweuler/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/filhoweuler/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/filhoweuler/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/filhoweuler/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/filhoweuler/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/filhoweuler/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/filhoweuler/nand2tetris/deployments", + "created_at": "2015-09-08T16:04:45Z", + "updated_at": "2015-09-08T17:53:10Z", + "pushed_at": "2015-09-08T18:58:11Z", + "git_url": "git://github.com/filhoweuler/nand2tetris.git", + "ssh_url": "git@github.com:filhoweuler/nand2tetris.git", + "clone_url": "https://github.com/filhoweuler/nand2tetris.git", + "svn_url": "https://github.com/filhoweuler/nand2tetris", + "homepage": null, + "size": 308, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 50825970, + "name": "nand2tetris", + "full_name": "awayz/nand2tetris", + "owner": { + "login": "awayz", + "id": 10144695, + "avatar_url": "https://avatars.githubusercontent.com/u/10144695?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/awayz", + "html_url": "https://github.com/awayz", + "followers_url": "https://api.github.com/users/awayz/followers", + "following_url": "https://api.github.com/users/awayz/following{/other_user}", + "gists_url": "https://api.github.com/users/awayz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/awayz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/awayz/subscriptions", + "organizations_url": "https://api.github.com/users/awayz/orgs", + "repos_url": "https://api.github.com/users/awayz/repos", + "events_url": "https://api.github.com/users/awayz/events{/privacy}", + "received_events_url": "https://api.github.com/users/awayz/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/awayz/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/awayz/nand2tetris", + "forks_url": "https://api.github.com/repos/awayz/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/awayz/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/awayz/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/awayz/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/awayz/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/awayz/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/awayz/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/awayz/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/awayz/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/awayz/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/awayz/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/awayz/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/awayz/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/awayz/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/awayz/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/awayz/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/awayz/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/awayz/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/awayz/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/awayz/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/awayz/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/awayz/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/awayz/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/awayz/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/awayz/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/awayz/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/awayz/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/awayz/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/awayz/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/awayz/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/awayz/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/awayz/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/awayz/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/awayz/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/awayz/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/awayz/nand2tetris/deployments", + "created_at": "2016-02-01T08:37:47Z", + "updated_at": "2016-02-03T04:57:32Z", + "pushed_at": "2016-02-23T15:03:07Z", + "git_url": "git://github.com/awayz/nand2tetris.git", + "ssh_url": "git@github.com:awayz/nand2tetris.git", + "clone_url": "https://github.com/awayz/nand2tetris.git", + "svn_url": "https://github.com/awayz/nand2tetris", + "homepage": null, + "size": 7409, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 9607745, + "name": "nand2tetris", + "full_name": "AaronRandall/nand2tetris", + "owner": { + "login": "AaronRandall", + "id": 2228462, + "avatar_url": "https://avatars.githubusercontent.com/u/2228462?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/AaronRandall", + "html_url": "https://github.com/AaronRandall", + "followers_url": "https://api.github.com/users/AaronRandall/followers", + "following_url": "https://api.github.com/users/AaronRandall/following{/other_user}", + "gists_url": "https://api.github.com/users/AaronRandall/gists{/gist_id}", + "starred_url": "https://api.github.com/users/AaronRandall/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/AaronRandall/subscriptions", + "organizations_url": "https://api.github.com/users/AaronRandall/orgs", + "repos_url": "https://api.github.com/users/AaronRandall/repos", + "events_url": "https://api.github.com/users/AaronRandall/events{/privacy}", + "received_events_url": "https://api.github.com/users/AaronRandall/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/AaronRandall/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/AaronRandall/nand2tetris", + "forks_url": "https://api.github.com/repos/AaronRandall/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/AaronRandall/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/AaronRandall/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/AaronRandall/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/AaronRandall/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/AaronRandall/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/AaronRandall/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/AaronRandall/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/AaronRandall/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/AaronRandall/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/AaronRandall/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/AaronRandall/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/AaronRandall/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/AaronRandall/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/AaronRandall/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/AaronRandall/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/AaronRandall/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/AaronRandall/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/AaronRandall/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/AaronRandall/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/AaronRandall/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/AaronRandall/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/AaronRandall/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/AaronRandall/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/AaronRandall/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/AaronRandall/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/AaronRandall/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/AaronRandall/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/AaronRandall/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/AaronRandall/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/AaronRandall/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/AaronRandall/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/AaronRandall/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/AaronRandall/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/AaronRandall/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/AaronRandall/nand2tetris/deployments", + "created_at": "2013-04-22T20:02:07Z", + "updated_at": "2016-04-05T07:34:01Z", + "pushed_at": "2016-04-05T07:33:25Z", + "git_url": "git://github.com/AaronRandall/nand2tetris.git", + "ssh_url": "git@github.com:AaronRandall/nand2tetris.git", + "clone_url": "https://github.com/AaronRandall/nand2tetris.git", + "svn_url": "https://github.com/AaronRandall/nand2tetris", + "homepage": null, + "size": 636, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 28212995, + "name": "nand2tetris", + "full_name": "bgx/nand2tetris", + "owner": { + "login": "bgx", + "id": 9850511, + "avatar_url": "https://avatars.githubusercontent.com/u/9850511?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bgx", + "html_url": "https://github.com/bgx", + "followers_url": "https://api.github.com/users/bgx/followers", + "following_url": "https://api.github.com/users/bgx/following{/other_user}", + "gists_url": "https://api.github.com/users/bgx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bgx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bgx/subscriptions", + "organizations_url": "https://api.github.com/users/bgx/orgs", + "repos_url": "https://api.github.com/users/bgx/repos", + "events_url": "https://api.github.com/users/bgx/events{/privacy}", + "received_events_url": "https://api.github.com/users/bgx/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bgx/nand2tetris", + "description": "Building a simple yet powerful computer system from the ground up. (Basic hardware platform + modern software hierarchy)", + "fork": false, + "url": "https://api.github.com/repos/bgx/nand2tetris", + "forks_url": "https://api.github.com/repos/bgx/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bgx/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bgx/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bgx/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bgx/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bgx/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bgx/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bgx/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bgx/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bgx/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bgx/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bgx/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bgx/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bgx/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bgx/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bgx/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bgx/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bgx/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bgx/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bgx/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bgx/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bgx/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bgx/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bgx/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bgx/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bgx/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bgx/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bgx/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bgx/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bgx/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bgx/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bgx/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bgx/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bgx/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bgx/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bgx/nand2tetris/deployments", + "created_at": "2014-12-19T03:42:45Z", + "updated_at": "2016-04-20T12:28:42Z", + "pushed_at": "2016-04-03T02:53:44Z", + "git_url": "git://github.com/bgx/nand2tetris.git", + "ssh_url": "git@github.com:bgx/nand2tetris.git", + "clone_url": "https://github.com/bgx/nand2tetris.git", + "svn_url": "https://github.com/bgx/nand2tetris", + "homepage": "", + "size": 1090, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 60416177, + "name": "nand2tetris", + "full_name": "leideng/nand2tetris", + "owner": { + "login": "leideng", + "id": 7011915, + "avatar_url": "https://avatars.githubusercontent.com/u/7011915?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/leideng", + "html_url": "https://github.com/leideng", + "followers_url": "https://api.github.com/users/leideng/followers", + "following_url": "https://api.github.com/users/leideng/following{/other_user}", + "gists_url": "https://api.github.com/users/leideng/gists{/gist_id}", + "starred_url": "https://api.github.com/users/leideng/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/leideng/subscriptions", + "organizations_url": "https://api.github.com/users/leideng/orgs", + "repos_url": "https://api.github.com/users/leideng/repos", + "events_url": "https://api.github.com/users/leideng/events{/privacy}", + "received_events_url": "https://api.github.com/users/leideng/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/leideng/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/leideng/nand2tetris", + "forks_url": "https://api.github.com/repos/leideng/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/leideng/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/leideng/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/leideng/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/leideng/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/leideng/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/leideng/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/leideng/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/leideng/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/leideng/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/leideng/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/leideng/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/leideng/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/leideng/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/leideng/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/leideng/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/leideng/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/leideng/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/leideng/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/leideng/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/leideng/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/leideng/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/leideng/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/leideng/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/leideng/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/leideng/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/leideng/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/leideng/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/leideng/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/leideng/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/leideng/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/leideng/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/leideng/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/leideng/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/leideng/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/leideng/nand2tetris/deployments", + "created_at": "2016-06-04T15:13:35Z", + "updated_at": "2016-06-11T07:00:12Z", + "pushed_at": "2016-06-19T05:38:07Z", + "git_url": "git://github.com/leideng/nand2tetris.git", + "ssh_url": "git@github.com:leideng/nand2tetris.git", + "clone_url": "https://github.com/leideng/nand2tetris.git", + "svn_url": "https://github.com/leideng/nand2tetris", + "homepage": null, + "size": 729, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 42820897, + "name": "nand2tetris", + "full_name": "TheVainBoy/nand2tetris", + "owner": { + "login": "TheVainBoy", + "id": 14372674, + "avatar_url": "https://avatars.githubusercontent.com/u/14372674?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/TheVainBoy", + "html_url": "https://github.com/TheVainBoy", + "followers_url": "https://api.github.com/users/TheVainBoy/followers", + "following_url": "https://api.github.com/users/TheVainBoy/following{/other_user}", + "gists_url": "https://api.github.com/users/TheVainBoy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TheVainBoy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TheVainBoy/subscriptions", + "organizations_url": "https://api.github.com/users/TheVainBoy/orgs", + "repos_url": "https://api.github.com/users/TheVainBoy/repos", + "events_url": "https://api.github.com/users/TheVainBoy/events{/privacy}", + "received_events_url": "https://api.github.com/users/TheVainBoy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/TheVainBoy/nand2tetris", + "description": "Exercises from The Elements of Computer Systems", + "fork": false, + "url": "https://api.github.com/repos/TheVainBoy/nand2tetris", + "forks_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/TheVainBoy/nand2tetris/deployments", + "created_at": "2015-09-20T16:49:44Z", + "updated_at": "2016-03-04T18:08:41Z", + "pushed_at": "2016-05-26T19:14:38Z", + "git_url": "git://github.com/TheVainBoy/nand2tetris.git", + "ssh_url": "git@github.com:TheVainBoy/nand2tetris.git", + "clone_url": "https://github.com/TheVainBoy/nand2tetris.git", + "svn_url": "https://github.com/TheVainBoy/nand2tetris", + "homepage": null, + "size": 1062, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.255108 + }, + { + "id": 33394335, + "name": "my_nand2tetris", + "full_name": "snufkon/my_nand2tetris", + "owner": { + "login": "snufkon", + "id": 490414, + "avatar_url": "https://avatars.githubusercontent.com/u/490414?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/snufkon", + "html_url": "https://github.com/snufkon", + "followers_url": "https://api.github.com/users/snufkon/followers", + "following_url": "https://api.github.com/users/snufkon/following{/other_user}", + "gists_url": "https://api.github.com/users/snufkon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/snufkon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/snufkon/subscriptions", + "organizations_url": "https://api.github.com/users/snufkon/orgs", + "repos_url": "https://api.github.com/users/snufkon/repos", + "events_url": "https://api.github.com/users/snufkon/events{/privacy}", + "received_events_url": "https://api.github.com/users/snufkon/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/snufkon/my_nand2tetris", + "description": "「コンピュータシステムの理論と実装」演習用リポジトリ", + "fork": false, + "url": "https://api.github.com/repos/snufkon/my_nand2tetris", + "forks_url": "https://api.github.com/repos/snufkon/my_nand2tetris/forks", + "keys_url": "https://api.github.com/repos/snufkon/my_nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/snufkon/my_nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/snufkon/my_nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/snufkon/my_nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/snufkon/my_nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/snufkon/my_nand2tetris/events", + "assignees_url": "https://api.github.com/repos/snufkon/my_nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/snufkon/my_nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/snufkon/my_nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/snufkon/my_nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/snufkon/my_nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/snufkon/my_nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/snufkon/my_nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/snufkon/my_nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/snufkon/my_nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/snufkon/my_nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/snufkon/my_nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/snufkon/my_nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/snufkon/my_nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/snufkon/my_nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/snufkon/my_nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/snufkon/my_nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/snufkon/my_nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/snufkon/my_nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/snufkon/my_nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/snufkon/my_nand2tetris/merges", + "archive_url": "https://api.github.com/repos/snufkon/my_nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/snufkon/my_nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/snufkon/my_nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/snufkon/my_nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/snufkon/my_nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/snufkon/my_nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/snufkon/my_nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/snufkon/my_nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/snufkon/my_nand2tetris/deployments", + "created_at": "2015-04-04T04:34:19Z", + "updated_at": "2015-10-03T13:48:48Z", + "pushed_at": "2015-08-16T06:49:12Z", + "git_url": "git://github.com/snufkon/my_nand2tetris.git", + "ssh_url": "git@github.com:snufkon/my_nand2tetris.git", + "clone_url": "https://github.com/snufkon/my_nand2tetris.git", + "svn_url": "https://github.com/snufkon/my_nand2tetris", + "homepage": null, + "size": 2636, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.231357 + }, + { + "id": 39799066, + "name": "nand2tetris", + "full_name": "RickyBoyd/nand2tetris", + "owner": { + "login": "RickyBoyd", + "id": 5221289, + "avatar_url": "https://avatars.githubusercontent.com/u/5221289?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/RickyBoyd", + "html_url": "https://github.com/RickyBoyd", + "followers_url": "https://api.github.com/users/RickyBoyd/followers", + "following_url": "https://api.github.com/users/RickyBoyd/following{/other_user}", + "gists_url": "https://api.github.com/users/RickyBoyd/gists{/gist_id}", + "starred_url": "https://api.github.com/users/RickyBoyd/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/RickyBoyd/subscriptions", + "organizations_url": "https://api.github.com/users/RickyBoyd/orgs", + "repos_url": "https://api.github.com/users/RickyBoyd/repos", + "events_url": "https://api.github.com/users/RickyBoyd/events{/privacy}", + "received_events_url": "https://api.github.com/users/RickyBoyd/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/RickyBoyd/nand2tetris", + "description": "Building a computer out of a hardware simulation language, making an assembler for the computer and then a simple OS.", + "fork": false, + "url": "https://api.github.com/repos/RickyBoyd/nand2tetris", + "forks_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/RickyBoyd/nand2tetris/deployments", + "created_at": "2015-07-27T21:33:58Z", + "updated_at": "2016-02-14T02:06:41Z", + "pushed_at": "2015-08-11T18:11:12Z", + "git_url": "git://github.com/RickyBoyd/nand2tetris.git", + "ssh_url": "git@github.com:RickyBoyd/nand2tetris.git", + "clone_url": "https://github.com/RickyBoyd/nand2tetris.git", + "svn_url": "https://github.com/RickyBoyd/nand2tetris", + "homepage": null, + "size": 372, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.231357 + }, + { + "id": 53402249, + "name": "nand2tetris", + "full_name": "shahamran/nand2tetris", + "owner": { + "login": "shahamran", + "id": 10813499, + "avatar_url": "https://avatars.githubusercontent.com/u/10813499?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/shahamran", + "html_url": "https://github.com/shahamran", + "followers_url": "https://api.github.com/users/shahamran/followers", + "following_url": "https://api.github.com/users/shahamran/following{/other_user}", + "gists_url": "https://api.github.com/users/shahamran/gists{/gist_id}", + "starred_url": "https://api.github.com/users/shahamran/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/shahamran/subscriptions", + "organizations_url": "https://api.github.com/users/shahamran/orgs", + "repos_url": "https://api.github.com/users/shahamran/repos", + "events_url": "https://api.github.com/users/shahamran/events{/privacy}", + "received_events_url": "https://api.github.com/users/shahamran/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/shahamran/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/shahamran/nand2tetris", + "forks_url": "https://api.github.com/repos/shahamran/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/shahamran/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/shahamran/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/shahamran/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/shahamran/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/shahamran/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/shahamran/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/shahamran/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/shahamran/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/shahamran/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/shahamran/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/shahamran/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/shahamran/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/shahamran/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/shahamran/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/shahamran/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/shahamran/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/shahamran/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/shahamran/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/shahamran/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/shahamran/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/shahamran/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/shahamran/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/shahamran/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/shahamran/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/shahamran/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/shahamran/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/shahamran/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/shahamran/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/shahamran/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/shahamran/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/shahamran/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/shahamran/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/shahamran/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/shahamran/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/shahamran/nand2tetris/deployments", + "created_at": "2016-03-08T10:05:57Z", + "updated_at": "2016-05-24T12:03:07Z", + "pushed_at": "2016-06-20T09:49:38Z", + "git_url": "git://github.com/shahamran/nand2tetris.git", + "ssh_url": "git@github.com:shahamran/nand2tetris.git", + "clone_url": "https://github.com/shahamran/nand2tetris.git", + "svn_url": "https://github.com/shahamran/nand2tetris", + "homepage": null, + "size": 1863, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.231357 + }, + { + "id": 18867463, + "name": "nand2tetris", + "full_name": "mmmries/nand2tetris", + "owner": { + "login": "mmmries", + "id": 80008, + "avatar_url": "https://avatars.githubusercontent.com/u/80008?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mmmries", + "html_url": "https://github.com/mmmries", + "followers_url": "https://api.github.com/users/mmmries/followers", + "following_url": "https://api.github.com/users/mmmries/following{/other_user}", + "gists_url": "https://api.github.com/users/mmmries/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mmmries/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mmmries/subscriptions", + "organizations_url": "https://api.github.com/users/mmmries/orgs", + "repos_url": "https://api.github.com/users/mmmries/repos", + "events_url": "https://api.github.com/users/mmmries/events{/privacy}", + "received_events_url": "https://api.github.com/users/mmmries/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mmmries/nand2tetris", + "description": "my solutions for the nand2tetris course projects", + "fork": false, + "url": "https://api.github.com/repos/mmmries/nand2tetris", + "forks_url": "https://api.github.com/repos/mmmries/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mmmries/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mmmries/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mmmries/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mmmries/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mmmries/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mmmries/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mmmries/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mmmries/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mmmries/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mmmries/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mmmries/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mmmries/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mmmries/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mmmries/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mmmries/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mmmries/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mmmries/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mmmries/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mmmries/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mmmries/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mmmries/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mmmries/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mmmries/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mmmries/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mmmries/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mmmries/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mmmries/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mmmries/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mmmries/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mmmries/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mmmries/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mmmries/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mmmries/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mmmries/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mmmries/nand2tetris/deployments", + "created_at": "2014-04-17T05:18:05Z", + "updated_at": "2015-05-09T15:27:02Z", + "pushed_at": "2014-10-04T20:11:24Z", + "git_url": "git://github.com/mmmries/nand2tetris.git", + "ssh_url": "git@github.com:mmmries/nand2tetris.git", + "clone_url": "https://github.com/mmmries/nand2tetris.git", + "svn_url": "https://github.com/mmmries/nand2tetris", + "homepage": null, + "size": 772, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.2283893 + }, + { + "id": 35750960, + "name": "Nand2Tetris", + "full_name": "shunsuke227ono/Nand2Tetris", + "owner": { + "login": "shunsuke227ono", + "id": 7357864, + "avatar_url": "https://avatars.githubusercontent.com/u/7357864?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/shunsuke227ono", + "html_url": "https://github.com/shunsuke227ono", + "followers_url": "https://api.github.com/users/shunsuke227ono/followers", + "following_url": "https://api.github.com/users/shunsuke227ono/following{/other_user}", + "gists_url": "https://api.github.com/users/shunsuke227ono/gists{/gist_id}", + "starred_url": "https://api.github.com/users/shunsuke227ono/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/shunsuke227ono/subscriptions", + "organizations_url": "https://api.github.com/users/shunsuke227ono/orgs", + "repos_url": "https://api.github.com/users/shunsuke227ono/repos", + "events_url": "https://api.github.com/users/shunsuke227ono/events{/privacy}", + "received_events_url": "https://api.github.com/users/shunsuke227ono/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/shunsuke227ono/Nand2Tetris", + "description": "Learn computer system with a course provided by MIT http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris", + "forks_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/shunsuke227ono/Nand2Tetris/deployments", + "created_at": "2015-05-17T03:53:10Z", + "updated_at": "2015-09-21T11:34:50Z", + "pushed_at": "2015-06-07T13:57:47Z", + "git_url": "git://github.com/shunsuke227ono/Nand2Tetris.git", + "ssh_url": "git@github.com:shunsuke227ono/Nand2Tetris.git", + "clone_url": "https://github.com/shunsuke227ono/Nand2Tetris.git", + "svn_url": "https://github.com/shunsuke227ono/Nand2Tetris", + "homepage": "", + "size": 1996, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.2283893 + }, + { + "id": 9521411, + "name": "nand2tetris", + "full_name": "jtdowney/nand2tetris", + "owner": { + "login": "jtdowney", + "id": 44654, + "avatar_url": "https://avatars.githubusercontent.com/u/44654?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jtdowney", + "html_url": "https://github.com/jtdowney", + "followers_url": "https://api.github.com/users/jtdowney/followers", + "following_url": "https://api.github.com/users/jtdowney/following{/other_user}", + "gists_url": "https://api.github.com/users/jtdowney/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jtdowney/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jtdowney/subscriptions", + "organizations_url": "https://api.github.com/users/jtdowney/orgs", + "repos_url": "https://api.github.com/users/jtdowney/repos", + "events_url": "https://api.github.com/users/jtdowney/events{/privacy}", + "received_events_url": "https://api.github.com/users/jtdowney/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jtdowney/nand2tetris", + "description": "My solutions to the projects in The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/jtdowney/nand2tetris", + "forks_url": "https://api.github.com/repos/jtdowney/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jtdowney/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jtdowney/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jtdowney/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jtdowney/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jtdowney/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jtdowney/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jtdowney/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jtdowney/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jtdowney/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jtdowney/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jtdowney/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jtdowney/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jtdowney/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jtdowney/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jtdowney/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jtdowney/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jtdowney/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jtdowney/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jtdowney/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jtdowney/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jtdowney/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jtdowney/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jtdowney/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jtdowney/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jtdowney/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jtdowney/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jtdowney/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jtdowney/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jtdowney/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jtdowney/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jtdowney/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jtdowney/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jtdowney/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jtdowney/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jtdowney/nand2tetris/deployments", + "created_at": "2013-04-18T12:44:58Z", + "updated_at": "2016-03-28T15:23:12Z", + "pushed_at": "2013-04-18T12:47:54Z", + "git_url": "git://github.com/jtdowney/nand2tetris.git", + "ssh_url": "git@github.com:jtdowney/nand2tetris.git", + "clone_url": "https://github.com/jtdowney/nand2tetris.git", + "svn_url": "https://github.com/jtdowney/nand2tetris", + "homepage": null, + "size": 340, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.2283893 + }, + { + "id": 15288509, + "name": "nand2tetris", + "full_name": "prec/nand2tetris", + "owner": { + "login": "prec", + "id": 2953301, + "avatar_url": "https://avatars.githubusercontent.com/u/2953301?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/prec", + "html_url": "https://github.com/prec", + "followers_url": "https://api.github.com/users/prec/followers", + "following_url": "https://api.github.com/users/prec/following{/other_user}", + "gists_url": "https://api.github.com/users/prec/gists{/gist_id}", + "starred_url": "https://api.github.com/users/prec/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/prec/subscriptions", + "organizations_url": "https://api.github.com/users/prec/orgs", + "repos_url": "https://api.github.com/users/prec/repos", + "events_url": "https://api.github.com/users/prec/events{/privacy}", + "received_events_url": "https://api.github.com/users/prec/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/prec/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/prec/nand2tetris", + "forks_url": "https://api.github.com/repos/prec/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/prec/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/prec/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/prec/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/prec/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/prec/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/prec/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/prec/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/prec/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/prec/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/prec/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/prec/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/prec/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/prec/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/prec/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/prec/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/prec/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/prec/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/prec/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/prec/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/prec/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/prec/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/prec/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/prec/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/prec/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/prec/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/prec/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/prec/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/prec/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/prec/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/prec/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/prec/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/prec/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/prec/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/prec/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/prec/nand2tetris/deployments", + "created_at": "2013-12-18T16:39:16Z", + "updated_at": "2014-01-13T04:22:42Z", + "pushed_at": "2014-01-13T04:22:42Z", + "git_url": "git://github.com/prec/nand2tetris.git", + "ssh_url": "git@github.com:prec/nand2tetris.git", + "clone_url": "https://github.com/prec/nand2tetris.git", + "svn_url": "https://github.com/prec/nand2tetris", + "homepage": null, + "size": 416, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 31266055, + "name": "nand2tetris", + "full_name": "josephahn/nand2tetris", + "owner": { + "login": "josephahn", + "id": 4207073, + "avatar_url": "https://avatars.githubusercontent.com/u/4207073?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/josephahn", + "html_url": "https://github.com/josephahn", + "followers_url": "https://api.github.com/users/josephahn/followers", + "following_url": "https://api.github.com/users/josephahn/following{/other_user}", + "gists_url": "https://api.github.com/users/josephahn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/josephahn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/josephahn/subscriptions", + "organizations_url": "https://api.github.com/users/josephahn/orgs", + "repos_url": "https://api.github.com/users/josephahn/repos", + "events_url": "https://api.github.com/users/josephahn/events{/privacy}", + "received_events_url": "https://api.github.com/users/josephahn/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/josephahn/nand2tetris", + "description": "nand2tetris projects", + "fork": false, + "url": "https://api.github.com/repos/josephahn/nand2tetris", + "forks_url": "https://api.github.com/repos/josephahn/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/josephahn/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/josephahn/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/josephahn/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/josephahn/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/josephahn/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/josephahn/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/josephahn/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/josephahn/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/josephahn/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/josephahn/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/josephahn/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/josephahn/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/josephahn/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/josephahn/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/josephahn/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/josephahn/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/josephahn/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/josephahn/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/josephahn/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/josephahn/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/josephahn/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/josephahn/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/josephahn/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/josephahn/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/josephahn/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/josephahn/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/josephahn/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/josephahn/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/josephahn/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/josephahn/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/josephahn/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/josephahn/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/josephahn/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/josephahn/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/josephahn/nand2tetris/deployments", + "created_at": "2015-02-24T15:20:23Z", + "updated_at": "2015-03-02T00:13:39Z", + "pushed_at": "2015-03-02T00:13:39Z", + "git_url": "git://github.com/josephahn/nand2tetris.git", + "ssh_url": "git@github.com:josephahn/nand2tetris.git", + "clone_url": "https://github.com/josephahn/nand2tetris.git", + "svn_url": "https://github.com/josephahn/nand2tetris", + "homepage": "", + "size": 416, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 50947153, + "name": "nand-to-tetris", + "full_name": "grugway/nand-to-tetris", + "owner": { + "login": "grugway", + "id": 8777674, + "avatar_url": "https://avatars.githubusercontent.com/u/8777674?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/grugway", + "html_url": "https://github.com/grugway", + "followers_url": "https://api.github.com/users/grugway/followers", + "following_url": "https://api.github.com/users/grugway/following{/other_user}", + "gists_url": "https://api.github.com/users/grugway/gists{/gist_id}", + "starred_url": "https://api.github.com/users/grugway/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/grugway/subscriptions", + "organizations_url": "https://api.github.com/users/grugway/orgs", + "repos_url": "https://api.github.com/users/grugway/repos", + "events_url": "https://api.github.com/users/grugway/events{/privacy}", + "received_events_url": "https://api.github.com/users/grugway/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/grugway/nand-to-tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/grugway/nand-to-tetris", + "forks_url": "https://api.github.com/repos/grugway/nand-to-tetris/forks", + "keys_url": "https://api.github.com/repos/grugway/nand-to-tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/grugway/nand-to-tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/grugway/nand-to-tetris/teams", + "hooks_url": "https://api.github.com/repos/grugway/nand-to-tetris/hooks", + "issue_events_url": "https://api.github.com/repos/grugway/nand-to-tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/grugway/nand-to-tetris/events", + "assignees_url": "https://api.github.com/repos/grugway/nand-to-tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/grugway/nand-to-tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/grugway/nand-to-tetris/tags", + "blobs_url": "https://api.github.com/repos/grugway/nand-to-tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/grugway/nand-to-tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/grugway/nand-to-tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/grugway/nand-to-tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/grugway/nand-to-tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/grugway/nand-to-tetris/languages", + "stargazers_url": "https://api.github.com/repos/grugway/nand-to-tetris/stargazers", + "contributors_url": "https://api.github.com/repos/grugway/nand-to-tetris/contributors", + "subscribers_url": "https://api.github.com/repos/grugway/nand-to-tetris/subscribers", + "subscription_url": "https://api.github.com/repos/grugway/nand-to-tetris/subscription", + "commits_url": "https://api.github.com/repos/grugway/nand-to-tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/grugway/nand-to-tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/grugway/nand-to-tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/grugway/nand-to-tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/grugway/nand-to-tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/grugway/nand-to-tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/grugway/nand-to-tetris/merges", + "archive_url": "https://api.github.com/repos/grugway/nand-to-tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/grugway/nand-to-tetris/downloads", + "issues_url": "https://api.github.com/repos/grugway/nand-to-tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/grugway/nand-to-tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/grugway/nand-to-tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/grugway/nand-to-tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/grugway/nand-to-tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/grugway/nand-to-tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/grugway/nand-to-tetris/deployments", + "created_at": "2016-02-02T19:47:48Z", + "updated_at": "2016-02-05T08:57:03Z", + "pushed_at": "2016-02-09T07:57:22Z", + "git_url": "git://github.com/grugway/nand-to-tetris.git", + "ssh_url": "git@github.com:grugway/nand-to-tetris.git", + "clone_url": "https://github.com/grugway/nand-to-tetris.git", + "svn_url": "https://github.com/grugway/nand-to-tetris", + "homepage": null, + "size": 64709, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 52996494, + "name": "Nand2Tetris", + "full_name": "cgalbiati/Nand2Tetris", + "owner": { + "login": "cgalbiati", + "id": 12814449, + "avatar_url": "https://avatars.githubusercontent.com/u/12814449?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cgalbiati", + "html_url": "https://github.com/cgalbiati", + "followers_url": "https://api.github.com/users/cgalbiati/followers", + "following_url": "https://api.github.com/users/cgalbiati/following{/other_user}", + "gists_url": "https://api.github.com/users/cgalbiati/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cgalbiati/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cgalbiati/subscriptions", + "organizations_url": "https://api.github.com/users/cgalbiati/orgs", + "repos_url": "https://api.github.com/users/cgalbiati/repos", + "events_url": "https://api.github.com/users/cgalbiati/events{/privacy}", + "received_events_url": "https://api.github.com/users/cgalbiati/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cgalbiati/Nand2Tetris", + "description": "Repository of my work for \"The Elements of Computing Systems\"", + "fork": false, + "url": "https://api.github.com/repos/cgalbiati/Nand2Tetris", + "forks_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/cgalbiati/Nand2Tetris/deployments", + "created_at": "2016-03-02T21:07:01Z", + "updated_at": "2016-04-23T03:32:50Z", + "pushed_at": "2016-04-12T01:27:51Z", + "git_url": "git://github.com/cgalbiati/Nand2Tetris.git", + "ssh_url": "git@github.com:cgalbiati/Nand2Tetris.git", + "clone_url": "https://github.com/cgalbiati/Nand2Tetris.git", + "svn_url": "https://github.com/cgalbiati/Nand2Tetris", + "homepage": "", + "size": 527, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 38170270, + "name": "Nand2Tetris", + "full_name": "Kourchenko/Nand2Tetris", + "owner": { + "login": "Kourchenko", + "id": 5885241, + "avatar_url": "https://avatars.githubusercontent.com/u/5885241?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Kourchenko", + "html_url": "https://github.com/Kourchenko", + "followers_url": "https://api.github.com/users/Kourchenko/followers", + "following_url": "https://api.github.com/users/Kourchenko/following{/other_user}", + "gists_url": "https://api.github.com/users/Kourchenko/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Kourchenko/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Kourchenko/subscriptions", + "organizations_url": "https://api.github.com/users/Kourchenko/orgs", + "repos_url": "https://api.github.com/users/Kourchenko/repos", + "events_url": "https://api.github.com/users/Kourchenko/events{/privacy}", + "received_events_url": "https://api.github.com/users/Kourchenko/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Kourchenko/Nand2Tetris", + "description": "Logic Gates for Toy-Compiler: JackCompiler", + "fork": false, + "url": "https://api.github.com/repos/Kourchenko/Nand2Tetris", + "forks_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Kourchenko/Nand2Tetris/deployments", + "created_at": "2015-06-27T18:15:41Z", + "updated_at": "2016-04-29T06:31:19Z", + "pushed_at": "2015-12-16T23:22:43Z", + "git_url": "git://github.com/Kourchenko/Nand2Tetris.git", + "ssh_url": "git@github.com:Kourchenko/Nand2Tetris.git", + "clone_url": "https://github.com/Kourchenko/Nand2Tetris.git", + "svn_url": "https://github.com/Kourchenko/Nand2Tetris", + "homepage": "", + "size": 545, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 36626983, + "name": "n2t-hack-assember", + "full_name": "werelax/n2t-hack-assember", + "owner": { + "login": "werelax", + "id": 774672, + "avatar_url": "https://avatars.githubusercontent.com/u/774672?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/werelax", + "html_url": "https://github.com/werelax", + "followers_url": "https://api.github.com/users/werelax/followers", + "following_url": "https://api.github.com/users/werelax/following{/other_user}", + "gists_url": "https://api.github.com/users/werelax/gists{/gist_id}", + "starred_url": "https://api.github.com/users/werelax/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/werelax/subscriptions", + "organizations_url": "https://api.github.com/users/werelax/orgs", + "repos_url": "https://api.github.com/users/werelax/repos", + "events_url": "https://api.github.com/users/werelax/events{/privacy}", + "received_events_url": "https://api.github.com/users/werelax/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/werelax/n2t-hack-assember", + "description": "Assembler for the simple symbolic language of the \"Hack\" computer defined in the Nand 2 Tetris course from coursera.com. In Emacs Lisp :)", + "fork": false, + "url": "https://api.github.com/repos/werelax/n2t-hack-assember", + "forks_url": "https://api.github.com/repos/werelax/n2t-hack-assember/forks", + "keys_url": "https://api.github.com/repos/werelax/n2t-hack-assember/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/werelax/n2t-hack-assember/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/werelax/n2t-hack-assember/teams", + "hooks_url": "https://api.github.com/repos/werelax/n2t-hack-assember/hooks", + "issue_events_url": "https://api.github.com/repos/werelax/n2t-hack-assember/issues/events{/number}", + "events_url": "https://api.github.com/repos/werelax/n2t-hack-assember/events", + "assignees_url": "https://api.github.com/repos/werelax/n2t-hack-assember/assignees{/user}", + "branches_url": "https://api.github.com/repos/werelax/n2t-hack-assember/branches{/branch}", + "tags_url": "https://api.github.com/repos/werelax/n2t-hack-assember/tags", + "blobs_url": "https://api.github.com/repos/werelax/n2t-hack-assember/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/werelax/n2t-hack-assember/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/werelax/n2t-hack-assember/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/werelax/n2t-hack-assember/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/werelax/n2t-hack-assember/statuses/{sha}", + "languages_url": "https://api.github.com/repos/werelax/n2t-hack-assember/languages", + "stargazers_url": "https://api.github.com/repos/werelax/n2t-hack-assember/stargazers", + "contributors_url": "https://api.github.com/repos/werelax/n2t-hack-assember/contributors", + "subscribers_url": "https://api.github.com/repos/werelax/n2t-hack-assember/subscribers", + "subscription_url": "https://api.github.com/repos/werelax/n2t-hack-assember/subscription", + "commits_url": "https://api.github.com/repos/werelax/n2t-hack-assember/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/werelax/n2t-hack-assember/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/werelax/n2t-hack-assember/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/werelax/n2t-hack-assember/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/werelax/n2t-hack-assember/contents/{+path}", + "compare_url": "https://api.github.com/repos/werelax/n2t-hack-assember/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/werelax/n2t-hack-assember/merges", + "archive_url": "https://api.github.com/repos/werelax/n2t-hack-assember/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/werelax/n2t-hack-assember/downloads", + "issues_url": "https://api.github.com/repos/werelax/n2t-hack-assember/issues{/number}", + "pulls_url": "https://api.github.com/repos/werelax/n2t-hack-assember/pulls{/number}", + "milestones_url": "https://api.github.com/repos/werelax/n2t-hack-assember/milestones{/number}", + "notifications_url": "https://api.github.com/repos/werelax/n2t-hack-assember/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/werelax/n2t-hack-assember/labels{/name}", + "releases_url": "https://api.github.com/repos/werelax/n2t-hack-assember/releases{/id}", + "deployments_url": "https://api.github.com/repos/werelax/n2t-hack-assember/deployments", + "created_at": "2015-05-31T23:32:07Z", + "updated_at": "2015-06-01T12:41:27Z", + "pushed_at": "2015-05-31T23:33:12Z", + "git_url": "git://github.com/werelax/n2t-hack-assember.git", + "ssh_url": "git@github.com:werelax/n2t-hack-assember.git", + "clone_url": "https://github.com/werelax/n2t-hack-assember.git", + "svn_url": "https://github.com/werelax/n2t-hack-assember", + "homepage": null, + "size": 164, + "stargazers_count": 1, + "watchers_count": 1, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master", + "score": 2.5641851 + }, + { + "id": 34019086, + "name": "Tetris", + "full_name": "talbor49/Tetris", + "owner": { + "login": "talbor49", + "id": 9658850, + "avatar_url": "https://avatars.githubusercontent.com/u/9658850?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/talbor49", + "html_url": "https://github.com/talbor49", + "followers_url": "https://api.github.com/users/talbor49/followers", + "following_url": "https://api.github.com/users/talbor49/following{/other_user}", + "gists_url": "https://api.github.com/users/talbor49/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talbor49/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talbor49/subscriptions", + "organizations_url": "https://api.github.com/users/talbor49/orgs", + "repos_url": "https://api.github.com/users/talbor49/repos", + "events_url": "https://api.github.com/users/talbor49/events{/privacy}", + "received_events_url": "https://api.github.com/users/talbor49/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/talbor49/Tetris", + "description": "\"Tetris\" game clone written completely in 32 bit assembly with the Windows 32 API", + "fork": false, + "url": "https://api.github.com/repos/talbor49/Tetris", + "forks_url": "https://api.github.com/repos/talbor49/Tetris/forks", + "keys_url": "https://api.github.com/repos/talbor49/Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/talbor49/Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/talbor49/Tetris/teams", + "hooks_url": "https://api.github.com/repos/talbor49/Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/talbor49/Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/talbor49/Tetris/events", + "assignees_url": "https://api.github.com/repos/talbor49/Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/talbor49/Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/talbor49/Tetris/tags", + "blobs_url": "https://api.github.com/repos/talbor49/Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/talbor49/Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/talbor49/Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/talbor49/Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/talbor49/Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/talbor49/Tetris/languages", + "stargazers_url": "https://api.github.com/repos/talbor49/Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/talbor49/Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/talbor49/Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/talbor49/Tetris/subscription", + "commits_url": "https://api.github.com/repos/talbor49/Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/talbor49/Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/talbor49/Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/talbor49/Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/talbor49/Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/talbor49/Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/talbor49/Tetris/merges", + "archive_url": "https://api.github.com/repos/talbor49/Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/talbor49/Tetris/downloads", + "issues_url": "https://api.github.com/repos/talbor49/Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/talbor49/Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/talbor49/Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/talbor49/Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/talbor49/Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/talbor49/Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/talbor49/Tetris/deployments", + "created_at": "2015-04-15T21:16:12Z", + "updated_at": "2015-05-29T17:20:04Z", + "pushed_at": "2015-06-09T21:41:06Z", + "git_url": "git://github.com/talbor49/Tetris.git", + "ssh_url": "git@github.com:talbor49/Tetris.git", + "clone_url": "https://github.com/talbor49/Tetris.git", + "svn_url": "https://github.com/talbor49/Tetris", + "homepage": null, + "size": 158152, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 9.48042 + }, + { + "id": 48014686, + "name": "Tetris", + "full_name": "Mashakal/Tetris", + "owner": { + "login": "Mashakal", + "id": 11655107, + "avatar_url": "https://avatars.githubusercontent.com/u/11655107?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Mashakal", + "html_url": "https://github.com/Mashakal", + "followers_url": "https://api.github.com/users/Mashakal/followers", + "following_url": "https://api.github.com/users/Mashakal/following{/other_user}", + "gists_url": "https://api.github.com/users/Mashakal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mashakal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mashakal/subscriptions", + "organizations_url": "https://api.github.com/users/Mashakal/orgs", + "repos_url": "https://api.github.com/users/Mashakal/repos", + "events_url": "https://api.github.com/users/Mashakal/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mashakal/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Mashakal/Tetris", + "description": "Tetris - 16 bit x86 Assembly style. I actually converted this code into an OS and have it saved on a thumb-drive.", + "fork": false, + "url": "https://api.github.com/repos/Mashakal/Tetris", + "forks_url": "https://api.github.com/repos/Mashakal/Tetris/forks", + "keys_url": "https://api.github.com/repos/Mashakal/Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Mashakal/Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Mashakal/Tetris/teams", + "hooks_url": "https://api.github.com/repos/Mashakal/Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Mashakal/Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Mashakal/Tetris/events", + "assignees_url": "https://api.github.com/repos/Mashakal/Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Mashakal/Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Mashakal/Tetris/tags", + "blobs_url": "https://api.github.com/repos/Mashakal/Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Mashakal/Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Mashakal/Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Mashakal/Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Mashakal/Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Mashakal/Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Mashakal/Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Mashakal/Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Mashakal/Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Mashakal/Tetris/subscription", + "commits_url": "https://api.github.com/repos/Mashakal/Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Mashakal/Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Mashakal/Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Mashakal/Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Mashakal/Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Mashakal/Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Mashakal/Tetris/merges", + "archive_url": "https://api.github.com/repos/Mashakal/Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Mashakal/Tetris/downloads", + "issues_url": "https://api.github.com/repos/Mashakal/Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Mashakal/Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Mashakal/Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Mashakal/Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Mashakal/Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Mashakal/Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Mashakal/Tetris/deployments", + "created_at": "2015-12-15T02:31:35Z", + "updated_at": "2015-12-15T02:40:09Z", + "pushed_at": "2015-12-15T02:40:08Z", + "git_url": "git://github.com/Mashakal/Tetris.git", + "ssh_url": "git@github.com:Mashakal/Tetris.git", + "clone_url": "https://github.com/Mashakal/Tetris.git", + "svn_url": "https://github.com/Mashakal/Tetris", + "homepage": null, + "size": 6, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 9.480347 + }, + { + "id": 59409127, + "name": "tetris", + "full_name": "SvalovaNastya/tetris", + "owner": { + "login": "SvalovaNastya", + "id": 6783533, + "avatar_url": "https://avatars.githubusercontent.com/u/6783533?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/SvalovaNastya", + "html_url": "https://github.com/SvalovaNastya", + "followers_url": "https://api.github.com/users/SvalovaNastya/followers", + "following_url": "https://api.github.com/users/SvalovaNastya/following{/other_user}", + "gists_url": "https://api.github.com/users/SvalovaNastya/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SvalovaNastya/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SvalovaNastya/subscriptions", + "organizations_url": "https://api.github.com/users/SvalovaNastya/orgs", + "repos_url": "https://api.github.com/users/SvalovaNastya/repos", + "events_url": "https://api.github.com/users/SvalovaNastya/events{/privacy}", + "received_events_url": "https://api.github.com/users/SvalovaNastya/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/SvalovaNastya/tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/SvalovaNastya/tetris", + "forks_url": "https://api.github.com/repos/SvalovaNastya/tetris/forks", + "keys_url": "https://api.github.com/repos/SvalovaNastya/tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SvalovaNastya/tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SvalovaNastya/tetris/teams", + "hooks_url": "https://api.github.com/repos/SvalovaNastya/tetris/hooks", + "issue_events_url": "https://api.github.com/repos/SvalovaNastya/tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/SvalovaNastya/tetris/events", + "assignees_url": "https://api.github.com/repos/SvalovaNastya/tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/SvalovaNastya/tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/SvalovaNastya/tetris/tags", + "blobs_url": "https://api.github.com/repos/SvalovaNastya/tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SvalovaNastya/tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SvalovaNastya/tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SvalovaNastya/tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SvalovaNastya/tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SvalovaNastya/tetris/languages", + "stargazers_url": "https://api.github.com/repos/SvalovaNastya/tetris/stargazers", + "contributors_url": "https://api.github.com/repos/SvalovaNastya/tetris/contributors", + "subscribers_url": "https://api.github.com/repos/SvalovaNastya/tetris/subscribers", + "subscription_url": "https://api.github.com/repos/SvalovaNastya/tetris/subscription", + "commits_url": "https://api.github.com/repos/SvalovaNastya/tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SvalovaNastya/tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SvalovaNastya/tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SvalovaNastya/tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SvalovaNastya/tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/SvalovaNastya/tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SvalovaNastya/tetris/merges", + "archive_url": "https://api.github.com/repos/SvalovaNastya/tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SvalovaNastya/tetris/downloads", + "issues_url": "https://api.github.com/repos/SvalovaNastya/tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/SvalovaNastya/tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SvalovaNastya/tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SvalovaNastya/tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SvalovaNastya/tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/SvalovaNastya/tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/SvalovaNastya/tetris/deployments", + "created_at": "2016-05-22T11:37:57Z", + "updated_at": "2016-05-22T11:40:44Z", + "pushed_at": "2016-05-25T14:20:13Z", + "git_url": "git://github.com/SvalovaNastya/tetris.git", + "ssh_url": "git@github.com:SvalovaNastya/tetris.git", + "clone_url": "https://github.com/SvalovaNastya/tetris.git", + "svn_url": "https://github.com/SvalovaNastya/tetris", + "homepage": null, + "size": 18, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 9.480347 + }, + { + "id": 18544226, + "name": "nand2tetris_projects", + "full_name": "xmunoz/nand2tetris_projects", + "owner": { + "login": "xmunoz", + "id": 1065196, + "avatar_url": "https://avatars.githubusercontent.com/u/1065196?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/xmunoz", + "html_url": "https://github.com/xmunoz", + "followers_url": "https://api.github.com/users/xmunoz/followers", + "following_url": "https://api.github.com/users/xmunoz/following{/other_user}", + "gists_url": "https://api.github.com/users/xmunoz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xmunoz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xmunoz/subscriptions", + "organizations_url": "https://api.github.com/users/xmunoz/orgs", + "repos_url": "https://api.github.com/users/xmunoz/repos", + "events_url": "https://api.github.com/users/xmunoz/events{/privacy}", + "received_events_url": "https://api.github.com/users/xmunoz/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/xmunoz/nand2tetris_projects", + "description": "My solutions to \"From nand to tetris\"", + "fork": false, + "url": "https://api.github.com/repos/xmunoz/nand2tetris_projects", + "forks_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/forks", + "keys_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/teams", + "hooks_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/hooks", + "issue_events_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/issues/events{/number}", + "events_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/events", + "assignees_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/assignees{/user}", + "branches_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/branches{/branch}", + "tags_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/tags", + "blobs_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/languages", + "stargazers_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/stargazers", + "contributors_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/contributors", + "subscribers_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/subscribers", + "subscription_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/subscription", + "commits_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/contents/{+path}", + "compare_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/merges", + "archive_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/downloads", + "issues_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/issues{/number}", + "pulls_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/labels{/name}", + "releases_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/releases{/id}", + "deployments_url": "https://api.github.com/repos/xmunoz/nand2tetris_projects/deployments", + "created_at": "2014-04-08T03:40:50Z", + "updated_at": "2014-06-15T16:47:09Z", + "pushed_at": "2014-06-15T16:47:10Z", + "git_url": "git://github.com/xmunoz/nand2tetris_projects.git", + "ssh_url": "git@github.com:xmunoz/nand2tetris_projects.git", + "clone_url": "https://github.com/xmunoz/nand2tetris_projects.git", + "svn_url": "https://github.com/xmunoz/nand2tetris_projects", + "homepage": null, + "size": 429, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 8.53125 + }, + { + "id": 18079172, + "name": "Assembly-Tetris", + "full_name": "Ethanb00/Assembly-Tetris", + "owner": { + "login": "Ethanb00", + "id": 5893479, + "avatar_url": "https://avatars.githubusercontent.com/u/5893479?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Ethanb00", + "html_url": "https://github.com/Ethanb00", + "followers_url": "https://api.github.com/users/Ethanb00/followers", + "following_url": "https://api.github.com/users/Ethanb00/following{/other_user}", + "gists_url": "https://api.github.com/users/Ethanb00/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Ethanb00/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Ethanb00/subscriptions", + "organizations_url": "https://api.github.com/users/Ethanb00/orgs", + "repos_url": "https://api.github.com/users/Ethanb00/repos", + "events_url": "https://api.github.com/users/Ethanb00/events{/privacy}", + "received_events_url": "https://api.github.com/users/Ethanb00/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Ethanb00/Assembly-Tetris", + "description": "x86 tasm assembly tetris", + "fork": false, + "url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris", + "forks_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/forks", + "keys_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/teams", + "hooks_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/events", + "assignees_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/tags", + "blobs_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/subscription", + "commits_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/merges", + "archive_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/downloads", + "issues_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Ethanb00/Assembly-Tetris/deployments", + "created_at": "2014-03-24T21:18:05Z", + "updated_at": "2014-03-24T21:25:59Z", + "pushed_at": "2014-03-24T21:25:56Z", + "git_url": "git://github.com/Ethanb00/Assembly-Tetris.git", + "ssh_url": "git@github.com:Ethanb00/Assembly-Tetris.git", + "clone_url": "https://github.com/Ethanb00/Assembly-Tetris.git", + "svn_url": "https://github.com/Ethanb00/Assembly-Tetris", + "homepage": null, + "size": 100, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.837827 + }, + { + "id": 52710196, + "name": "nand2tetris", + "full_name": "WLBF/nand2tetris", + "owner": { + "login": "WLBF", + "id": 11191570, + "avatar_url": "https://avatars.githubusercontent.com/u/11191570?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/WLBF", + "html_url": "https://github.com/WLBF", + "followers_url": "https://api.github.com/users/WLBF/followers", + "following_url": "https://api.github.com/users/WLBF/following{/other_user}", + "gists_url": "https://api.github.com/users/WLBF/gists{/gist_id}", + "starred_url": "https://api.github.com/users/WLBF/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/WLBF/subscriptions", + "organizations_url": "https://api.github.com/users/WLBF/orgs", + "repos_url": "https://api.github.com/users/WLBF/repos", + "events_url": "https://api.github.com/users/WLBF/events{/privacy}", + "received_events_url": "https://api.github.com/users/WLBF/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/WLBF/nand2tetris", + "description": "From Nand to Tetris", + "fork": false, + "url": "https://api.github.com/repos/WLBF/nand2tetris", + "forks_url": "https://api.github.com/repos/WLBF/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/WLBF/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/WLBF/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/WLBF/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/WLBF/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/WLBF/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/WLBF/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/WLBF/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/WLBF/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/WLBF/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/WLBF/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/WLBF/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/WLBF/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/WLBF/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/WLBF/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/WLBF/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/WLBF/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/WLBF/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/WLBF/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/WLBF/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/WLBF/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/WLBF/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/WLBF/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/WLBF/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/WLBF/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/WLBF/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/WLBF/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/WLBF/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/WLBF/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/WLBF/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/WLBF/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/WLBF/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/WLBF/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/WLBF/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/WLBF/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/WLBF/nand2tetris/deployments", + "created_at": "2016-02-28T07:33:04Z", + "updated_at": "2016-02-28T08:27:09Z", + "pushed_at": "2016-03-07T05:14:31Z", + "git_url": "git://github.com/WLBF/nand2tetris.git", + "ssh_url": "git@github.com:WLBF/nand2tetris.git", + "clone_url": "https://github.com/WLBF/nand2tetris.git", + "svn_url": "https://github.com/WLBF/nand2tetris", + "homepage": "", + "size": 515, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.837827 + }, + { + "id": 20493907, + "name": "HACK_COMPUTER_PLATFORM", + "full_name": "sschellhoff/HACK_COMPUTER_PLATFORM", + "owner": { + "login": "sschellhoff", + "id": 2566691, + "avatar_url": "https://avatars.githubusercontent.com/u/2566691?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sschellhoff", + "html_url": "https://github.com/sschellhoff", + "followers_url": "https://api.github.com/users/sschellhoff/followers", + "following_url": "https://api.github.com/users/sschellhoff/following{/other_user}", + "gists_url": "https://api.github.com/users/sschellhoff/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sschellhoff/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sschellhoff/subscriptions", + "organizations_url": "https://api.github.com/users/sschellhoff/orgs", + "repos_url": "https://api.github.com/users/sschellhoff/repos", + "events_url": "https://api.github.com/users/sschellhoff/events{/privacy}", + "received_events_url": "https://api.github.com/users/sschellhoff/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sschellhoff/HACK_COMPUTER_PLATFORM", + "description": "from nand to tetris", + "fork": false, + "url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM", + "forks_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/forks", + "keys_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/teams", + "hooks_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/hooks", + "issue_events_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/issues/events{/number}", + "events_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/events", + "assignees_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/assignees{/user}", + "branches_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/branches{/branch}", + "tags_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/tags", + "blobs_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/languages", + "stargazers_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/stargazers", + "contributors_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/contributors", + "subscribers_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/subscribers", + "subscription_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/subscription", + "commits_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/contents/{+path}", + "compare_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/merges", + "archive_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/downloads", + "issues_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/issues{/number}", + "pulls_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/labels{/name}", + "releases_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/releases{/id}", + "deployments_url": "https://api.github.com/repos/sschellhoff/HACK_COMPUTER_PLATFORM/deployments", + "created_at": "2014-06-04T18:00:03Z", + "updated_at": "2014-06-20T21:32:25Z", + "pushed_at": "2014-06-04T18:03:21Z", + "git_url": "git://github.com/sschellhoff/HACK_COMPUTER_PLATFORM.git", + "ssh_url": "git@github.com:sschellhoff/HACK_COMPUTER_PLATFORM.git", + "clone_url": "https://github.com/sschellhoff/HACK_COMPUTER_PLATFORM.git", + "svn_url": "https://github.com/sschellhoff/HACK_COMPUTER_PLATFORM", + "homepage": null, + "size": 3828, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.825 + }, + { + "id": 33284192, + "name": "Nand-to-Tetris", + "full_name": "daysls/Nand-to-Tetris", + "owner": { + "login": "daysls", + "id": 3493256, + "avatar_url": "https://avatars.githubusercontent.com/u/3493256?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/daysls", + "html_url": "https://github.com/daysls", + "followers_url": "https://api.github.com/users/daysls/followers", + "following_url": "https://api.github.com/users/daysls/following{/other_user}", + "gists_url": "https://api.github.com/users/daysls/gists{/gist_id}", + "starred_url": "https://api.github.com/users/daysls/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/daysls/subscriptions", + "organizations_url": "https://api.github.com/users/daysls/orgs", + "repos_url": "https://api.github.com/users/daysls/repos", + "events_url": "https://api.github.com/users/daysls/events{/privacy}", + "received_events_url": "https://api.github.com/users/daysls/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/daysls/Nand-to-Tetris", + "description": "Nand to Tetris ", + "fork": false, + "url": "https://api.github.com/repos/daysls/Nand-to-Tetris", + "forks_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/forks", + "keys_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/teams", + "hooks_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/events", + "assignees_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/tags", + "blobs_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/languages", + "stargazers_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/subscription", + "commits_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/merges", + "archive_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/downloads", + "issues_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/daysls/Nand-to-Tetris/deployments", + "created_at": "2015-04-02T02:13:01Z", + "updated_at": "2015-04-02T02:20:27Z", + "pushed_at": "2015-04-02T02:20:27Z", + "git_url": "git://github.com/daysls/Nand-to-Tetris.git", + "ssh_url": "git@github.com:daysls/Nand-to-Tetris.git", + "clone_url": "https://github.com/daysls/Nand-to-Tetris.git", + "svn_url": "https://github.com/daysls/Nand-to-Tetris", + "homepage": null, + "size": 276, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.825 + }, + { + "id": 49198081, + "name": "tetris-x86-assembly", + "full_name": "iastewar/tetris-x86-assembly", + "owner": { + "login": "iastewar", + "id": 9752092, + "avatar_url": "https://avatars.githubusercontent.com/u/9752092?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/iastewar", + "html_url": "https://github.com/iastewar", + "followers_url": "https://api.github.com/users/iastewar/followers", + "following_url": "https://api.github.com/users/iastewar/following{/other_user}", + "gists_url": "https://api.github.com/users/iastewar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/iastewar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/iastewar/subscriptions", + "organizations_url": "https://api.github.com/users/iastewar/orgs", + "repos_url": "https://api.github.com/users/iastewar/repos", + "events_url": "https://api.github.com/users/iastewar/events{/privacy}", + "received_events_url": "https://api.github.com/users/iastewar/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/iastewar/tetris-x86-assembly", + "description": "Tetris in x86 assembly", + "fork": false, + "url": "https://api.github.com/repos/iastewar/tetris-x86-assembly", + "forks_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/forks", + "keys_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/teams", + "hooks_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/hooks", + "issue_events_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/issues/events{/number}", + "events_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/events", + "assignees_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/assignees{/user}", + "branches_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/branches{/branch}", + "tags_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/tags", + "blobs_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/statuses/{sha}", + "languages_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/languages", + "stargazers_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/stargazers", + "contributors_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/contributors", + "subscribers_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/subscribers", + "subscription_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/subscription", + "commits_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/contents/{+path}", + "compare_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/merges", + "archive_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/downloads", + "issues_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/issues{/number}", + "pulls_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/pulls{/number}", + "milestones_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/milestones{/number}", + "notifications_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/labels{/name}", + "releases_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/releases{/id}", + "deployments_url": "https://api.github.com/repos/iastewar/tetris-x86-assembly/deployments", + "created_at": "2016-01-07T10:29:10Z", + "updated_at": "2016-01-07T10:30:58Z", + "pushed_at": "2016-01-07T10:30:57Z", + "git_url": "git://github.com/iastewar/tetris-x86-assembly.git", + "ssh_url": "git@github.com:iastewar/tetris-x86-assembly.git", + "clone_url": "https://github.com/iastewar/tetris-x86-assembly.git", + "svn_url": "https://github.com/iastewar/tetris-x86-assembly", + "homepage": null, + "size": 18, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.825 + }, + { + "id": 41434204, + "name": "CRCP2330", + "full_name": "eileenmguo/CRCP2330", + "owner": { + "login": "eileenmguo", + "id": 9022549, + "avatar_url": "https://avatars.githubusercontent.com/u/9022549?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/eileenmguo", + "html_url": "https://github.com/eileenmguo", + "followers_url": "https://api.github.com/users/eileenmguo/followers", + "following_url": "https://api.github.com/users/eileenmguo/following{/other_user}", + "gists_url": "https://api.github.com/users/eileenmguo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/eileenmguo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/eileenmguo/subscriptions", + "organizations_url": "https://api.github.com/users/eileenmguo/orgs", + "repos_url": "https://api.github.com/users/eileenmguo/repos", + "events_url": "https://api.github.com/users/eileenmguo/events{/privacy}", + "received_events_url": "https://api.github.com/users/eileenmguo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/eileenmguo/CRCP2330", + "description": "Nand To Tetris", + "fork": false, + "url": "https://api.github.com/repos/eileenmguo/CRCP2330", + "forks_url": "https://api.github.com/repos/eileenmguo/CRCP2330/forks", + "keys_url": "https://api.github.com/repos/eileenmguo/CRCP2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/eileenmguo/CRCP2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/eileenmguo/CRCP2330/teams", + "hooks_url": "https://api.github.com/repos/eileenmguo/CRCP2330/hooks", + "issue_events_url": "https://api.github.com/repos/eileenmguo/CRCP2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/eileenmguo/CRCP2330/events", + "assignees_url": "https://api.github.com/repos/eileenmguo/CRCP2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/eileenmguo/CRCP2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/eileenmguo/CRCP2330/tags", + "blobs_url": "https://api.github.com/repos/eileenmguo/CRCP2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/eileenmguo/CRCP2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/eileenmguo/CRCP2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/eileenmguo/CRCP2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/eileenmguo/CRCP2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/eileenmguo/CRCP2330/languages", + "stargazers_url": "https://api.github.com/repos/eileenmguo/CRCP2330/stargazers", + "contributors_url": "https://api.github.com/repos/eileenmguo/CRCP2330/contributors", + "subscribers_url": "https://api.github.com/repos/eileenmguo/CRCP2330/subscribers", + "subscription_url": "https://api.github.com/repos/eileenmguo/CRCP2330/subscription", + "commits_url": "https://api.github.com/repos/eileenmguo/CRCP2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/eileenmguo/CRCP2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/eileenmguo/CRCP2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/eileenmguo/CRCP2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/eileenmguo/CRCP2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/eileenmguo/CRCP2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/eileenmguo/CRCP2330/merges", + "archive_url": "https://api.github.com/repos/eileenmguo/CRCP2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/eileenmguo/CRCP2330/downloads", + "issues_url": "https://api.github.com/repos/eileenmguo/CRCP2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/eileenmguo/CRCP2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/eileenmguo/CRCP2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/eileenmguo/CRCP2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/eileenmguo/CRCP2330/labels{/name}", + "releases_url": "https://api.github.com/repos/eileenmguo/CRCP2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/eileenmguo/CRCP2330/deployments", + "created_at": "2015-08-26T15:39:58Z", + "updated_at": "2015-08-27T23:01:08Z", + "pushed_at": "2015-12-08T02:41:38Z", + "git_url": "git://github.com/eileenmguo/CRCP2330.git", + "ssh_url": "git@github.com:eileenmguo/CRCP2330.git", + "clone_url": "https://github.com/eileenmguo/CRCP2330.git", + "svn_url": "https://github.com/eileenmguo/CRCP2330", + "homepage": null, + "size": 192, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.825 + }, + { + "id": 41532803, + "name": "crcp2330", + "full_name": "maphaiyarath/crcp2330", + "owner": { + "login": "maphaiyarath", + "id": 13982222, + "avatar_url": "https://avatars.githubusercontent.com/u/13982222?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/maphaiyarath", + "html_url": "https://github.com/maphaiyarath", + "followers_url": "https://api.github.com/users/maphaiyarath/followers", + "following_url": "https://api.github.com/users/maphaiyarath/following{/other_user}", + "gists_url": "https://api.github.com/users/maphaiyarath/gists{/gist_id}", + "starred_url": "https://api.github.com/users/maphaiyarath/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/maphaiyarath/subscriptions", + "organizations_url": "https://api.github.com/users/maphaiyarath/orgs", + "repos_url": "https://api.github.com/users/maphaiyarath/repos", + "events_url": "https://api.github.com/users/maphaiyarath/events{/privacy}", + "received_events_url": "https://api.github.com/users/maphaiyarath/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/maphaiyarath/crcp2330", + "description": "nand to tetris", + "fork": false, + "url": "https://api.github.com/repos/maphaiyarath/crcp2330", + "forks_url": "https://api.github.com/repos/maphaiyarath/crcp2330/forks", + "keys_url": "https://api.github.com/repos/maphaiyarath/crcp2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/maphaiyarath/crcp2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/maphaiyarath/crcp2330/teams", + "hooks_url": "https://api.github.com/repos/maphaiyarath/crcp2330/hooks", + "issue_events_url": "https://api.github.com/repos/maphaiyarath/crcp2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/maphaiyarath/crcp2330/events", + "assignees_url": "https://api.github.com/repos/maphaiyarath/crcp2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/maphaiyarath/crcp2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/maphaiyarath/crcp2330/tags", + "blobs_url": "https://api.github.com/repos/maphaiyarath/crcp2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/maphaiyarath/crcp2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/maphaiyarath/crcp2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/maphaiyarath/crcp2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/maphaiyarath/crcp2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/maphaiyarath/crcp2330/languages", + "stargazers_url": "https://api.github.com/repos/maphaiyarath/crcp2330/stargazers", + "contributors_url": "https://api.github.com/repos/maphaiyarath/crcp2330/contributors", + "subscribers_url": "https://api.github.com/repos/maphaiyarath/crcp2330/subscribers", + "subscription_url": "https://api.github.com/repos/maphaiyarath/crcp2330/subscription", + "commits_url": "https://api.github.com/repos/maphaiyarath/crcp2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/maphaiyarath/crcp2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/maphaiyarath/crcp2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/maphaiyarath/crcp2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/maphaiyarath/crcp2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/maphaiyarath/crcp2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/maphaiyarath/crcp2330/merges", + "archive_url": "https://api.github.com/repos/maphaiyarath/crcp2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/maphaiyarath/crcp2330/downloads", + "issues_url": "https://api.github.com/repos/maphaiyarath/crcp2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/maphaiyarath/crcp2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/maphaiyarath/crcp2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/maphaiyarath/crcp2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/maphaiyarath/crcp2330/labels{/name}", + "releases_url": "https://api.github.com/repos/maphaiyarath/crcp2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/maphaiyarath/crcp2330/deployments", + "created_at": "2015-08-28T07:13:16Z", + "updated_at": "2015-08-28T07:24:34Z", + "pushed_at": "2015-12-11T09:21:41Z", + "git_url": "git://github.com/maphaiyarath/crcp2330.git", + "ssh_url": "git@github.com:maphaiyarath/crcp2330.git", + "clone_url": "https://github.com/maphaiyarath/crcp2330.git", + "svn_url": "https://github.com/maphaiyarath/crcp2330", + "homepage": null, + "size": 198, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.825 + }, + { + "id": 47229336, + "name": "n2t", + "full_name": "PhillipChaffee/n2t", + "owner": { + "login": "PhillipChaffee", + "id": 2183862, + "avatar_url": "https://avatars.githubusercontent.com/u/2183862?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/PhillipChaffee", + "html_url": "https://github.com/PhillipChaffee", + "followers_url": "https://api.github.com/users/PhillipChaffee/followers", + "following_url": "https://api.github.com/users/PhillipChaffee/following{/other_user}", + "gists_url": "https://api.github.com/users/PhillipChaffee/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PhillipChaffee/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PhillipChaffee/subscriptions", + "organizations_url": "https://api.github.com/users/PhillipChaffee/orgs", + "repos_url": "https://api.github.com/users/PhillipChaffee/repos", + "events_url": "https://api.github.com/users/PhillipChaffee/events{/privacy}", + "received_events_url": "https://api.github.com/users/PhillipChaffee/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/PhillipChaffee/n2t", + "description": "Nand 2 Tetris", + "fork": false, + "url": "https://api.github.com/repos/PhillipChaffee/n2t", + "forks_url": "https://api.github.com/repos/PhillipChaffee/n2t/forks", + "keys_url": "https://api.github.com/repos/PhillipChaffee/n2t/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/PhillipChaffee/n2t/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/PhillipChaffee/n2t/teams", + "hooks_url": "https://api.github.com/repos/PhillipChaffee/n2t/hooks", + "issue_events_url": "https://api.github.com/repos/PhillipChaffee/n2t/issues/events{/number}", + "events_url": "https://api.github.com/repos/PhillipChaffee/n2t/events", + "assignees_url": "https://api.github.com/repos/PhillipChaffee/n2t/assignees{/user}", + "branches_url": "https://api.github.com/repos/PhillipChaffee/n2t/branches{/branch}", + "tags_url": "https://api.github.com/repos/PhillipChaffee/n2t/tags", + "blobs_url": "https://api.github.com/repos/PhillipChaffee/n2t/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/PhillipChaffee/n2t/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/PhillipChaffee/n2t/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/PhillipChaffee/n2t/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/PhillipChaffee/n2t/statuses/{sha}", + "languages_url": "https://api.github.com/repos/PhillipChaffee/n2t/languages", + "stargazers_url": "https://api.github.com/repos/PhillipChaffee/n2t/stargazers", + "contributors_url": "https://api.github.com/repos/PhillipChaffee/n2t/contributors", + "subscribers_url": "https://api.github.com/repos/PhillipChaffee/n2t/subscribers", + "subscription_url": "https://api.github.com/repos/PhillipChaffee/n2t/subscription", + "commits_url": "https://api.github.com/repos/PhillipChaffee/n2t/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/PhillipChaffee/n2t/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/PhillipChaffee/n2t/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/PhillipChaffee/n2t/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/PhillipChaffee/n2t/contents/{+path}", + "compare_url": "https://api.github.com/repos/PhillipChaffee/n2t/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/PhillipChaffee/n2t/merges", + "archive_url": "https://api.github.com/repos/PhillipChaffee/n2t/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/PhillipChaffee/n2t/downloads", + "issues_url": "https://api.github.com/repos/PhillipChaffee/n2t/issues{/number}", + "pulls_url": "https://api.github.com/repos/PhillipChaffee/n2t/pulls{/number}", + "milestones_url": "https://api.github.com/repos/PhillipChaffee/n2t/milestones{/number}", + "notifications_url": "https://api.github.com/repos/PhillipChaffee/n2t/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/PhillipChaffee/n2t/labels{/name}", + "releases_url": "https://api.github.com/repos/PhillipChaffee/n2t/releases{/id}", + "deployments_url": "https://api.github.com/repos/PhillipChaffee/n2t/deployments", + "created_at": "2015-12-02T01:42:52Z", + "updated_at": "2016-01-11T20:46:54Z", + "pushed_at": "2016-06-01T15:09:13Z", + "git_url": "git://github.com/PhillipChaffee/n2t.git", + "ssh_url": "git@github.com:PhillipChaffee/n2t.git", + "clone_url": "https://github.com/PhillipChaffee/n2t.git", + "svn_url": "https://github.com/PhillipChaffee/n2t", + "homepage": "http://www.nand2tetris.org", + "size": 605, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.825 + }, + { + "id": 8762442, + "name": "TrashCompactor", + "full_name": "SpyhopSpring2013/TrashCompactor", + "owner": { + "login": "SpyhopSpring2013", + "id": 3858400, + "avatar_url": "https://avatars.githubusercontent.com/u/3858400?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/SpyhopSpring2013", + "html_url": "https://github.com/SpyhopSpring2013", + "followers_url": "https://api.github.com/users/SpyhopSpring2013/followers", + "following_url": "https://api.github.com/users/SpyhopSpring2013/following{/other_user}", + "gists_url": "https://api.github.com/users/SpyhopSpring2013/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpyhopSpring2013/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpyhopSpring2013/subscriptions", + "organizations_url": "https://api.github.com/users/SpyhopSpring2013/orgs", + "repos_url": "https://api.github.com/users/SpyhopSpring2013/repos", + "events_url": "https://api.github.com/users/SpyhopSpring2013/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpyhopSpring2013/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/SpyhopSpring2013/TrashCompactor", + "description": "Tetris-like Recycling Game", + "fork": false, + "url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor", + "forks_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/forks", + "keys_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/teams", + "hooks_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/hooks", + "issue_events_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/issues/events{/number}", + "events_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/events", + "assignees_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/assignees{/user}", + "branches_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/branches{/branch}", + "tags_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/tags", + "blobs_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/languages", + "stargazers_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/stargazers", + "contributors_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/contributors", + "subscribers_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/subscribers", + "subscription_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/subscription", + "commits_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/contents/{+path}", + "compare_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/merges", + "archive_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/downloads", + "issues_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/issues{/number}", + "pulls_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/labels{/name}", + "releases_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/releases{/id}", + "deployments_url": "https://api.github.com/repos/SpyhopSpring2013/TrashCompactor/deployments", + "created_at": "2013-03-13T21:58:23Z", + "updated_at": "2013-12-09T11:19:27Z", + "pushed_at": "2013-05-31T15:38:06Z", + "git_url": "git://github.com/SpyhopSpring2013/TrashCompactor.git", + "ssh_url": "git@github.com:SpyhopSpring2013/TrashCompactor.git", + "clone_url": "https://github.com/SpyhopSpring2013/TrashCompactor.git", + "svn_url": "https://github.com/SpyhopSpring2013/TrashCompactor", + "homepage": null, + "size": 242108, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.783053 + }, + { + "id": 35029495, + "name": "nand2tetris", + "full_name": "boringmachine/nand2tetris", + "owner": { + "login": "boringmachine", + "id": 2806941, + "avatar_url": "https://avatars.githubusercontent.com/u/2806941?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/boringmachine", + "html_url": "https://github.com/boringmachine", + "followers_url": "https://api.github.com/users/boringmachine/followers", + "following_url": "https://api.github.com/users/boringmachine/following{/other_user}", + "gists_url": "https://api.github.com/users/boringmachine/gists{/gist_id}", + "starred_url": "https://api.github.com/users/boringmachine/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/boringmachine/subscriptions", + "organizations_url": "https://api.github.com/users/boringmachine/orgs", + "repos_url": "https://api.github.com/users/boringmachine/repos", + "events_url": "https://api.github.com/users/boringmachine/events{/privacy}", + "received_events_url": "https://api.github.com/users/boringmachine/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/boringmachine/nand2tetris", + "description": "nand 2 tetris practicing", + "fork": false, + "url": "https://api.github.com/repos/boringmachine/nand2tetris", + "forks_url": "https://api.github.com/repos/boringmachine/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/boringmachine/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/boringmachine/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/boringmachine/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/boringmachine/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/boringmachine/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/boringmachine/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/boringmachine/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/boringmachine/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/boringmachine/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/boringmachine/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/boringmachine/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/boringmachine/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/boringmachine/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/boringmachine/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/boringmachine/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/boringmachine/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/boringmachine/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/boringmachine/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/boringmachine/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/boringmachine/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/boringmachine/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/boringmachine/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/boringmachine/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/boringmachine/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/boringmachine/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/boringmachine/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/boringmachine/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/boringmachine/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/boringmachine/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/boringmachine/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/boringmachine/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/boringmachine/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/boringmachine/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/boringmachine/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/boringmachine/nand2tetris/deployments", + "created_at": "2015-05-04T10:51:16Z", + "updated_at": "2015-05-15T07:57:54Z", + "pushed_at": "2015-06-14T01:29:58Z", + "git_url": "git://github.com/boringmachine/nand2tetris.git", + "ssh_url": "git@github.com:boringmachine/nand2tetris.git", + "clone_url": "https://github.com/boringmachine/nand2tetris.git", + "svn_url": "https://github.com/boringmachine/nand2tetris", + "homepage": null, + "size": 13136, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.783053 + }, + { + "id": 51627305, + "name": "TheElementsOfComputingSystems", + "full_name": "ChaeOkay/TheElementsOfComputingSystems", + "owner": { + "login": "ChaeOkay", + "id": 3820966, + "avatar_url": "https://avatars.githubusercontent.com/u/3820966?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ChaeOkay", + "html_url": "https://github.com/ChaeOkay", + "followers_url": "https://api.github.com/users/ChaeOkay/followers", + "following_url": "https://api.github.com/users/ChaeOkay/following{/other_user}", + "gists_url": "https://api.github.com/users/ChaeOkay/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ChaeOkay/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ChaeOkay/subscriptions", + "organizations_url": "https://api.github.com/users/ChaeOkay/orgs", + "repos_url": "https://api.github.com/users/ChaeOkay/repos", + "events_url": "https://api.github.com/users/ChaeOkay/events{/privacy}", + "received_events_url": "https://api.github.com/users/ChaeOkay/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ChaeOkay/TheElementsOfComputingSystems", + "description": "Nand to Tetris Projects", + "fork": false, + "url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems", + "forks_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/forks", + "keys_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/teams", + "hooks_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/hooks", + "issue_events_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/issues/events{/number}", + "events_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/events", + "assignees_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/assignees{/user}", + "branches_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/branches{/branch}", + "tags_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/tags", + "blobs_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/languages", + "stargazers_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/stargazers", + "contributors_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/contributors", + "subscribers_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/subscribers", + "subscription_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/subscription", + "commits_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/contents/{+path}", + "compare_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/merges", + "archive_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/downloads", + "issues_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/issues{/number}", + "pulls_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/labels{/name}", + "releases_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/releases{/id}", + "deployments_url": "https://api.github.com/repos/ChaeOkay/TheElementsOfComputingSystems/deployments", + "created_at": "2016-02-13T01:40:35Z", + "updated_at": "2016-02-13T01:40:58Z", + "pushed_at": "2016-02-22T02:17:40Z", + "git_url": "git://github.com/ChaeOkay/TheElementsOfComputingSystems.git", + "ssh_url": "git@github.com:ChaeOkay/TheElementsOfComputingSystems.git", + "clone_url": "https://github.com/ChaeOkay/TheElementsOfComputingSystems.git", + "svn_url": "https://github.com/ChaeOkay/TheElementsOfComputingSystems", + "homepage": null, + "size": 516, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 6.783053 + }, + { + "id": 23557231, + "name": "nand2tetris", + "full_name": "ZenBowman/nand2tetris", + "owner": { + "login": "ZenBowman", + "id": 2371702, + "avatar_url": "https://avatars.githubusercontent.com/u/2371702?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ZenBowman", + "html_url": "https://github.com/ZenBowman", + "followers_url": "https://api.github.com/users/ZenBowman/followers", + "following_url": "https://api.github.com/users/ZenBowman/following{/other_user}", + "gists_url": "https://api.github.com/users/ZenBowman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ZenBowman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ZenBowman/subscriptions", + "organizations_url": "https://api.github.com/users/ZenBowman/orgs", + "repos_url": "https://api.github.com/users/ZenBowman/repos", + "events_url": "https://api.github.com/users/ZenBowman/events{/privacy}", + "received_events_url": "https://api.github.com/users/ZenBowman/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ZenBowman/nand2tetris", + "description": "Exercises from nand 2 tetris", + "fork": false, + "url": "https://api.github.com/repos/ZenBowman/nand2tetris", + "forks_url": "https://api.github.com/repos/ZenBowman/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ZenBowman/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ZenBowman/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ZenBowman/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ZenBowman/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ZenBowman/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ZenBowman/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ZenBowman/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ZenBowman/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ZenBowman/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ZenBowman/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ZenBowman/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ZenBowman/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ZenBowman/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ZenBowman/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ZenBowman/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ZenBowman/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ZenBowman/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ZenBowman/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ZenBowman/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ZenBowman/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ZenBowman/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ZenBowman/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ZenBowman/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ZenBowman/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ZenBowman/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ZenBowman/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ZenBowman/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ZenBowman/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ZenBowman/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ZenBowman/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ZenBowman/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ZenBowman/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ZenBowman/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ZenBowman/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ZenBowman/nand2tetris/deployments", + "created_at": "2014-09-01T22:13:41Z", + "updated_at": "2014-09-02T01:19:37Z", + "pushed_at": "2014-10-05T19:08:56Z", + "git_url": "git://github.com/ZenBowman/nand2tetris.git", + "ssh_url": "git@github.com:ZenBowman/nand2tetris.git", + "clone_url": "https://github.com/ZenBowman/nand2tetris.git", + "svn_url": "https://github.com/ZenBowman/nand2tetris", + "homepage": null, + "size": 432, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.971875 + }, + { + "id": 53755232, + "name": "nand2tetris", + "full_name": "jake-jake-jake/nand2tetris", + "owner": { + "login": "jake-jake-jake", + "id": 13736437, + "avatar_url": "https://avatars.githubusercontent.com/u/13736437?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jake-jake-jake", + "html_url": "https://github.com/jake-jake-jake", + "followers_url": "https://api.github.com/users/jake-jake-jake/followers", + "following_url": "https://api.github.com/users/jake-jake-jake/following{/other_user}", + "gists_url": "https://api.github.com/users/jake-jake-jake/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jake-jake-jake/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jake-jake-jake/subscriptions", + "organizations_url": "https://api.github.com/users/jake-jake-jake/orgs", + "repos_url": "https://api.github.com/users/jake-jake-jake/repos", + "events_url": "https://api.github.com/users/jake-jake-jake/events{/privacy}", + "received_events_url": "https://api.github.com/users/jake-jake-jake/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jake-jake-jake/nand2tetris", + "description": "Working through Nand 2 Tetris", + "fork": false, + "url": "https://api.github.com/repos/jake-jake-jake/nand2tetris", + "forks_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jake-jake-jake/nand2tetris/deployments", + "created_at": "2016-03-12T21:56:11Z", + "updated_at": "2016-03-12T22:00:38Z", + "pushed_at": "2016-03-12T22:00:33Z", + "git_url": "git://github.com/jake-jake-jake/nand2tetris.git", + "ssh_url": "git@github.com:jake-jake-jake/nand2tetris.git", + "clone_url": "https://github.com/jake-jake-jake/nand2tetris.git", + "svn_url": "https://github.com/jake-jake-jake/nand2tetris", + "homepage": null, + "size": 157, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.971875 + }, + { + "id": 59998741, + "name": "from-Nand-to-Tetris", + "full_name": "perplexedpigmy/from-Nand-to-Tetris", + "owner": { + "login": "perplexedpigmy", + "id": 9532454, + "avatar_url": "https://avatars.githubusercontent.com/u/9532454?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/perplexedpigmy", + "html_url": "https://github.com/perplexedpigmy", + "followers_url": "https://api.github.com/users/perplexedpigmy/followers", + "following_url": "https://api.github.com/users/perplexedpigmy/following{/other_user}", + "gists_url": "https://api.github.com/users/perplexedpigmy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/perplexedpigmy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/perplexedpigmy/subscriptions", + "organizations_url": "https://api.github.com/users/perplexedpigmy/orgs", + "repos_url": "https://api.github.com/users/perplexedpigmy/repos", + "events_url": "https://api.github.com/users/perplexedpigmy/events{/privacy}", + "received_events_url": "https://api.github.com/users/perplexedpigmy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/perplexedpigmy/from-Nand-to-Tetris", + "description": "Coursera - From Nand To Tetris ", + "fork": false, + "url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris", + "forks_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/forks", + "keys_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/teams", + "hooks_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/events", + "assignees_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/tags", + "blobs_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/languages", + "stargazers_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/subscription", + "commits_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/merges", + "archive_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/downloads", + "issues_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/perplexedpigmy/from-Nand-to-Tetris/deployments", + "created_at": "2016-05-30T09:42:39Z", + "updated_at": "2016-05-30T10:51:33Z", + "pushed_at": "2016-06-19T16:06:53Z", + "git_url": "git://github.com/perplexedpigmy/from-Nand-to-Tetris.git", + "ssh_url": "git@github.com:perplexedpigmy/from-Nand-to-Tetris.git", + "clone_url": "https://github.com/perplexedpigmy/from-Nand-to-Tetris.git", + "svn_url": "https://github.com/perplexedpigmy/from-Nand-to-Tetris", + "homepage": null, + "size": 508, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.971875 + }, + { + "id": 41434192, + "name": "crcp2330", + "full_name": "zbiehl/crcp2330", + "owner": { + "login": "zbiehl", + "id": 10563862, + "avatar_url": "https://avatars.githubusercontent.com/u/10563862?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/zbiehl", + "html_url": "https://github.com/zbiehl", + "followers_url": "https://api.github.com/users/zbiehl/followers", + "following_url": "https://api.github.com/users/zbiehl/following{/other_user}", + "gists_url": "https://api.github.com/users/zbiehl/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zbiehl/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zbiehl/subscriptions", + "organizations_url": "https://api.github.com/users/zbiehl/orgs", + "repos_url": "https://api.github.com/users/zbiehl/repos", + "events_url": "https://api.github.com/users/zbiehl/events{/privacy}", + "received_events_url": "https://api.github.com/users/zbiehl/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/zbiehl/crcp2330", + "description": "Nand-Tetris work (CRCP 2330)", + "fork": false, + "url": "https://api.github.com/repos/zbiehl/crcp2330", + "forks_url": "https://api.github.com/repos/zbiehl/crcp2330/forks", + "keys_url": "https://api.github.com/repos/zbiehl/crcp2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/zbiehl/crcp2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/zbiehl/crcp2330/teams", + "hooks_url": "https://api.github.com/repos/zbiehl/crcp2330/hooks", + "issue_events_url": "https://api.github.com/repos/zbiehl/crcp2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/zbiehl/crcp2330/events", + "assignees_url": "https://api.github.com/repos/zbiehl/crcp2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/zbiehl/crcp2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/zbiehl/crcp2330/tags", + "blobs_url": "https://api.github.com/repos/zbiehl/crcp2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/zbiehl/crcp2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/zbiehl/crcp2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/zbiehl/crcp2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/zbiehl/crcp2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/zbiehl/crcp2330/languages", + "stargazers_url": "https://api.github.com/repos/zbiehl/crcp2330/stargazers", + "contributors_url": "https://api.github.com/repos/zbiehl/crcp2330/contributors", + "subscribers_url": "https://api.github.com/repos/zbiehl/crcp2330/subscribers", + "subscription_url": "https://api.github.com/repos/zbiehl/crcp2330/subscription", + "commits_url": "https://api.github.com/repos/zbiehl/crcp2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/zbiehl/crcp2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/zbiehl/crcp2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/zbiehl/crcp2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/zbiehl/crcp2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/zbiehl/crcp2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/zbiehl/crcp2330/merges", + "archive_url": "https://api.github.com/repos/zbiehl/crcp2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/zbiehl/crcp2330/downloads", + "issues_url": "https://api.github.com/repos/zbiehl/crcp2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/zbiehl/crcp2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/zbiehl/crcp2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/zbiehl/crcp2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/zbiehl/crcp2330/labels{/name}", + "releases_url": "https://api.github.com/repos/zbiehl/crcp2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/zbiehl/crcp2330/deployments", + "created_at": "2015-08-26T15:39:54Z", + "updated_at": "2015-08-28T14:57:15Z", + "pushed_at": "2015-12-12T16:52:17Z", + "git_url": "git://github.com/zbiehl/crcp2330.git", + "ssh_url": "git@github.com:zbiehl/crcp2330.git", + "clone_url": "https://github.com/zbiehl/crcp2330.git", + "svn_url": "https://github.com/zbiehl/crcp2330", + "homepage": null, + "size": 179, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.958142 + }, + { + "id": 41434202, + "name": "crcp2330", + "full_name": "esposama/crcp2330", + "owner": { + "login": "esposama", + "id": 13947981, + "avatar_url": "https://avatars.githubusercontent.com/u/13947981?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/esposama", + "html_url": "https://github.com/esposama", + "followers_url": "https://api.github.com/users/esposama/followers", + "following_url": "https://api.github.com/users/esposama/following{/other_user}", + "gists_url": "https://api.github.com/users/esposama/gists{/gist_id}", + "starred_url": "https://api.github.com/users/esposama/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/esposama/subscriptions", + "organizations_url": "https://api.github.com/users/esposama/orgs", + "repos_url": "https://api.github.com/users/esposama/repos", + "events_url": "https://api.github.com/users/esposama/events{/privacy}", + "received_events_url": "https://api.github.com/users/esposama/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/esposama/crcp2330", + "description": "Work for Nand to Tetris ", + "fork": false, + "url": "https://api.github.com/repos/esposama/crcp2330", + "forks_url": "https://api.github.com/repos/esposama/crcp2330/forks", + "keys_url": "https://api.github.com/repos/esposama/crcp2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/esposama/crcp2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/esposama/crcp2330/teams", + "hooks_url": "https://api.github.com/repos/esposama/crcp2330/hooks", + "issue_events_url": "https://api.github.com/repos/esposama/crcp2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/esposama/crcp2330/events", + "assignees_url": "https://api.github.com/repos/esposama/crcp2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/esposama/crcp2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/esposama/crcp2330/tags", + "blobs_url": "https://api.github.com/repos/esposama/crcp2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/esposama/crcp2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/esposama/crcp2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/esposama/crcp2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/esposama/crcp2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/esposama/crcp2330/languages", + "stargazers_url": "https://api.github.com/repos/esposama/crcp2330/stargazers", + "contributors_url": "https://api.github.com/repos/esposama/crcp2330/contributors", + "subscribers_url": "https://api.github.com/repos/esposama/crcp2330/subscribers", + "subscription_url": "https://api.github.com/repos/esposama/crcp2330/subscription", + "commits_url": "https://api.github.com/repos/esposama/crcp2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/esposama/crcp2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/esposama/crcp2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/esposama/crcp2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/esposama/crcp2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/esposama/crcp2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/esposama/crcp2330/merges", + "archive_url": "https://api.github.com/repos/esposama/crcp2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/esposama/crcp2330/downloads", + "issues_url": "https://api.github.com/repos/esposama/crcp2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/esposama/crcp2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/esposama/crcp2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/esposama/crcp2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/esposama/crcp2330/labels{/name}", + "releases_url": "https://api.github.com/repos/esposama/crcp2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/esposama/crcp2330/deployments", + "created_at": "2015-08-26T15:39:57Z", + "updated_at": "2015-08-28T14:52:47Z", + "pushed_at": "2015-12-10T20:41:58Z", + "git_url": "git://github.com/esposama/crcp2330.git", + "ssh_url": "git@github.com:esposama/crcp2330.git", + "clone_url": "https://github.com/esposama/crcp2330.git", + "svn_url": "https://github.com/esposama/crcp2330", + "homepage": null, + "size": 223, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.958142 + }, + { + "id": 41434237, + "name": "CRCP2330", + "full_name": "CSAR101/CRCP2330", + "owner": { + "login": "CSAR101", + "id": 6454434, + "avatar_url": "https://avatars.githubusercontent.com/u/6454434?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/CSAR101", + "html_url": "https://github.com/CSAR101", + "followers_url": "https://api.github.com/users/CSAR101/followers", + "following_url": "https://api.github.com/users/CSAR101/following{/other_user}", + "gists_url": "https://api.github.com/users/CSAR101/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CSAR101/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CSAR101/subscriptions", + "organizations_url": "https://api.github.com/users/CSAR101/orgs", + "repos_url": "https://api.github.com/users/CSAR101/repos", + "events_url": "https://api.github.com/users/CSAR101/events{/privacy}", + "received_events_url": "https://api.github.com/users/CSAR101/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/CSAR101/CRCP2330", + "description": "Projects for NAND To Tetris", + "fork": false, + "url": "https://api.github.com/repos/CSAR101/CRCP2330", + "forks_url": "https://api.github.com/repos/CSAR101/CRCP2330/forks", + "keys_url": "https://api.github.com/repos/CSAR101/CRCP2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/CSAR101/CRCP2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/CSAR101/CRCP2330/teams", + "hooks_url": "https://api.github.com/repos/CSAR101/CRCP2330/hooks", + "issue_events_url": "https://api.github.com/repos/CSAR101/CRCP2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/CSAR101/CRCP2330/events", + "assignees_url": "https://api.github.com/repos/CSAR101/CRCP2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/CSAR101/CRCP2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/CSAR101/CRCP2330/tags", + "blobs_url": "https://api.github.com/repos/CSAR101/CRCP2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/CSAR101/CRCP2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/CSAR101/CRCP2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/CSAR101/CRCP2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/CSAR101/CRCP2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/CSAR101/CRCP2330/languages", + "stargazers_url": "https://api.github.com/repos/CSAR101/CRCP2330/stargazers", + "contributors_url": "https://api.github.com/repos/CSAR101/CRCP2330/contributors", + "subscribers_url": "https://api.github.com/repos/CSAR101/CRCP2330/subscribers", + "subscription_url": "https://api.github.com/repos/CSAR101/CRCP2330/subscription", + "commits_url": "https://api.github.com/repos/CSAR101/CRCP2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/CSAR101/CRCP2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/CSAR101/CRCP2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/CSAR101/CRCP2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/CSAR101/CRCP2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/CSAR101/CRCP2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/CSAR101/CRCP2330/merges", + "archive_url": "https://api.github.com/repos/CSAR101/CRCP2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/CSAR101/CRCP2330/downloads", + "issues_url": "https://api.github.com/repos/CSAR101/CRCP2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/CSAR101/CRCP2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/CSAR101/CRCP2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/CSAR101/CRCP2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/CSAR101/CRCP2330/labels{/name}", + "releases_url": "https://api.github.com/repos/CSAR101/CRCP2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/CSAR101/CRCP2330/deployments", + "created_at": "2015-08-26T15:40:44Z", + "updated_at": "2015-08-31T14:49:51Z", + "pushed_at": "2015-12-11T08:52:59Z", + "git_url": "git://github.com/CSAR101/CRCP2330.git", + "ssh_url": "git@github.com:CSAR101/CRCP2330.git", + "clone_url": "https://github.com/CSAR101/CRCP2330.git", + "svn_url": "https://github.com/CSAR101/CRCP2330", + "homepage": null, + "size": 192, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.958142 + }, + { + "id": 33399954, + "name": "nand2tetris-project", + "full_name": "takeisa/nand2tetris-project", + "owner": { + "login": "takeisa", + "id": 1157801, + "avatar_url": "https://avatars.githubusercontent.com/u/1157801?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/takeisa", + "html_url": "https://github.com/takeisa", + "followers_url": "https://api.github.com/users/takeisa/followers", + "following_url": "https://api.github.com/users/takeisa/following{/other_user}", + "gists_url": "https://api.github.com/users/takeisa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/takeisa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/takeisa/subscriptions", + "organizations_url": "https://api.github.com/users/takeisa/orgs", + "repos_url": "https://api.github.com/users/takeisa/repos", + "events_url": "https://api.github.com/users/takeisa/events{/privacy}", + "received_events_url": "https://api.github.com/users/takeisa/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/takeisa/nand2tetris-project", + "description": "NAND to Tetris project files", + "fork": false, + "url": "https://api.github.com/repos/takeisa/nand2tetris-project", + "forks_url": "https://api.github.com/repos/takeisa/nand2tetris-project/forks", + "keys_url": "https://api.github.com/repos/takeisa/nand2tetris-project/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/takeisa/nand2tetris-project/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/takeisa/nand2tetris-project/teams", + "hooks_url": "https://api.github.com/repos/takeisa/nand2tetris-project/hooks", + "issue_events_url": "https://api.github.com/repos/takeisa/nand2tetris-project/issues/events{/number}", + "events_url": "https://api.github.com/repos/takeisa/nand2tetris-project/events", + "assignees_url": "https://api.github.com/repos/takeisa/nand2tetris-project/assignees{/user}", + "branches_url": "https://api.github.com/repos/takeisa/nand2tetris-project/branches{/branch}", + "tags_url": "https://api.github.com/repos/takeisa/nand2tetris-project/tags", + "blobs_url": "https://api.github.com/repos/takeisa/nand2tetris-project/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/takeisa/nand2tetris-project/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/takeisa/nand2tetris-project/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/takeisa/nand2tetris-project/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/takeisa/nand2tetris-project/statuses/{sha}", + "languages_url": "https://api.github.com/repos/takeisa/nand2tetris-project/languages", + "stargazers_url": "https://api.github.com/repos/takeisa/nand2tetris-project/stargazers", + "contributors_url": "https://api.github.com/repos/takeisa/nand2tetris-project/contributors", + "subscribers_url": "https://api.github.com/repos/takeisa/nand2tetris-project/subscribers", + "subscription_url": "https://api.github.com/repos/takeisa/nand2tetris-project/subscription", + "commits_url": "https://api.github.com/repos/takeisa/nand2tetris-project/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/takeisa/nand2tetris-project/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/takeisa/nand2tetris-project/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/takeisa/nand2tetris-project/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/takeisa/nand2tetris-project/contents/{+path}", + "compare_url": "https://api.github.com/repos/takeisa/nand2tetris-project/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/takeisa/nand2tetris-project/merges", + "archive_url": "https://api.github.com/repos/takeisa/nand2tetris-project/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/takeisa/nand2tetris-project/downloads", + "issues_url": "https://api.github.com/repos/takeisa/nand2tetris-project/issues{/number}", + "pulls_url": "https://api.github.com/repos/takeisa/nand2tetris-project/pulls{/number}", + "milestones_url": "https://api.github.com/repos/takeisa/nand2tetris-project/milestones{/number}", + "notifications_url": "https://api.github.com/repos/takeisa/nand2tetris-project/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/takeisa/nand2tetris-project/labels{/name}", + "releases_url": "https://api.github.com/repos/takeisa/nand2tetris-project/releases{/id}", + "deployments_url": "https://api.github.com/repos/takeisa/nand2tetris-project/deployments", + "created_at": "2015-04-04T09:05:04Z", + "updated_at": "2015-04-19T12:51:09Z", + "pushed_at": "2015-04-19T12:51:09Z", + "git_url": "git://github.com/takeisa/nand2tetris-project.git", + "ssh_url": "git@github.com:takeisa/nand2tetris-project.git", + "clone_url": "https://github.com/takeisa/nand2tetris-project.git", + "svn_url": "https://github.com/takeisa/nand2tetris-project", + "homepage": null, + "size": 312, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.935171 + }, + { + "id": 44459942, + "name": "nand2tetris", + "full_name": "landretk/nand2tetris", + "owner": { + "login": "landretk", + "id": 4535529, + "avatar_url": "https://avatars.githubusercontent.com/u/4535529?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/landretk", + "html_url": "https://github.com/landretk", + "followers_url": "https://api.github.com/users/landretk/followers", + "following_url": "https://api.github.com/users/landretk/following{/other_user}", + "gists_url": "https://api.github.com/users/landretk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/landretk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/landretk/subscriptions", + "organizations_url": "https://api.github.com/users/landretk/orgs", + "repos_url": "https://api.github.com/users/landretk/repos", + "events_url": "https://api.github.com/users/landretk/events{/privacy}", + "received_events_url": "https://api.github.com/users/landretk/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/landretk/nand2tetris", + "description": "Coursework for Nand To Tetris", + "fork": false, + "url": "https://api.github.com/repos/landretk/nand2tetris", + "forks_url": "https://api.github.com/repos/landretk/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/landretk/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/landretk/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/landretk/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/landretk/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/landretk/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/landretk/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/landretk/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/landretk/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/landretk/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/landretk/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/landretk/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/landretk/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/landretk/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/landretk/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/landretk/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/landretk/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/landretk/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/landretk/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/landretk/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/landretk/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/landretk/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/landretk/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/landretk/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/landretk/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/landretk/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/landretk/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/landretk/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/landretk/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/landretk/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/landretk/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/landretk/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/landretk/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/landretk/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/landretk/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/landretk/nand2tetris/deployments", + "created_at": "2015-10-18T00:33:44Z", + "updated_at": "2015-10-18T00:34:59Z", + "pushed_at": "2015-10-29T21:35:34Z", + "git_url": "git://github.com/landretk/nand2tetris.git", + "ssh_url": "git@github.com:landretk/nand2tetris.git", + "clone_url": "https://github.com/landretk/nand2tetris.git", + "svn_url": "https://github.com/landretk/nand2tetris", + "homepage": null, + "size": 344, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.935171 + }, + { + "id": 41434197, + "name": "crcp2330", + "full_name": "rschmidt347/crcp2330", + "owner": { + "login": "rschmidt347", + "id": 13955065, + "avatar_url": "https://avatars.githubusercontent.com/u/13955065?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rschmidt347", + "html_url": "https://github.com/rschmidt347", + "followers_url": "https://api.github.com/users/rschmidt347/followers", + "following_url": "https://api.github.com/users/rschmidt347/following{/other_user}", + "gists_url": "https://api.github.com/users/rschmidt347/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rschmidt347/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rschmidt347/subscriptions", + "organizations_url": "https://api.github.com/users/rschmidt347/orgs", + "repos_url": "https://api.github.com/users/rschmidt347/repos", + "events_url": "https://api.github.com/users/rschmidt347/events{/privacy}", + "received_events_url": "https://api.github.com/users/rschmidt347/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/rschmidt347/crcp2330", + "description": "Work for Nand to Tetris", + "fork": false, + "url": "https://api.github.com/repos/rschmidt347/crcp2330", + "forks_url": "https://api.github.com/repos/rschmidt347/crcp2330/forks", + "keys_url": "https://api.github.com/repos/rschmidt347/crcp2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rschmidt347/crcp2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rschmidt347/crcp2330/teams", + "hooks_url": "https://api.github.com/repos/rschmidt347/crcp2330/hooks", + "issue_events_url": "https://api.github.com/repos/rschmidt347/crcp2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/rschmidt347/crcp2330/events", + "assignees_url": "https://api.github.com/repos/rschmidt347/crcp2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/rschmidt347/crcp2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/rschmidt347/crcp2330/tags", + "blobs_url": "https://api.github.com/repos/rschmidt347/crcp2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rschmidt347/crcp2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rschmidt347/crcp2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rschmidt347/crcp2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rschmidt347/crcp2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rschmidt347/crcp2330/languages", + "stargazers_url": "https://api.github.com/repos/rschmidt347/crcp2330/stargazers", + "contributors_url": "https://api.github.com/repos/rschmidt347/crcp2330/contributors", + "subscribers_url": "https://api.github.com/repos/rschmidt347/crcp2330/subscribers", + "subscription_url": "https://api.github.com/repos/rschmidt347/crcp2330/subscription", + "commits_url": "https://api.github.com/repos/rschmidt347/crcp2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rschmidt347/crcp2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rschmidt347/crcp2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rschmidt347/crcp2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rschmidt347/crcp2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/rschmidt347/crcp2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rschmidt347/crcp2330/merges", + "archive_url": "https://api.github.com/repos/rschmidt347/crcp2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rschmidt347/crcp2330/downloads", + "issues_url": "https://api.github.com/repos/rschmidt347/crcp2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/rschmidt347/crcp2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rschmidt347/crcp2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rschmidt347/crcp2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rschmidt347/crcp2330/labels{/name}", + "releases_url": "https://api.github.com/repos/rschmidt347/crcp2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/rschmidt347/crcp2330/deployments", + "created_at": "2015-08-26T15:39:55Z", + "updated_at": "2015-08-29T06:15:59Z", + "pushed_at": "2015-12-02T18:53:38Z", + "git_url": "git://github.com/rschmidt347/crcp2330.git", + "ssh_url": "git@github.com:rschmidt347/crcp2330.git", + "clone_url": "https://github.com/rschmidt347/crcp2330.git", + "svn_url": "https://github.com/rschmidt347/crcp2330", + "homepage": null, + "size": 179, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.935171 + }, + { + "id": 53330407, + "name": "Nand2Tetris", + "full_name": "OppenheimerAndTheMartians/Nand2Tetris", + "owner": { + "login": "OppenheimerAndTheMartians", + "id": 6571778, + "avatar_url": "https://avatars.githubusercontent.com/u/6571778?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/OppenheimerAndTheMartians", + "html_url": "https://github.com/OppenheimerAndTheMartians", + "followers_url": "https://api.github.com/users/OppenheimerAndTheMartians/followers", + "following_url": "https://api.github.com/users/OppenheimerAndTheMartians/following{/other_user}", + "gists_url": "https://api.github.com/users/OppenheimerAndTheMartians/gists{/gist_id}", + "starred_url": "https://api.github.com/users/OppenheimerAndTheMartians/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/OppenheimerAndTheMartians/subscriptions", + "organizations_url": "https://api.github.com/users/OppenheimerAndTheMartians/orgs", + "repos_url": "https://api.github.com/users/OppenheimerAndTheMartians/repos", + "events_url": "https://api.github.com/users/OppenheimerAndTheMartians/events{/privacy}", + "received_events_url": "https://api.github.com/users/OppenheimerAndTheMartians/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/OppenheimerAndTheMartians/Nand2Tetris", + "description": "From Nand To Tetris code", + "fork": false, + "url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris", + "forks_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/OppenheimerAndTheMartians/Nand2Tetris/deployments", + "created_at": "2016-03-07T14:11:11Z", + "updated_at": "2016-03-07T14:35:37Z", + "pushed_at": "2016-04-03T22:49:53Z", + "git_url": "git://github.com/OppenheimerAndTheMartians/Nand2Tetris.git", + "ssh_url": "git@github.com:OppenheimerAndTheMartians/Nand2Tetris.git", + "clone_url": "https://github.com/OppenheimerAndTheMartians/Nand2Tetris.git", + "svn_url": "https://github.com/OppenheimerAndTheMartians/Nand2Tetris", + "homepage": null, + "size": 227, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.935171 + }, + { + "id": 49641500, + "name": "from-nand-to-tetris-I", + "full_name": "mottosso/from-nand-to-tetris-I", + "owner": { + "login": "mottosso", + "id": 2152766, + "avatar_url": "https://avatars.githubusercontent.com/u/2152766?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mottosso", + "html_url": "https://github.com/mottosso", + "followers_url": "https://api.github.com/users/mottosso/followers", + "following_url": "https://api.github.com/users/mottosso/following{/other_user}", + "gists_url": "https://api.github.com/users/mottosso/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mottosso/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mottosso/subscriptions", + "organizations_url": "https://api.github.com/users/mottosso/orgs", + "repos_url": "https://api.github.com/users/mottosso/repos", + "events_url": "https://api.github.com/users/mottosso/events{/privacy}", + "received_events_url": "https://api.github.com/users/mottosso/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mottosso/from-nand-to-tetris-I", + "description": "From NAND to Tetris I", + "fork": false, + "url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I", + "forks_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/forks", + "keys_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/teams", + "hooks_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/hooks", + "issue_events_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/issues/events{/number}", + "events_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/events", + "assignees_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/assignees{/user}", + "branches_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/branches{/branch}", + "tags_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/tags", + "blobs_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/languages", + "stargazers_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/stargazers", + "contributors_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/contributors", + "subscribers_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/subscribers", + "subscription_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/subscription", + "commits_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/contents/{+path}", + "compare_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/merges", + "archive_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/downloads", + "issues_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/issues{/number}", + "pulls_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/labels{/name}", + "releases_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/releases{/id}", + "deployments_url": "https://api.github.com/repos/mottosso/from-nand-to-tetris-I/deployments", + "created_at": "2016-01-14T10:50:06Z", + "updated_at": "2016-01-14T13:13:25Z", + "pushed_at": "2016-05-08T11:49:40Z", + "git_url": "git://github.com/mottosso/from-nand-to-tetris-I.git", + "ssh_url": "git@github.com:mottosso/from-nand-to-tetris-I.git", + "clone_url": "https://github.com/mottosso/from-nand-to-tetris-I.git", + "svn_url": "https://github.com/mottosso/from-nand-to-tetris-I", + "homepage": null, + "size": 216, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.935171 + }, + { + "id": 7613729, + "name": "nand2tetris", + "full_name": "alexpaulzor/nand2tetris", + "owner": { + "login": "alexpaulzor", + "id": 150549, + "avatar_url": "https://avatars.githubusercontent.com/u/150549?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/alexpaulzor", + "html_url": "https://github.com/alexpaulzor", + "followers_url": "https://api.github.com/users/alexpaulzor/followers", + "following_url": "https://api.github.com/users/alexpaulzor/following{/other_user}", + "gists_url": "https://api.github.com/users/alexpaulzor/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alexpaulzor/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alexpaulzor/subscriptions", + "organizations_url": "https://api.github.com/users/alexpaulzor/orgs", + "repos_url": "https://api.github.com/users/alexpaulzor/repos", + "events_url": "https://api.github.com/users/alexpaulzor/events{/privacy}", + "received_events_url": "https://api.github.com/users/alexpaulzor/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/alexpaulzor/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/alexpaulzor/nand2tetris", + "forks_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/alexpaulzor/nand2tetris/deployments", + "created_at": "2013-01-14T22:10:58Z", + "updated_at": "2013-09-29T17:34:52Z", + "pushed_at": "2013-02-17T00:51:10Z", + "git_url": "git://github.com/alexpaulzor/nand2tetris.git", + "ssh_url": "git@github.com:alexpaulzor/nand2tetris.git", + "clone_url": "https://github.com/alexpaulzor/nand2tetris.git", + "svn_url": "https://github.com/alexpaulzor/nand2tetris", + "homepage": null, + "size": 651, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.649681 + }, + { + "id": 41434195, + "name": "crcp2330", + "full_name": "hambethany1/crcp2330", + "owner": { + "login": "hambethany1", + "id": 11997875, + "avatar_url": "https://avatars.githubusercontent.com/u/11997875?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hambethany1", + "html_url": "https://github.com/hambethany1", + "followers_url": "https://api.github.com/users/hambethany1/followers", + "following_url": "https://api.github.com/users/hambethany1/following{/other_user}", + "gists_url": "https://api.github.com/users/hambethany1/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hambethany1/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hambethany1/subscriptions", + "organizations_url": "https://api.github.com/users/hambethany1/orgs", + "repos_url": "https://api.github.com/users/hambethany1/repos", + "events_url": "https://api.github.com/users/hambethany1/events{/privacy}", + "received_events_url": "https://api.github.com/users/hambethany1/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hambethany1/crcp2330", + "description": "My work for Nand to Tetris", + "fork": false, + "url": "https://api.github.com/repos/hambethany1/crcp2330", + "forks_url": "https://api.github.com/repos/hambethany1/crcp2330/forks", + "keys_url": "https://api.github.com/repos/hambethany1/crcp2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hambethany1/crcp2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hambethany1/crcp2330/teams", + "hooks_url": "https://api.github.com/repos/hambethany1/crcp2330/hooks", + "issue_events_url": "https://api.github.com/repos/hambethany1/crcp2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/hambethany1/crcp2330/events", + "assignees_url": "https://api.github.com/repos/hambethany1/crcp2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/hambethany1/crcp2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/hambethany1/crcp2330/tags", + "blobs_url": "https://api.github.com/repos/hambethany1/crcp2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hambethany1/crcp2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hambethany1/crcp2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hambethany1/crcp2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hambethany1/crcp2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hambethany1/crcp2330/languages", + "stargazers_url": "https://api.github.com/repos/hambethany1/crcp2330/stargazers", + "contributors_url": "https://api.github.com/repos/hambethany1/crcp2330/contributors", + "subscribers_url": "https://api.github.com/repos/hambethany1/crcp2330/subscribers", + "subscription_url": "https://api.github.com/repos/hambethany1/crcp2330/subscription", + "commits_url": "https://api.github.com/repos/hambethany1/crcp2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hambethany1/crcp2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hambethany1/crcp2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hambethany1/crcp2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hambethany1/crcp2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/hambethany1/crcp2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hambethany1/crcp2330/merges", + "archive_url": "https://api.github.com/repos/hambethany1/crcp2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hambethany1/crcp2330/downloads", + "issues_url": "https://api.github.com/repos/hambethany1/crcp2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/hambethany1/crcp2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hambethany1/crcp2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hambethany1/crcp2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hambethany1/crcp2330/labels{/name}", + "releases_url": "https://api.github.com/repos/hambethany1/crcp2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/hambethany1/crcp2330/deployments", + "created_at": "2015-08-26T15:39:55Z", + "updated_at": "2015-08-28T15:19:44Z", + "pushed_at": "2015-12-10T21:56:42Z", + "git_url": "git://github.com/hambethany1/crcp2330.git", + "ssh_url": "git@github.com:hambethany1/crcp2330.git", + "clone_url": "https://github.com/hambethany1/crcp2330.git", + "svn_url": "https://github.com/hambethany1/crcp2330", + "homepage": null, + "size": 190, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.1283703 + }, + { + "id": 41434200, + "name": "crcp2330", + "full_name": "matthewLee711/crcp2330", + "owner": { + "login": "matthewLee711", + "id": 9796894, + "avatar_url": "https://avatars.githubusercontent.com/u/9796894?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/matthewLee711", + "html_url": "https://github.com/matthewLee711", + "followers_url": "https://api.github.com/users/matthewLee711/followers", + "following_url": "https://api.github.com/users/matthewLee711/following{/other_user}", + "gists_url": "https://api.github.com/users/matthewLee711/gists{/gist_id}", + "starred_url": "https://api.github.com/users/matthewLee711/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/matthewLee711/subscriptions", + "organizations_url": "https://api.github.com/users/matthewLee711/orgs", + "repos_url": "https://api.github.com/users/matthewLee711/repos", + "events_url": "https://api.github.com/users/matthewLee711/events{/privacy}", + "received_events_url": "https://api.github.com/users/matthewLee711/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/matthewLee711/crcp2330", + "description": "My work in Nand to Tetris", + "fork": false, + "url": "https://api.github.com/repos/matthewLee711/crcp2330", + "forks_url": "https://api.github.com/repos/matthewLee711/crcp2330/forks", + "keys_url": "https://api.github.com/repos/matthewLee711/crcp2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/matthewLee711/crcp2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/matthewLee711/crcp2330/teams", + "hooks_url": "https://api.github.com/repos/matthewLee711/crcp2330/hooks", + "issue_events_url": "https://api.github.com/repos/matthewLee711/crcp2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/matthewLee711/crcp2330/events", + "assignees_url": "https://api.github.com/repos/matthewLee711/crcp2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/matthewLee711/crcp2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/matthewLee711/crcp2330/tags", + "blobs_url": "https://api.github.com/repos/matthewLee711/crcp2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/matthewLee711/crcp2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/matthewLee711/crcp2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/matthewLee711/crcp2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/matthewLee711/crcp2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/matthewLee711/crcp2330/languages", + "stargazers_url": "https://api.github.com/repos/matthewLee711/crcp2330/stargazers", + "contributors_url": "https://api.github.com/repos/matthewLee711/crcp2330/contributors", + "subscribers_url": "https://api.github.com/repos/matthewLee711/crcp2330/subscribers", + "subscription_url": "https://api.github.com/repos/matthewLee711/crcp2330/subscription", + "commits_url": "https://api.github.com/repos/matthewLee711/crcp2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/matthewLee711/crcp2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/matthewLee711/crcp2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/matthewLee711/crcp2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/matthewLee711/crcp2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/matthewLee711/crcp2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/matthewLee711/crcp2330/merges", + "archive_url": "https://api.github.com/repos/matthewLee711/crcp2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/matthewLee711/crcp2330/downloads", + "issues_url": "https://api.github.com/repos/matthewLee711/crcp2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/matthewLee711/crcp2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/matthewLee711/crcp2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/matthewLee711/crcp2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/matthewLee711/crcp2330/labels{/name}", + "releases_url": "https://api.github.com/repos/matthewLee711/crcp2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/matthewLee711/crcp2330/deployments", + "created_at": "2015-08-26T15:39:56Z", + "updated_at": "2015-08-28T02:40:52Z", + "pushed_at": "2015-12-10T10:14:40Z", + "git_url": "git://github.com/matthewLee711/crcp2330.git", + "ssh_url": "git@github.com:matthewLee711/crcp2330.git", + "clone_url": "https://github.com/matthewLee711/crcp2330.git", + "svn_url": "https://github.com/matthewLee711/crcp2330", + "homepage": null, + "size": 185, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.1187496 + }, + { + "id": 40453756, + "name": "tetris26", + "full_name": "udibr/tetris26", + "owner": { + "login": "udibr", + "id": 608789, + "avatar_url": "https://avatars.githubusercontent.com/u/608789?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/udibr", + "html_url": "https://github.com/udibr", + "followers_url": "https://api.github.com/users/udibr/followers", + "following_url": "https://api.github.com/users/udibr/following{/other_user}", + "gists_url": "https://api.github.com/users/udibr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/udibr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/udibr/subscriptions", + "organizations_url": "https://api.github.com/users/udibr/orgs", + "repos_url": "https://api.github.com/users/udibr/repos", + "events_url": "https://api.github.com/users/udibr/events{/privacy}", + "received_events_url": "https://api.github.com/users/udibr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/udibr/tetris26", + "description": "Tetris bin for Atari 2600 and Stella ", + "fork": false, + "url": "https://api.github.com/repos/udibr/tetris26", + "forks_url": "https://api.github.com/repos/udibr/tetris26/forks", + "keys_url": "https://api.github.com/repos/udibr/tetris26/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/udibr/tetris26/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/udibr/tetris26/teams", + "hooks_url": "https://api.github.com/repos/udibr/tetris26/hooks", + "issue_events_url": "https://api.github.com/repos/udibr/tetris26/issues/events{/number}", + "events_url": "https://api.github.com/repos/udibr/tetris26/events", + "assignees_url": "https://api.github.com/repos/udibr/tetris26/assignees{/user}", + "branches_url": "https://api.github.com/repos/udibr/tetris26/branches{/branch}", + "tags_url": "https://api.github.com/repos/udibr/tetris26/tags", + "blobs_url": "https://api.github.com/repos/udibr/tetris26/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/udibr/tetris26/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/udibr/tetris26/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/udibr/tetris26/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/udibr/tetris26/statuses/{sha}", + "languages_url": "https://api.github.com/repos/udibr/tetris26/languages", + "stargazers_url": "https://api.github.com/repos/udibr/tetris26/stargazers", + "contributors_url": "https://api.github.com/repos/udibr/tetris26/contributors", + "subscribers_url": "https://api.github.com/repos/udibr/tetris26/subscribers", + "subscription_url": "https://api.github.com/repos/udibr/tetris26/subscription", + "commits_url": "https://api.github.com/repos/udibr/tetris26/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/udibr/tetris26/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/udibr/tetris26/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/udibr/tetris26/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/udibr/tetris26/contents/{+path}", + "compare_url": "https://api.github.com/repos/udibr/tetris26/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/udibr/tetris26/merges", + "archive_url": "https://api.github.com/repos/udibr/tetris26/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/udibr/tetris26/downloads", + "issues_url": "https://api.github.com/repos/udibr/tetris26/issues{/number}", + "pulls_url": "https://api.github.com/repos/udibr/tetris26/pulls{/number}", + "milestones_url": "https://api.github.com/repos/udibr/tetris26/milestones{/number}", + "notifications_url": "https://api.github.com/repos/udibr/tetris26/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/udibr/tetris26/labels{/name}", + "releases_url": "https://api.github.com/repos/udibr/tetris26/releases{/id}", + "deployments_url": "https://api.github.com/repos/udibr/tetris26/deployments", + "created_at": "2015-08-09T23:13:26Z", + "updated_at": "2015-08-12T20:46:45Z", + "pushed_at": "2015-08-10T20:11:46Z", + "git_url": "git://github.com/udibr/tetris26.git", + "ssh_url": "git@github.com:udibr/tetris26.git", + "clone_url": "https://github.com/udibr/tetris26.git", + "svn_url": "https://github.com/udibr/tetris26", + "homepage": "", + "size": 144, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 1, + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "master", + "score": 5.1069784 + }, + { + "id": 41434196, + "name": "crcp2330", + "full_name": "sadiedonnelly/crcp2330", + "owner": { + "login": "sadiedonnelly", + "id": 13947637, + "avatar_url": "https://avatars.githubusercontent.com/u/13947637?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sadiedonnelly", + "html_url": "https://github.com/sadiedonnelly", + "followers_url": "https://api.github.com/users/sadiedonnelly/followers", + "following_url": "https://api.github.com/users/sadiedonnelly/following{/other_user}", + "gists_url": "https://api.github.com/users/sadiedonnelly/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sadiedonnelly/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sadiedonnelly/subscriptions", + "organizations_url": "https://api.github.com/users/sadiedonnelly/orgs", + "repos_url": "https://api.github.com/users/sadiedonnelly/repos", + "events_url": "https://api.github.com/users/sadiedonnelly/events{/privacy}", + "received_events_url": "https://api.github.com/users/sadiedonnelly/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sadiedonnelly/crcp2330", + "description": "My work for NAND to Tetris", + "fork": false, + "url": "https://api.github.com/repos/sadiedonnelly/crcp2330", + "forks_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/forks", + "keys_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/teams", + "hooks_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/hooks", + "issue_events_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/issues/events{/number}", + "events_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/events", + "assignees_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/assignees{/user}", + "branches_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/branches{/branch}", + "tags_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/tags", + "blobs_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/languages", + "stargazers_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/stargazers", + "contributors_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/contributors", + "subscribers_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/subscribers", + "subscription_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/subscription", + "commits_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/contents/{+path}", + "compare_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/merges", + "archive_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/downloads", + "issues_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/issues{/number}", + "pulls_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/labels{/name}", + "releases_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/releases{/id}", + "deployments_url": "https://api.github.com/repos/sadiedonnelly/crcp2330/deployments", + "created_at": "2015-08-26T15:39:55Z", + "updated_at": "2015-08-26T16:45:07Z", + "pushed_at": "2015-12-10T20:48:04Z", + "git_url": "git://github.com/sadiedonnelly/crcp2330.git", + "ssh_url": "git@github.com:sadiedonnelly/crcp2330.git", + "clone_url": "https://github.com/sadiedonnelly/crcp2330.git", + "svn_url": "https://github.com/sadiedonnelly/crcp2330", + "homepage": null, + "size": 194, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 5.1069784 + }, + { + "id": 7912192, + "name": "TetrisASM", + "full_name": "BuzzVII/TetrisASM", + "owner": { + "login": "BuzzVII", + "id": 3426214, + "avatar_url": "https://avatars.githubusercontent.com/u/3426214?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/BuzzVII", + "html_url": "https://github.com/BuzzVII", + "followers_url": "https://api.github.com/users/BuzzVII/followers", + "following_url": "https://api.github.com/users/BuzzVII/following{/other_user}", + "gists_url": "https://api.github.com/users/BuzzVII/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BuzzVII/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BuzzVII/subscriptions", + "organizations_url": "https://api.github.com/users/BuzzVII/orgs", + "repos_url": "https://api.github.com/users/BuzzVII/repos", + "events_url": "https://api.github.com/users/BuzzVII/events{/privacy}", + "received_events_url": "https://api.github.com/users/BuzzVII/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/BuzzVII/TetrisASM", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/BuzzVII/TetrisASM", + "forks_url": "https://api.github.com/repos/BuzzVII/TetrisASM/forks", + "keys_url": "https://api.github.com/repos/BuzzVII/TetrisASM/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/BuzzVII/TetrisASM/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/BuzzVII/TetrisASM/teams", + "hooks_url": "https://api.github.com/repos/BuzzVII/TetrisASM/hooks", + "issue_events_url": "https://api.github.com/repos/BuzzVII/TetrisASM/issues/events{/number}", + "events_url": "https://api.github.com/repos/BuzzVII/TetrisASM/events", + "assignees_url": "https://api.github.com/repos/BuzzVII/TetrisASM/assignees{/user}", + "branches_url": "https://api.github.com/repos/BuzzVII/TetrisASM/branches{/branch}", + "tags_url": "https://api.github.com/repos/BuzzVII/TetrisASM/tags", + "blobs_url": "https://api.github.com/repos/BuzzVII/TetrisASM/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/BuzzVII/TetrisASM/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/BuzzVII/TetrisASM/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/BuzzVII/TetrisASM/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/BuzzVII/TetrisASM/statuses/{sha}", + "languages_url": "https://api.github.com/repos/BuzzVII/TetrisASM/languages", + "stargazers_url": "https://api.github.com/repos/BuzzVII/TetrisASM/stargazers", + "contributors_url": "https://api.github.com/repos/BuzzVII/TetrisASM/contributors", + "subscribers_url": "https://api.github.com/repos/BuzzVII/TetrisASM/subscribers", + "subscription_url": "https://api.github.com/repos/BuzzVII/TetrisASM/subscription", + "commits_url": "https://api.github.com/repos/BuzzVII/TetrisASM/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/BuzzVII/TetrisASM/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/BuzzVII/TetrisASM/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/BuzzVII/TetrisASM/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/BuzzVII/TetrisASM/contents/{+path}", + "compare_url": "https://api.github.com/repos/BuzzVII/TetrisASM/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/BuzzVII/TetrisASM/merges", + "archive_url": "https://api.github.com/repos/BuzzVII/TetrisASM/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/BuzzVII/TetrisASM/downloads", + "issues_url": "https://api.github.com/repos/BuzzVII/TetrisASM/issues{/number}", + "pulls_url": "https://api.github.com/repos/BuzzVII/TetrisASM/pulls{/number}", + "milestones_url": "https://api.github.com/repos/BuzzVII/TetrisASM/milestones{/number}", + "notifications_url": "https://api.github.com/repos/BuzzVII/TetrisASM/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/BuzzVII/TetrisASM/labels{/name}", + "releases_url": "https://api.github.com/repos/BuzzVII/TetrisASM/releases{/id}", + "deployments_url": "https://api.github.com/repos/BuzzVII/TetrisASM/deployments", + "created_at": "2013-01-30T10:09:17Z", + "updated_at": "2014-04-03T16:00:02Z", + "pushed_at": "2013-01-30T10:35:01Z", + "git_url": "git://github.com/BuzzVII/TetrisASM.git", + "ssh_url": "git@github.com:BuzzVII/TetrisASM.git", + "clone_url": "https://github.com/BuzzVII/TetrisASM.git", + "svn_url": "https://github.com/BuzzVII/TetrisASM", + "homepage": null, + "size": 112, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.5530896 + }, + { + "id": 34637237, + "name": "nand2tetris", + "full_name": "andreoliva/nand2tetris", + "owner": { + "login": "andreoliva", + "id": 2464037, + "avatar_url": "https://avatars.githubusercontent.com/u/2464037?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andreoliva", + "html_url": "https://github.com/andreoliva", + "followers_url": "https://api.github.com/users/andreoliva/followers", + "following_url": "https://api.github.com/users/andreoliva/following{/other_user}", + "gists_url": "https://api.github.com/users/andreoliva/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andreoliva/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andreoliva/subscriptions", + "organizations_url": "https://api.github.com/users/andreoliva/orgs", + "repos_url": "https://api.github.com/users/andreoliva/repos", + "events_url": "https://api.github.com/users/andreoliva/events{/privacy}", + "received_events_url": "https://api.github.com/users/andreoliva/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/andreoliva/nand2tetris", + "description": "Files from Coursera's \"Nand to Tetris\" course.", + "fork": false, + "url": "https://api.github.com/repos/andreoliva/nand2tetris", + "forks_url": "https://api.github.com/repos/andreoliva/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/andreoliva/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/andreoliva/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/andreoliva/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/andreoliva/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/andreoliva/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/andreoliva/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/andreoliva/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/andreoliva/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/andreoliva/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/andreoliva/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/andreoliva/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/andreoliva/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/andreoliva/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/andreoliva/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/andreoliva/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/andreoliva/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/andreoliva/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/andreoliva/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/andreoliva/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/andreoliva/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/andreoliva/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/andreoliva/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/andreoliva/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/andreoliva/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/andreoliva/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/andreoliva/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/andreoliva/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/andreoliva/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/andreoliva/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/andreoliva/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/andreoliva/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/andreoliva/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/andreoliva/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/andreoliva/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/andreoliva/nand2tetris/deployments", + "created_at": "2015-04-27T00:05:51Z", + "updated_at": "2015-11-19T16:59:14Z", + "pushed_at": "2015-05-25T03:52:49Z", + "git_url": "git://github.com/andreoliva/nand2tetris.git", + "ssh_url": "git@github.com:andreoliva/nand2tetris.git", + "clone_url": "https://github.com/andreoliva/nand2tetris.git", + "svn_url": "https://github.com/andreoliva/nand2tetris", + "homepage": "", + "size": 676, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.273642 + }, + { + "id": 7260682, + "name": "LL-Asm-tetris", + "full_name": "FTwO-O/LL-Asm-tetris", + "owner": { + "login": "FTwO-O", + "id": 750207, + "avatar_url": "https://avatars.githubusercontent.com/u/750207?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/FTwO-O", + "html_url": "https://github.com/FTwO-O", + "followers_url": "https://api.github.com/users/FTwO-O/followers", + "following_url": "https://api.github.com/users/FTwO-O/following{/other_user}", + "gists_url": "https://api.github.com/users/FTwO-O/gists{/gist_id}", + "starred_url": "https://api.github.com/users/FTwO-O/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/FTwO-O/subscriptions", + "organizations_url": "https://api.github.com/users/FTwO-O/orgs", + "repos_url": "https://api.github.com/users/FTwO-O/repos", + "events_url": "https://api.github.com/users/FTwO-O/events{/privacy}", + "received_events_url": "https://api.github.com/users/FTwO-O/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/FTwO-O/LL-Asm-tetris", + "description": "ASM implentation of tetris game, for Assembly language learning.", + "fork": false, + "url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris", + "forks_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/forks", + "keys_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/teams", + "hooks_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/hooks", + "issue_events_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/events", + "assignees_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/tags", + "blobs_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/languages", + "stargazers_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/stargazers", + "contributors_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/contributors", + "subscribers_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/subscribers", + "subscription_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/subscription", + "commits_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/merges", + "archive_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/downloads", + "issues_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/FTwO-O/LL-Asm-tetris/deployments", + "created_at": "2012-12-20T16:28:14Z", + "updated_at": "2016-03-08T14:43:27Z", + "pushed_at": "2012-12-20T16:34:26Z", + "git_url": "git://github.com/FTwO-O/LL-Asm-tetris.git", + "ssh_url": "git@github.com:FTwO-O/LL-Asm-tetris.git", + "clone_url": "https://github.com/FTwO-O/LL-Asm-tetris.git", + "svn_url": "https://github.com/FTwO-O/LL-Asm-tetris", + "homepage": "", + "size": 375, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.273642 + }, + { + "id": 10775059, + "name": "NAND2Tetris", + "full_name": "zpartal/NAND2Tetris", + "owner": { + "login": "zpartal", + "id": 1432346, + "avatar_url": "https://avatars.githubusercontent.com/u/1432346?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/zpartal", + "html_url": "https://github.com/zpartal", + "followers_url": "https://api.github.com/users/zpartal/followers", + "following_url": "https://api.github.com/users/zpartal/following{/other_user}", + "gists_url": "https://api.github.com/users/zpartal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zpartal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zpartal/subscriptions", + "organizations_url": "https://api.github.com/users/zpartal/orgs", + "repos_url": "https://api.github.com/users/zpartal/repos", + "events_url": "https://api.github.com/users/zpartal/events{/privacy}", + "received_events_url": "https://api.github.com/users/zpartal/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/zpartal/NAND2Tetris", + "description": "All my code for the NAND 2 Tetris project. ", + "fork": false, + "url": "https://api.github.com/repos/zpartal/NAND2Tetris", + "forks_url": "https://api.github.com/repos/zpartal/NAND2Tetris/forks", + "keys_url": "https://api.github.com/repos/zpartal/NAND2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/zpartal/NAND2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/zpartal/NAND2Tetris/teams", + "hooks_url": "https://api.github.com/repos/zpartal/NAND2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/zpartal/NAND2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/zpartal/NAND2Tetris/events", + "assignees_url": "https://api.github.com/repos/zpartal/NAND2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/zpartal/NAND2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/zpartal/NAND2Tetris/tags", + "blobs_url": "https://api.github.com/repos/zpartal/NAND2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/zpartal/NAND2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/zpartal/NAND2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/zpartal/NAND2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/zpartal/NAND2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/zpartal/NAND2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/zpartal/NAND2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/zpartal/NAND2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/zpartal/NAND2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/zpartal/NAND2Tetris/subscription", + "commits_url": "https://api.github.com/repos/zpartal/NAND2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/zpartal/NAND2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/zpartal/NAND2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/zpartal/NAND2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/zpartal/NAND2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/zpartal/NAND2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/zpartal/NAND2Tetris/merges", + "archive_url": "https://api.github.com/repos/zpartal/NAND2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/zpartal/NAND2Tetris/downloads", + "issues_url": "https://api.github.com/repos/zpartal/NAND2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/zpartal/NAND2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/zpartal/NAND2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/zpartal/NAND2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/zpartal/NAND2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/zpartal/NAND2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/zpartal/NAND2Tetris/deployments", + "created_at": "2013-06-18T22:37:22Z", + "updated_at": "2013-12-16T03:59:44Z", + "pushed_at": "2013-12-16T03:59:43Z", + "git_url": "git://github.com/zpartal/NAND2Tetris.git", + "ssh_url": "git@github.com:zpartal/NAND2Tetris.git", + "clone_url": "https://github.com/zpartal/NAND2Tetris.git", + "svn_url": "https://github.com/zpartal/NAND2Tetris", + "homepage": "", + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.265625 + }, + { + "id": 26594118, + "name": "nand2Tetris", + "full_name": "mfbadr/nand2Tetris", + "owner": { + "login": "mfbadr", + "id": 8029306, + "avatar_url": "https://avatars.githubusercontent.com/u/8029306?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mfbadr", + "html_url": "https://github.com/mfbadr", + "followers_url": "https://api.github.com/users/mfbadr/followers", + "following_url": "https://api.github.com/users/mfbadr/following{/other_user}", + "gists_url": "https://api.github.com/users/mfbadr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mfbadr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mfbadr/subscriptions", + "organizations_url": "https://api.github.com/users/mfbadr/orgs", + "repos_url": "https://api.github.com/users/mfbadr/repos", + "events_url": "https://api.github.com/users/mfbadr/events{/privacy}", + "received_events_url": "https://api.github.com/users/mfbadr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mfbadr/nand2Tetris", + "description": "Working through a CS course, building tetris starting from NAND", + "fork": false, + "url": "https://api.github.com/repos/mfbadr/nand2Tetris", + "forks_url": "https://api.github.com/repos/mfbadr/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/mfbadr/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mfbadr/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mfbadr/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/mfbadr/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mfbadr/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mfbadr/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/mfbadr/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mfbadr/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mfbadr/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/mfbadr/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mfbadr/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mfbadr/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mfbadr/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mfbadr/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mfbadr/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/mfbadr/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mfbadr/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mfbadr/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mfbadr/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/mfbadr/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mfbadr/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mfbadr/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mfbadr/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mfbadr/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mfbadr/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mfbadr/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/mfbadr/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mfbadr/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/mfbadr/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mfbadr/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mfbadr/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mfbadr/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mfbadr/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mfbadr/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mfbadr/nand2Tetris/deployments", + "created_at": "2014-11-13T15:28:32Z", + "updated_at": "2014-11-13T15:29:38Z", + "pushed_at": "2014-11-13T15:29:38Z", + "git_url": "git://github.com/mfbadr/nand2Tetris.git", + "ssh_url": "git@github.com:mfbadr/nand2Tetris.git", + "clone_url": "https://github.com/mfbadr/nand2Tetris.git", + "svn_url": "https://github.com/mfbadr/nand2Tetris", + "homepage": null, + "size": 616, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.265625 + }, + { + "id": 44864853, + "name": "FromNandToTetris", + "full_name": "Neal-liu/FromNandToTetris", + "owner": { + "login": "Neal-liu", + "id": 5592660, + "avatar_url": "https://avatars.githubusercontent.com/u/5592660?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Neal-liu", + "html_url": "https://github.com/Neal-liu", + "followers_url": "https://api.github.com/users/Neal-liu/followers", + "following_url": "https://api.github.com/users/Neal-liu/following{/other_user}", + "gists_url": "https://api.github.com/users/Neal-liu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Neal-liu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Neal-liu/subscriptions", + "organizations_url": "https://api.github.com/users/Neal-liu/orgs", + "repos_url": "https://api.github.com/users/Neal-liu/repos", + "events_url": "https://api.github.com/users/Neal-liu/events{/privacy}", + "received_events_url": "https://api.github.com/users/Neal-liu/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Neal-liu/FromNandToTetris", + "description": "projects from coursera course : From Nand to Tetris", + "fork": false, + "url": "https://api.github.com/repos/Neal-liu/FromNandToTetris", + "forks_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/forks", + "keys_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/teams", + "hooks_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/hooks", + "issue_events_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/events", + "assignees_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/tags", + "blobs_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/languages", + "stargazers_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/stargazers", + "contributors_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/contributors", + "subscribers_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/subscribers", + "subscription_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/subscription", + "commits_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/merges", + "archive_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/downloads", + "issues_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Neal-liu/FromNandToTetris/deployments", + "created_at": "2015-10-24T12:21:34Z", + "updated_at": "2015-10-24T12:31:10Z", + "pushed_at": "2015-10-24T12:31:09Z", + "git_url": "git://github.com/Neal-liu/FromNandToTetris.git", + "ssh_url": "git@github.com:Neal-liu/FromNandToTetris.git", + "clone_url": "https://github.com/Neal-liu/FromNandToTetris.git", + "svn_url": "https://github.com/Neal-liu/FromNandToTetris", + "homepage": null, + "size": 276, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.265625 + }, + { + "id": 52502116, + "name": "ComputerSimulator", + "full_name": "melvyniandrag/ComputerSimulator", + "owner": { + "login": "melvyniandrag", + "id": 17210565, + "avatar_url": "https://avatars.githubusercontent.com/u/17210565?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/melvyniandrag", + "html_url": "https://github.com/melvyniandrag", + "followers_url": "https://api.github.com/users/melvyniandrag/followers", + "following_url": "https://api.github.com/users/melvyniandrag/following{/other_user}", + "gists_url": "https://api.github.com/users/melvyniandrag/gists{/gist_id}", + "starred_url": "https://api.github.com/users/melvyniandrag/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/melvyniandrag/subscriptions", + "organizations_url": "https://api.github.com/users/melvyniandrag/orgs", + "repos_url": "https://api.github.com/users/melvyniandrag/repos", + "events_url": "https://api.github.com/users/melvyniandrag/events{/privacy}", + "received_events_url": "https://api.github.com/users/melvyniandrag/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/melvyniandrag/ComputerSimulator", + "description": "Course work for the NAND to Tetris course one coursera.", + "fork": false, + "url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator", + "forks_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/forks", + "keys_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/teams", + "hooks_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/hooks", + "issue_events_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/issues/events{/number}", + "events_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/events", + "assignees_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/assignees{/user}", + "branches_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/branches{/branch}", + "tags_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/tags", + "blobs_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/statuses/{sha}", + "languages_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/languages", + "stargazers_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/stargazers", + "contributors_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/contributors", + "subscribers_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/subscribers", + "subscription_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/subscription", + "commits_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/contents/{+path}", + "compare_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/merges", + "archive_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/downloads", + "issues_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/issues{/number}", + "pulls_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/pulls{/number}", + "milestones_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/milestones{/number}", + "notifications_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/labels{/name}", + "releases_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/releases{/id}", + "deployments_url": "https://api.github.com/repos/melvyniandrag/ComputerSimulator/deployments", + "created_at": "2016-02-25T06:24:25Z", + "updated_at": "2016-02-25T06:25:04Z", + "pushed_at": "2016-02-25T06:25:02Z", + "git_url": "git://github.com/melvyniandrag/ComputerSimulator.git", + "ssh_url": "git@github.com:melvyniandrag/ComputerSimulator.git", + "clone_url": "https://github.com/melvyniandrag/ComputerSimulator.git", + "svn_url": "https://github.com/melvyniandrag/ComputerSimulator", + "homepage": null, + "size": 508, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.265625 + }, + { + "id": 26361387, + "name": "hack-assembler", + "full_name": "malharhak2/hack-assembler", + "owner": { + "login": "malharhak2", + "id": 16116044, + "avatar_url": "https://avatars.githubusercontent.com/u/16116044?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/malharhak2", + "html_url": "https://github.com/malharhak2", + "followers_url": "https://api.github.com/users/malharhak2/followers", + "following_url": "https://api.github.com/users/malharhak2/following{/other_user}", + "gists_url": "https://api.github.com/users/malharhak2/gists{/gist_id}", + "starred_url": "https://api.github.com/users/malharhak2/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/malharhak2/subscriptions", + "organizations_url": "https://api.github.com/users/malharhak2/orgs", + "repos_url": "https://api.github.com/users/malharhak2/repos", + "events_url": "https://api.github.com/users/malharhak2/events{/privacy}", + "received_events_url": "https://api.github.com/users/malharhak2/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/malharhak2/hack-assembler", + "description": "The hack language assembler for the Nand 2 Tetris course", + "fork": false, + "url": "https://api.github.com/repos/malharhak2/hack-assembler", + "forks_url": "https://api.github.com/repos/malharhak2/hack-assembler/forks", + "keys_url": "https://api.github.com/repos/malharhak2/hack-assembler/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/malharhak2/hack-assembler/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/malharhak2/hack-assembler/teams", + "hooks_url": "https://api.github.com/repos/malharhak2/hack-assembler/hooks", + "issue_events_url": "https://api.github.com/repos/malharhak2/hack-assembler/issues/events{/number}", + "events_url": "https://api.github.com/repos/malharhak2/hack-assembler/events", + "assignees_url": "https://api.github.com/repos/malharhak2/hack-assembler/assignees{/user}", + "branches_url": "https://api.github.com/repos/malharhak2/hack-assembler/branches{/branch}", + "tags_url": "https://api.github.com/repos/malharhak2/hack-assembler/tags", + "blobs_url": "https://api.github.com/repos/malharhak2/hack-assembler/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/malharhak2/hack-assembler/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/malharhak2/hack-assembler/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/malharhak2/hack-assembler/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/malharhak2/hack-assembler/statuses/{sha}", + "languages_url": "https://api.github.com/repos/malharhak2/hack-assembler/languages", + "stargazers_url": "https://api.github.com/repos/malharhak2/hack-assembler/stargazers", + "contributors_url": "https://api.github.com/repos/malharhak2/hack-assembler/contributors", + "subscribers_url": "https://api.github.com/repos/malharhak2/hack-assembler/subscribers", + "subscription_url": "https://api.github.com/repos/malharhak2/hack-assembler/subscription", + "commits_url": "https://api.github.com/repos/malharhak2/hack-assembler/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/malharhak2/hack-assembler/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/malharhak2/hack-assembler/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/malharhak2/hack-assembler/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/malharhak2/hack-assembler/contents/{+path}", + "compare_url": "https://api.github.com/repos/malharhak2/hack-assembler/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/malharhak2/hack-assembler/merges", + "archive_url": "https://api.github.com/repos/malharhak2/hack-assembler/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/malharhak2/hack-assembler/downloads", + "issues_url": "https://api.github.com/repos/malharhak2/hack-assembler/issues{/number}", + "pulls_url": "https://api.github.com/repos/malharhak2/hack-assembler/pulls{/number}", + "milestones_url": "https://api.github.com/repos/malharhak2/hack-assembler/milestones{/number}", + "notifications_url": "https://api.github.com/repos/malharhak2/hack-assembler/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/malharhak2/hack-assembler/labels{/name}", + "releases_url": "https://api.github.com/repos/malharhak2/hack-assembler/releases{/id}", + "deployments_url": "https://api.github.com/repos/malharhak2/hack-assembler/deployments", + "created_at": "2014-11-08T13:30:26Z", + "updated_at": "2015-12-03T09:25:20Z", + "pushed_at": "2014-11-08T18:53:12Z", + "git_url": "git://github.com/malharhak2/hack-assembler.git", + "ssh_url": "git@github.com:malharhak2/hack-assembler.git", + "clone_url": "https://github.com/malharhak2/hack-assembler.git", + "svn_url": "https://github.com/malharhak2/hack-assembler", + "homepage": null, + "size": 152, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.265625 + }, + { + "id": 59680916, + "name": "nand2tetris", + "full_name": "tanderegg/nand2tetris", + "owner": { + "login": "tanderegg", + "id": 100029, + "avatar_url": "https://avatars.githubusercontent.com/u/100029?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tanderegg", + "html_url": "https://github.com/tanderegg", + "followers_url": "https://api.github.com/users/tanderegg/followers", + "following_url": "https://api.github.com/users/tanderegg/following{/other_user}", + "gists_url": "https://api.github.com/users/tanderegg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tanderegg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tanderegg/subscriptions", + "organizations_url": "https://api.github.com/users/tanderegg/orgs", + "repos_url": "https://api.github.com/users/tanderegg/repos", + "events_url": "https://api.github.com/users/tanderegg/events{/privacy}", + "received_events_url": "https://api.github.com/users/tanderegg/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tanderegg/nand2tetris", + "description": "My coursework in the Nand to Tetris course", + "fork": false, + "url": "https://api.github.com/repos/tanderegg/nand2tetris", + "forks_url": "https://api.github.com/repos/tanderegg/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tanderegg/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tanderegg/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tanderegg/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tanderegg/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tanderegg/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tanderegg/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tanderegg/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tanderegg/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tanderegg/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tanderegg/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tanderegg/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tanderegg/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tanderegg/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tanderegg/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tanderegg/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tanderegg/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tanderegg/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tanderegg/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tanderegg/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tanderegg/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tanderegg/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tanderegg/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tanderegg/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tanderegg/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tanderegg/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tanderegg/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tanderegg/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tanderegg/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tanderegg/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tanderegg/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tanderegg/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tanderegg/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tanderegg/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tanderegg/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tanderegg/nand2tetris/deployments", + "created_at": "2016-05-25T16:48:39Z", + "updated_at": "2016-05-25T16:58:40Z", + "pushed_at": "2016-06-08T13:40:55Z", + "git_url": "git://github.com/tanderegg/nand2tetris.git", + "ssh_url": "git@github.com:tanderegg/nand2tetris.git", + "clone_url": "https://github.com/tanderegg/nand2tetris.git", + "svn_url": "https://github.com/tanderegg/nand2tetris", + "homepage": null, + "size": 520, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.265625 + }, + { + "id": 57420901, + "name": "nand2tetrisprojects", + "full_name": "mithunder916/nand2tetrisprojects", + "owner": { + "login": "mithunder916", + "id": 18056098, + "avatar_url": "https://avatars.githubusercontent.com/u/18056098?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mithunder916", + "html_url": "https://github.com/mithunder916", + "followers_url": "https://api.github.com/users/mithunder916/followers", + "following_url": "https://api.github.com/users/mithunder916/following{/other_user}", + "gists_url": "https://api.github.com/users/mithunder916/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mithunder916/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mithunder916/subscriptions", + "organizations_url": "https://api.github.com/users/mithunder916/orgs", + "repos_url": "https://api.github.com/users/mithunder916/repos", + "events_url": "https://api.github.com/users/mithunder916/events{/privacy}", + "received_events_url": "https://api.github.com/users/mithunder916/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mithunder916/nand2tetrisprojects", + "description": "Projects for Coursera's Nand to Tetris class", + "fork": false, + "url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects", + "forks_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/forks", + "keys_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/teams", + "hooks_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/hooks", + "issue_events_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/issues/events{/number}", + "events_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/events", + "assignees_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/assignees{/user}", + "branches_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/branches{/branch}", + "tags_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/tags", + "blobs_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/languages", + "stargazers_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/stargazers", + "contributors_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/contributors", + "subscribers_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/subscribers", + "subscription_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/subscription", + "commits_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/contents/{+path}", + "compare_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/merges", + "archive_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/downloads", + "issues_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/issues{/number}", + "pulls_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/labels{/name}", + "releases_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/releases{/id}", + "deployments_url": "https://api.github.com/repos/mithunder916/nand2tetrisprojects/deployments", + "created_at": "2016-04-30T00:45:12Z", + "updated_at": "2016-04-30T00:45:45Z", + "pushed_at": "2016-06-01T02:12:31Z", + "git_url": "git://github.com/mithunder916/nand2tetrisprojects.git", + "ssh_url": "git@github.com:mithunder916/nand2tetrisprojects.git", + "clone_url": "https://github.com/mithunder916/nand2tetrisprojects.git", + "svn_url": "https://github.com/mithunder916/nand2tetrisprojects", + "homepage": null, + "size": 195, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.265625 + }, + { + "id": 41601475, + "name": "blocks-asm", + "full_name": "dtomas/blocks-asm", + "owner": { + "login": "dtomas", + "id": 4202709, + "avatar_url": "https://avatars.githubusercontent.com/u/4202709?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dtomas", + "html_url": "https://github.com/dtomas", + "followers_url": "https://api.github.com/users/dtomas/followers", + "following_url": "https://api.github.com/users/dtomas/following{/other_user}", + "gists_url": "https://api.github.com/users/dtomas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dtomas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dtomas/subscriptions", + "organizations_url": "https://api.github.com/users/dtomas/orgs", + "repos_url": "https://api.github.com/users/dtomas/repos", + "events_url": "https://api.github.com/users/dtomas/events{/privacy}", + "received_events_url": "https://api.github.com/users/dtomas/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dtomas/blocks-asm", + "description": "Tetris clone for the C64, written in ACME assembler.", + "fork": false, + "url": "https://api.github.com/repos/dtomas/blocks-asm", + "forks_url": "https://api.github.com/repos/dtomas/blocks-asm/forks", + "keys_url": "https://api.github.com/repos/dtomas/blocks-asm/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dtomas/blocks-asm/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dtomas/blocks-asm/teams", + "hooks_url": "https://api.github.com/repos/dtomas/blocks-asm/hooks", + "issue_events_url": "https://api.github.com/repos/dtomas/blocks-asm/issues/events{/number}", + "events_url": "https://api.github.com/repos/dtomas/blocks-asm/events", + "assignees_url": "https://api.github.com/repos/dtomas/blocks-asm/assignees{/user}", + "branches_url": "https://api.github.com/repos/dtomas/blocks-asm/branches{/branch}", + "tags_url": "https://api.github.com/repos/dtomas/blocks-asm/tags", + "blobs_url": "https://api.github.com/repos/dtomas/blocks-asm/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dtomas/blocks-asm/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dtomas/blocks-asm/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dtomas/blocks-asm/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dtomas/blocks-asm/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dtomas/blocks-asm/languages", + "stargazers_url": "https://api.github.com/repos/dtomas/blocks-asm/stargazers", + "contributors_url": "https://api.github.com/repos/dtomas/blocks-asm/contributors", + "subscribers_url": "https://api.github.com/repos/dtomas/blocks-asm/subscribers", + "subscription_url": "https://api.github.com/repos/dtomas/blocks-asm/subscription", + "commits_url": "https://api.github.com/repos/dtomas/blocks-asm/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dtomas/blocks-asm/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dtomas/blocks-asm/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dtomas/blocks-asm/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dtomas/blocks-asm/contents/{+path}", + "compare_url": "https://api.github.com/repos/dtomas/blocks-asm/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dtomas/blocks-asm/merges", + "archive_url": "https://api.github.com/repos/dtomas/blocks-asm/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dtomas/blocks-asm/downloads", + "issues_url": "https://api.github.com/repos/dtomas/blocks-asm/issues{/number}", + "pulls_url": "https://api.github.com/repos/dtomas/blocks-asm/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dtomas/blocks-asm/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dtomas/blocks-asm/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dtomas/blocks-asm/labels{/name}", + "releases_url": "https://api.github.com/repos/dtomas/blocks-asm/releases{/id}", + "deployments_url": "https://api.github.com/repos/dtomas/blocks-asm/deployments", + "created_at": "2015-08-29T17:27:12Z", + "updated_at": "2015-09-11T22:38:55Z", + "pushed_at": "2015-09-11T22:38:54Z", + "git_url": "git://github.com/dtomas/blocks-asm.git", + "ssh_url": "git@github.com:dtomas/blocks-asm.git", + "clone_url": "https://github.com/dtomas/blocks-asm.git", + "svn_url": "https://github.com/dtomas/blocks-asm", + "homepage": "", + "size": 392, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.2558155 + }, + { + "id": 34184497, + "name": "nand2tetris", + "full_name": "yanenok/nand2tetris", + "owner": { + "login": "yanenok", + "id": 5149867, + "avatar_url": "https://avatars.githubusercontent.com/u/5149867?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yanenok", + "html_url": "https://github.com/yanenok", + "followers_url": "https://api.github.com/users/yanenok/followers", + "following_url": "https://api.github.com/users/yanenok/following{/other_user}", + "gists_url": "https://api.github.com/users/yanenok/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yanenok/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yanenok/subscriptions", + "organizations_url": "https://api.github.com/users/yanenok/orgs", + "repos_url": "https://api.github.com/users/yanenok/repos", + "events_url": "https://api.github.com/users/yanenok/events{/privacy}", + "received_events_url": "https://api.github.com/users/yanenok/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yanenok/nand2tetris", + "description": "Course projects, From NAND to Tetris - http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/yanenok/nand2tetris", + "forks_url": "https://api.github.com/repos/yanenok/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/yanenok/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yanenok/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yanenok/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/yanenok/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/yanenok/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yanenok/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/yanenok/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yanenok/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yanenok/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/yanenok/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yanenok/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yanenok/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yanenok/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yanenok/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yanenok/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/yanenok/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/yanenok/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/yanenok/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/yanenok/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/yanenok/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yanenok/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yanenok/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yanenok/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yanenok/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yanenok/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yanenok/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/yanenok/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yanenok/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/yanenok/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yanenok/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yanenok/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yanenok/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yanenok/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yanenok/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yanenok/nand2tetris/deployments", + "created_at": "2015-04-18T22:04:20Z", + "updated_at": "2015-05-01T15:40:42Z", + "pushed_at": "2015-05-09T23:50:49Z", + "git_url": "git://github.com/yanenok/nand2tetris.git", + "ssh_url": "git@github.com:yanenok/nand2tetris.git", + "clone_url": "https://github.com/yanenok/nand2tetris.git", + "svn_url": "https://github.com/yanenok/nand2tetris", + "homepage": "", + "size": 332, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.2558155 + }, + { + "id": 15421107, + "name": "nand2tetris", + "full_name": "PeterSR/nand2tetris", + "owner": { + "login": "PeterSR", + "id": 222286, + "avatar_url": "https://avatars.githubusercontent.com/u/222286?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/PeterSR", + "html_url": "https://github.com/PeterSR", + "followers_url": "https://api.github.com/users/PeterSR/followers", + "following_url": "https://api.github.com/users/PeterSR/following{/other_user}", + "gists_url": "https://api.github.com/users/PeterSR/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PeterSR/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PeterSR/subscriptions", + "organizations_url": "https://api.github.com/users/PeterSR/orgs", + "repos_url": "https://api.github.com/users/PeterSR/repos", + "events_url": "https://api.github.com/users/PeterSR/events{/privacy}", + "received_events_url": "https://api.github.com/users/PeterSR/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/PeterSR/nand2tetris", + "description": "The various projects from the Nand to Tetris course", + "fork": false, + "url": "https://api.github.com/repos/PeterSR/nand2tetris", + "forks_url": "https://api.github.com/repos/PeterSR/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/PeterSR/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/PeterSR/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/PeterSR/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/PeterSR/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/PeterSR/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/PeterSR/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/PeterSR/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/PeterSR/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/PeterSR/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/PeterSR/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/PeterSR/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/PeterSR/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/PeterSR/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/PeterSR/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/PeterSR/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/PeterSR/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/PeterSR/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/PeterSR/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/PeterSR/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/PeterSR/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/PeterSR/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/PeterSR/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/PeterSR/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/PeterSR/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/PeterSR/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/PeterSR/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/PeterSR/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/PeterSR/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/PeterSR/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/PeterSR/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/PeterSR/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/PeterSR/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/PeterSR/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/PeterSR/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/PeterSR/nand2tetris/deployments", + "created_at": "2013-12-24T15:49:13Z", + "updated_at": "2013-12-24T15:51:33Z", + "pushed_at": "2013-12-24T15:51:32Z", + "git_url": "git://github.com/PeterSR/nand2tetris.git", + "ssh_url": "git@github.com:PeterSR/nand2tetris.git", + "clone_url": "https://github.com/PeterSR/nand2tetris.git", + "svn_url": "https://github.com/PeterSR/nand2tetris", + "homepage": null, + "size": 1368, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.2394085 + }, + { + "id": 16673419, + "name": "nand2tetris", + "full_name": "apeshape/nand2tetris", + "owner": { + "login": "apeshape", + "id": 467144, + "avatar_url": "https://avatars.githubusercontent.com/u/467144?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/apeshape", + "html_url": "https://github.com/apeshape", + "followers_url": "https://api.github.com/users/apeshape/followers", + "following_url": "https://api.github.com/users/apeshape/following{/other_user}", + "gists_url": "https://api.github.com/users/apeshape/gists{/gist_id}", + "starred_url": "https://api.github.com/users/apeshape/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/apeshape/subscriptions", + "organizations_url": "https://api.github.com/users/apeshape/orgs", + "repos_url": "https://api.github.com/users/apeshape/repos", + "events_url": "https://api.github.com/users/apeshape/events{/privacy}", + "received_events_url": "https://api.github.com/users/apeshape/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/apeshape/nand2tetris", + "description": "My solutions for the nand 2 tetris book", + "fork": false, + "url": "https://api.github.com/repos/apeshape/nand2tetris", + "forks_url": "https://api.github.com/repos/apeshape/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/apeshape/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/apeshape/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/apeshape/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/apeshape/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/apeshape/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/apeshape/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/apeshape/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/apeshape/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/apeshape/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/apeshape/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/apeshape/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/apeshape/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/apeshape/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/apeshape/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/apeshape/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/apeshape/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/apeshape/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/apeshape/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/apeshape/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/apeshape/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/apeshape/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/apeshape/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/apeshape/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/apeshape/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/apeshape/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/apeshape/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/apeshape/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/apeshape/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/apeshape/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/apeshape/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/apeshape/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/apeshape/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/apeshape/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/apeshape/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/apeshape/nand2tetris/deployments", + "created_at": "2014-02-09T19:20:05Z", + "updated_at": "2014-02-13T22:48:42Z", + "pushed_at": "2014-02-13T22:48:42Z", + "git_url": "git://github.com/apeshape/nand2tetris.git", + "ssh_url": "git@github.com:apeshape/nand2tetris.git", + "clone_url": "https://github.com/apeshape/nand2tetris.git", + "svn_url": "https://github.com/apeshape/nand2tetris", + "homepage": null, + "size": 184, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.2394085 + }, + { + "id": 33876679, + "name": "nand2tetris", + "full_name": "lamflam/nand2tetris", + "owner": { + "login": "lamflam", + "id": 3680882, + "avatar_url": "https://avatars.githubusercontent.com/u/3680882?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lamflam", + "html_url": "https://github.com/lamflam", + "followers_url": "https://api.github.com/users/lamflam/followers", + "following_url": "https://api.github.com/users/lamflam/following{/other_user}", + "gists_url": "https://api.github.com/users/lamflam/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lamflam/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lamflam/subscriptions", + "organizations_url": "https://api.github.com/users/lamflam/orgs", + "repos_url": "https://api.github.com/users/lamflam/repos", + "events_url": "https://api.github.com/users/lamflam/events{/privacy}", + "received_events_url": "https://api.github.com/users/lamflam/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lamflam/nand2tetris", + "description": "Course work for the From Nand To Tetris course", + "fork": false, + "url": "https://api.github.com/repos/lamflam/nand2tetris", + "forks_url": "https://api.github.com/repos/lamflam/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lamflam/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lamflam/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lamflam/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lamflam/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lamflam/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lamflam/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lamflam/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lamflam/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lamflam/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lamflam/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lamflam/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lamflam/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lamflam/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lamflam/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lamflam/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lamflam/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lamflam/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lamflam/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lamflam/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lamflam/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lamflam/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lamflam/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lamflam/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lamflam/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lamflam/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lamflam/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lamflam/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lamflam/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lamflam/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lamflam/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lamflam/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lamflam/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lamflam/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lamflam/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lamflam/nand2tetris/deployments", + "created_at": "2015-04-13T15:27:38Z", + "updated_at": "2015-04-17T12:16:09Z", + "pushed_at": "2015-07-23T14:28:24Z", + "git_url": "git://github.com/lamflam/nand2tetris.git", + "ssh_url": "git@github.com:lamflam/nand2tetris.git", + "clone_url": "https://github.com/lamflam/nand2tetris.git", + "svn_url": "https://github.com/lamflam/nand2tetris", + "homepage": null, + "size": 680, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "develop", + "score": 4.2394085 + }, + { + "id": 42212525, + "name": "Tetris-Game", + "full_name": "alifia2306/Tetris-Game", + "owner": { + "login": "alifia2306", + "id": 10080145, + "avatar_url": "https://avatars.githubusercontent.com/u/10080145?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/alifia2306", + "html_url": "https://github.com/alifia2306", + "followers_url": "https://api.github.com/users/alifia2306/followers", + "following_url": "https://api.github.com/users/alifia2306/following{/other_user}", + "gists_url": "https://api.github.com/users/alifia2306/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alifia2306/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alifia2306/subscriptions", + "organizations_url": "https://api.github.com/users/alifia2306/orgs", + "repos_url": "https://api.github.com/users/alifia2306/repos", + "events_url": "https://api.github.com/users/alifia2306/events{/privacy}", + "received_events_url": "https://api.github.com/users/alifia2306/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/alifia2306/Tetris-Game", + "description": "Implemented Device drivers for Video, timers and keyboard using Traps and writing Wrappers for them in LC4 Toy Assembly Language. Used these wrappers to implement a Tetris.", + "fork": false, + "url": "https://api.github.com/repos/alifia2306/Tetris-Game", + "forks_url": "https://api.github.com/repos/alifia2306/Tetris-Game/forks", + "keys_url": "https://api.github.com/repos/alifia2306/Tetris-Game/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/alifia2306/Tetris-Game/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/alifia2306/Tetris-Game/teams", + "hooks_url": "https://api.github.com/repos/alifia2306/Tetris-Game/hooks", + "issue_events_url": "https://api.github.com/repos/alifia2306/Tetris-Game/issues/events{/number}", + "events_url": "https://api.github.com/repos/alifia2306/Tetris-Game/events", + "assignees_url": "https://api.github.com/repos/alifia2306/Tetris-Game/assignees{/user}", + "branches_url": "https://api.github.com/repos/alifia2306/Tetris-Game/branches{/branch}", + "tags_url": "https://api.github.com/repos/alifia2306/Tetris-Game/tags", + "blobs_url": "https://api.github.com/repos/alifia2306/Tetris-Game/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/alifia2306/Tetris-Game/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/alifia2306/Tetris-Game/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/alifia2306/Tetris-Game/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/alifia2306/Tetris-Game/statuses/{sha}", + "languages_url": "https://api.github.com/repos/alifia2306/Tetris-Game/languages", + "stargazers_url": "https://api.github.com/repos/alifia2306/Tetris-Game/stargazers", + "contributors_url": "https://api.github.com/repos/alifia2306/Tetris-Game/contributors", + "subscribers_url": "https://api.github.com/repos/alifia2306/Tetris-Game/subscribers", + "subscription_url": "https://api.github.com/repos/alifia2306/Tetris-Game/subscription", + "commits_url": "https://api.github.com/repos/alifia2306/Tetris-Game/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/alifia2306/Tetris-Game/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/alifia2306/Tetris-Game/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/alifia2306/Tetris-Game/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/alifia2306/Tetris-Game/contents/{+path}", + "compare_url": "https://api.github.com/repos/alifia2306/Tetris-Game/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/alifia2306/Tetris-Game/merges", + "archive_url": "https://api.github.com/repos/alifia2306/Tetris-Game/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/alifia2306/Tetris-Game/downloads", + "issues_url": "https://api.github.com/repos/alifia2306/Tetris-Game/issues{/number}", + "pulls_url": "https://api.github.com/repos/alifia2306/Tetris-Game/pulls{/number}", + "milestones_url": "https://api.github.com/repos/alifia2306/Tetris-Game/milestones{/number}", + "notifications_url": "https://api.github.com/repos/alifia2306/Tetris-Game/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/alifia2306/Tetris-Game/labels{/name}", + "releases_url": "https://api.github.com/repos/alifia2306/Tetris-Game/releases{/id}", + "deployments_url": "https://api.github.com/repos/alifia2306/Tetris-Game/deployments", + "created_at": "2015-09-10T00:40:42Z", + "updated_at": "2015-09-10T00:59:43Z", + "pushed_at": "2015-09-10T00:40:44Z", + "git_url": "git://github.com/alifia2306/Tetris-Game.git", + "ssh_url": "git@github.com:alifia2306/Tetris-Game.git", + "clone_url": "https://github.com/alifia2306/Tetris-Game.git", + "svn_url": "https://github.com/alifia2306/Tetris-Game", + "homepage": "", + "size": 112, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.0354867 + }, + { + "id": 57215654, + "name": "nand_tetris", + "full_name": "pcorliss/nand_tetris", + "owner": { + "login": "pcorliss", + "id": 141914, + "avatar_url": "https://avatars.githubusercontent.com/u/141914?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pcorliss", + "html_url": "https://github.com/pcorliss", + "followers_url": "https://api.github.com/users/pcorliss/followers", + "following_url": "https://api.github.com/users/pcorliss/following{/other_user}", + "gists_url": "https://api.github.com/users/pcorliss/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pcorliss/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pcorliss/subscriptions", + "organizations_url": "https://api.github.com/users/pcorliss/orgs", + "repos_url": "https://api.github.com/users/pcorliss/repos", + "events_url": "https://api.github.com/users/pcorliss/events{/privacy}", + "received_events_url": "https://api.github.com/users/pcorliss/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/pcorliss/nand_tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/pcorliss/nand_tetris", + "forks_url": "https://api.github.com/repos/pcorliss/nand_tetris/forks", + "keys_url": "https://api.github.com/repos/pcorliss/nand_tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pcorliss/nand_tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pcorliss/nand_tetris/teams", + "hooks_url": "https://api.github.com/repos/pcorliss/nand_tetris/hooks", + "issue_events_url": "https://api.github.com/repos/pcorliss/nand_tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/pcorliss/nand_tetris/events", + "assignees_url": "https://api.github.com/repos/pcorliss/nand_tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/pcorliss/nand_tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/pcorliss/nand_tetris/tags", + "blobs_url": "https://api.github.com/repos/pcorliss/nand_tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pcorliss/nand_tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pcorliss/nand_tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pcorliss/nand_tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pcorliss/nand_tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pcorliss/nand_tetris/languages", + "stargazers_url": "https://api.github.com/repos/pcorliss/nand_tetris/stargazers", + "contributors_url": "https://api.github.com/repos/pcorliss/nand_tetris/contributors", + "subscribers_url": "https://api.github.com/repos/pcorliss/nand_tetris/subscribers", + "subscription_url": "https://api.github.com/repos/pcorliss/nand_tetris/subscription", + "commits_url": "https://api.github.com/repos/pcorliss/nand_tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pcorliss/nand_tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pcorliss/nand_tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pcorliss/nand_tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pcorliss/nand_tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/pcorliss/nand_tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pcorliss/nand_tetris/merges", + "archive_url": "https://api.github.com/repos/pcorliss/nand_tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pcorliss/nand_tetris/downloads", + "issues_url": "https://api.github.com/repos/pcorliss/nand_tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/pcorliss/nand_tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pcorliss/nand_tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pcorliss/nand_tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pcorliss/nand_tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/pcorliss/nand_tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/pcorliss/nand_tetris/deployments", + "created_at": "2016-04-27T13:30:52Z", + "updated_at": "2016-04-27T13:31:52Z", + "pushed_at": "2016-04-27T13:31:48Z", + "git_url": "git://github.com/pcorliss/nand_tetris.git", + "ssh_url": "git@github.com:pcorliss/nand_tetris.git", + "clone_url": "https://github.com/pcorliss/nand_tetris.git", + "svn_url": "https://github.com/pcorliss/nand_tetris", + "homepage": null, + "size": 173, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.0354867 + }, + { + "id": 61306821, + "name": "Tetris-AOC", + "full_name": "lucasbretana/Tetris-AOC", + "owner": { + "login": "lucasbretana", + "id": 7704537, + "avatar_url": "https://avatars.githubusercontent.com/u/7704537?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lucasbretana", + "html_url": "https://github.com/lucasbretana", + "followers_url": "https://api.github.com/users/lucasbretana/followers", + "following_url": "https://api.github.com/users/lucasbretana/following{/other_user}", + "gists_url": "https://api.github.com/users/lucasbretana/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lucasbretana/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lucasbretana/subscriptions", + "organizations_url": "https://api.github.com/users/lucasbretana/orgs", + "repos_url": "https://api.github.com/users/lucasbretana/repos", + "events_url": "https://api.github.com/users/lucasbretana/events{/privacy}", + "received_events_url": "https://api.github.com/users/lucasbretana/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lucasbretana/Tetris-AOC", + "description": "It's the game tetris created using the MARS, MIPS Simulator, assembly languge. ", + "fork": false, + "url": "https://api.github.com/repos/lucasbretana/Tetris-AOC", + "forks_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/forks", + "keys_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/teams", + "hooks_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/hooks", + "issue_events_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/issues/events{/number}", + "events_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/events", + "assignees_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/assignees{/user}", + "branches_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/branches{/branch}", + "tags_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/tags", + "blobs_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/languages", + "stargazers_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/stargazers", + "contributors_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/contributors", + "subscribers_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/subscribers", + "subscription_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/subscription", + "commits_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/contents/{+path}", + "compare_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/merges", + "archive_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/downloads", + "issues_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/issues{/number}", + "pulls_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/labels{/name}", + "releases_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/releases{/id}", + "deployments_url": "https://api.github.com/repos/lucasbretana/Tetris-AOC/deployments", + "created_at": "2016-06-16T15:53:31Z", + "updated_at": "2016-06-17T01:40:38Z", + "pushed_at": "2016-06-22T00:35:07Z", + "git_url": "git://github.com/lucasbretana/Tetris-AOC.git", + "ssh_url": "git@github.com:lucasbretana/Tetris-AOC.git", + "clone_url": "https://github.com/lucasbretana/Tetris-AOC.git", + "svn_url": "https://github.com/lucasbretana/Tetris-AOC", + "homepage": null, + "size": 69, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.0354867 + }, + { + "id": 16295007, + "name": "VGA_Tetris", + "full_name": "JaCzekanski/VGA_Tetris", + "owner": { + "login": "JaCzekanski", + "id": 3662990, + "avatar_url": "https://avatars.githubusercontent.com/u/3662990?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/JaCzekanski", + "html_url": "https://github.com/JaCzekanski", + "followers_url": "https://api.github.com/users/JaCzekanski/followers", + "following_url": "https://api.github.com/users/JaCzekanski/following{/other_user}", + "gists_url": "https://api.github.com/users/JaCzekanski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JaCzekanski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JaCzekanski/subscriptions", + "organizations_url": "https://api.github.com/users/JaCzekanski/orgs", + "repos_url": "https://api.github.com/users/JaCzekanski/repos", + "events_url": "https://api.github.com/users/JaCzekanski/events{/privacy}", + "received_events_url": "https://api.github.com/users/JaCzekanski/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/JaCzekanski/VGA_Tetris", + "description": "assembly, atmega8, software vga", + "fork": false, + "url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris", + "forks_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/forks", + "keys_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/teams", + "hooks_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/events", + "assignees_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/tags", + "blobs_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/languages", + "stargazers_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/subscription", + "commits_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/merges", + "archive_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/downloads", + "issues_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/JaCzekanski/VGA_Tetris/deployments", + "created_at": "2014-01-27T22:23:04Z", + "updated_at": "2014-01-27T22:42:48Z", + "pushed_at": "2014-01-27T22:42:47Z", + "git_url": "git://github.com/JaCzekanski/VGA_Tetris.git", + "ssh_url": "git@github.com:JaCzekanski/VGA_Tetris.git", + "clone_url": "https://github.com/JaCzekanski/VGA_Tetris.git", + "svn_url": "https://github.com/JaCzekanski/VGA_Tetris", + "homepage": "", + "size": 3872, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 4.0160136 + }, + { + "id": 40766592, + "name": "nand2tetris", + "full_name": "Fuffi/nand2tetris", + "owner": { + "login": "Fuffi", + "id": 1379179, + "avatar_url": "https://avatars.githubusercontent.com/u/1379179?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Fuffi", + "html_url": "https://github.com/Fuffi", + "followers_url": "https://api.github.com/users/Fuffi/followers", + "following_url": "https://api.github.com/users/Fuffi/following{/other_user}", + "gists_url": "https://api.github.com/users/Fuffi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Fuffi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Fuffi/subscriptions", + "organizations_url": "https://api.github.com/users/Fuffi/orgs", + "repos_url": "https://api.github.com/users/Fuffi/repos", + "events_url": "https://api.github.com/users/Fuffi/events{/privacy}", + "received_events_url": "https://api.github.com/users/Fuffi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Fuffi/nand2tetris", + "description": "Building a working computer, with OS and a Tetris game, starting from NAND gates", + "fork": false, + "url": "https://api.github.com/repos/Fuffi/nand2tetris", + "forks_url": "https://api.github.com/repos/Fuffi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Fuffi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Fuffi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Fuffi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Fuffi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Fuffi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Fuffi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Fuffi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Fuffi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Fuffi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Fuffi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Fuffi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Fuffi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Fuffi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Fuffi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Fuffi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Fuffi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Fuffi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Fuffi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Fuffi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Fuffi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Fuffi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Fuffi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Fuffi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Fuffi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Fuffi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Fuffi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Fuffi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Fuffi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Fuffi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Fuffi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Fuffi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Fuffi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Fuffi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Fuffi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Fuffi/nand2tetris/deployments", + "created_at": "2015-08-15T15:11:20Z", + "updated_at": "2015-08-19T23:22:45Z", + "pushed_at": "2015-08-29T09:14:58Z", + "git_url": "git://github.com/Fuffi/nand2tetris.git", + "ssh_url": "git@github.com:Fuffi/nand2tetris.git", + "clone_url": "https://github.com/Fuffi/nand2tetris.git", + "svn_url": "https://github.com/Fuffi/nand2tetris", + "homepage": "", + "size": 368, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4189136 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:11 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "483500", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "29", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "link": "; rel=\"next\", ; rel=\"last\"", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "593010132f82159af0ded24b4932e109", + "x-github-request-id": "AE1408AB:5527:92C4DD2:5769F4AE" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/repositories?q=tetris+language%3Aassembly&sort=stars&order=desc&type=all&per_page=100&page=2&q=tetris+language:assembly&sort=stars&order=desc&type=all&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 473, + "incomplete_results": false, + "items": [ + { + "id": 36068587, + "name": "nand2tetris", + "full_name": "guptadivyansh/nand2tetris", + "owner": { + "login": "guptadivyansh", + "id": 9139390, + "avatar_url": "https://avatars.githubusercontent.com/u/9139390?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/guptadivyansh", + "html_url": "https://github.com/guptadivyansh", + "followers_url": "https://api.github.com/users/guptadivyansh/followers", + "following_url": "https://api.github.com/users/guptadivyansh/following{/other_user}", + "gists_url": "https://api.github.com/users/guptadivyansh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/guptadivyansh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/guptadivyansh/subscriptions", + "organizations_url": "https://api.github.com/users/guptadivyansh/orgs", + "repos_url": "https://api.github.com/users/guptadivyansh/repos", + "events_url": "https://api.github.com/users/guptadivyansh/events{/privacy}", + "received_events_url": "https://api.github.com/users/guptadivyansh/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/guptadivyansh/nand2tetris", + "description": "Projectwork for Nand To Tetris (Part 1) course on Coursera.com", + "fork": false, + "url": "https://api.github.com/repos/guptadivyansh/nand2tetris", + "forks_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/guptadivyansh/nand2tetris/deployments", + "created_at": "2015-05-22T11:23:27Z", + "updated_at": "2015-05-25T11:56:47Z", + "pushed_at": "2015-05-25T11:56:45Z", + "git_url": "git://github.com/guptadivyansh/nand2tetris.git", + "ssh_url": "git@github.com:guptadivyansh/nand2tetris.git", + "clone_url": "https://github.com/guptadivyansh/nand2tetris.git", + "svn_url": "https://github.com/guptadivyansh/nand2tetris", + "homepage": null, + "size": 144, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4164693 + }, + { + "id": 45473772, + "name": "nand2tetris", + "full_name": "Coaxial/nand2tetris", + "owner": { + "login": "Coaxial", + "id": 2927869, + "avatar_url": "https://avatars.githubusercontent.com/u/2927869?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Coaxial", + "html_url": "https://github.com/Coaxial", + "followers_url": "https://api.github.com/users/Coaxial/followers", + "following_url": "https://api.github.com/users/Coaxial/following{/other_user}", + "gists_url": "https://api.github.com/users/Coaxial/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Coaxial/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Coaxial/subscriptions", + "organizations_url": "https://api.github.com/users/Coaxial/orgs", + "repos_url": "https://api.github.com/users/Coaxial/repos", + "events_url": "https://api.github.com/users/Coaxial/events{/privacy}", + "received_events_url": "https://api.github.com/users/Coaxial/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Coaxial/nand2tetris", + "description": "Write a Tetris game starting with building computer chips from NAND gates", + "fork": false, + "url": "https://api.github.com/repos/Coaxial/nand2tetris", + "forks_url": "https://api.github.com/repos/Coaxial/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Coaxial/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Coaxial/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Coaxial/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Coaxial/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Coaxial/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Coaxial/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Coaxial/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Coaxial/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Coaxial/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Coaxial/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Coaxial/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Coaxial/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Coaxial/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Coaxial/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Coaxial/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Coaxial/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Coaxial/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Coaxial/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Coaxial/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Coaxial/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Coaxial/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Coaxial/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Coaxial/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Coaxial/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Coaxial/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Coaxial/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Coaxial/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Coaxial/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Coaxial/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Coaxial/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Coaxial/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Coaxial/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Coaxial/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Coaxial/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Coaxial/nand2tetris/deployments", + "created_at": "2015-11-03T14:57:59Z", + "updated_at": "2015-11-03T14:58:54Z", + "pushed_at": "2015-11-21T23:45:59Z", + "git_url": "git://github.com/Coaxial/nand2tetris.git", + "ssh_url": "git@github.com:Coaxial/nand2tetris.git", + "clone_url": "https://github.com/Coaxial/nand2tetris.git", + "svn_url": "https://github.com/Coaxial/nand2tetris", + "homepage": null, + "size": 160, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4164693 + }, + { + "id": 43817309, + "name": "nand2tetris", + "full_name": "kronosapiens/nand2tetris", + "owner": { + "login": "kronosapiens", + "id": 1874062, + "avatar_url": "https://avatars.githubusercontent.com/u/1874062?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kronosapiens", + "html_url": "https://github.com/kronosapiens", + "followers_url": "https://api.github.com/users/kronosapiens/followers", + "following_url": "https://api.github.com/users/kronosapiens/following{/other_user}", + "gists_url": "https://api.github.com/users/kronosapiens/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kronosapiens/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kronosapiens/subscriptions", + "organizations_url": "https://api.github.com/users/kronosapiens/orgs", + "repos_url": "https://api.github.com/users/kronosapiens/repos", + "events_url": "https://api.github.com/users/kronosapiens/events{/privacy}", + "received_events_url": "https://api.github.com/users/kronosapiens/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kronosapiens/nand2tetris", + "description": "Work done for \"From Nand to Tetris: Building a Modern Computer from First Principles\"", + "fork": false, + "url": "https://api.github.com/repos/kronosapiens/nand2tetris", + "forks_url": "https://api.github.com/repos/kronosapiens/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kronosapiens/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kronosapiens/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kronosapiens/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kronosapiens/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kronosapiens/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kronosapiens/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kronosapiens/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kronosapiens/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kronosapiens/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kronosapiens/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kronosapiens/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kronosapiens/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kronosapiens/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kronosapiens/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kronosapiens/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kronosapiens/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kronosapiens/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kronosapiens/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kronosapiens/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kronosapiens/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kronosapiens/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kronosapiens/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kronosapiens/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kronosapiens/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kronosapiens/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kronosapiens/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kronosapiens/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kronosapiens/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kronosapiens/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kronosapiens/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kronosapiens/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kronosapiens/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kronosapiens/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kronosapiens/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kronosapiens/nand2tetris/deployments", + "created_at": "2015-10-07T13:23:28Z", + "updated_at": "2015-12-16T19:52:39Z", + "pushed_at": "2016-01-07T14:37:07Z", + "git_url": "git://github.com/kronosapiens/nand2tetris.git", + "ssh_url": "git@github.com:kronosapiens/nand2tetris.git", + "clone_url": "https://github.com/kronosapiens/nand2tetris.git", + "svn_url": "https://github.com/kronosapiens/nand2tetris", + "homepage": null, + "size": 249, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4164693 + }, + { + "id": 51764516, + "name": "nand2tetris", + "full_name": "tommy0521/nand2tetris", + "owner": { + "login": "tommy0521", + "id": 6337745, + "avatar_url": "https://avatars.githubusercontent.com/u/6337745?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tommy0521", + "html_url": "https://github.com/tommy0521", + "followers_url": "https://api.github.com/users/tommy0521/followers", + "following_url": "https://api.github.com/users/tommy0521/following{/other_user}", + "gists_url": "https://api.github.com/users/tommy0521/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tommy0521/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tommy0521/subscriptions", + "organizations_url": "https://api.github.com/users/tommy0521/orgs", + "repos_url": "https://api.github.com/users/tommy0521/repos", + "events_url": "https://api.github.com/users/tommy0521/events{/privacy}", + "received_events_url": "https://api.github.com/users/tommy0521/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tommy0521/nand2tetris", + "description": "MOOC Build a Modern Computer from First Principles: From Nand to Tetris", + "fork": false, + "url": "https://api.github.com/repos/tommy0521/nand2tetris", + "forks_url": "https://api.github.com/repos/tommy0521/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tommy0521/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tommy0521/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tommy0521/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tommy0521/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tommy0521/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tommy0521/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tommy0521/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tommy0521/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tommy0521/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tommy0521/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tommy0521/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tommy0521/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tommy0521/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tommy0521/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tommy0521/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tommy0521/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tommy0521/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tommy0521/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tommy0521/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tommy0521/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tommy0521/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tommy0521/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tommy0521/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tommy0521/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tommy0521/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tommy0521/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tommy0521/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tommy0521/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tommy0521/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tommy0521/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tommy0521/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tommy0521/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tommy0521/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tommy0521/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tommy0521/nand2tetris/deployments", + "created_at": "2016-02-15T15:24:31Z", + "updated_at": "2016-02-15T15:59:53Z", + "pushed_at": "2016-02-17T05:18:22Z", + "git_url": "git://github.com/tommy0521/nand2tetris.git", + "ssh_url": "git@github.com:tommy0521/nand2tetris.git", + "clone_url": "https://github.com/tommy0521/nand2tetris.git", + "svn_url": "https://github.com/tommy0521/nand2tetris", + "homepage": null, + "size": 159, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4164693 + }, + { + "id": 13575858, + "name": "x86-Tetris", + "full_name": "kylelk/x86-Tetris", + "owner": { + "login": "kylelk", + "id": 5159173, + "avatar_url": "https://avatars.githubusercontent.com/u/5159173?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kylelk", + "html_url": "https://github.com/kylelk", + "followers_url": "https://api.github.com/users/kylelk/followers", + "following_url": "https://api.github.com/users/kylelk/following{/other_user}", + "gists_url": "https://api.github.com/users/kylelk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kylelk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kylelk/subscriptions", + "organizations_url": "https://api.github.com/users/kylelk/orgs", + "repos_url": "https://api.github.com/users/kylelk/repos", + "events_url": "https://api.github.com/users/kylelk/events{/privacy}", + "received_events_url": "https://api.github.com/users/kylelk/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kylelk/x86-Tetris", + "description": "This is a 16bit x86 tetris done for Organization Of Computer Systems class at AU.", + "fork": false, + "url": "https://api.github.com/repos/kylelk/x86-Tetris", + "forks_url": "https://api.github.com/repos/kylelk/x86-Tetris/forks", + "keys_url": "https://api.github.com/repos/kylelk/x86-Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kylelk/x86-Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kylelk/x86-Tetris/teams", + "hooks_url": "https://api.github.com/repos/kylelk/x86-Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kylelk/x86-Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kylelk/x86-Tetris/events", + "assignees_url": "https://api.github.com/repos/kylelk/x86-Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kylelk/x86-Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kylelk/x86-Tetris/tags", + "blobs_url": "https://api.github.com/repos/kylelk/x86-Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kylelk/x86-Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kylelk/x86-Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kylelk/x86-Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kylelk/x86-Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kylelk/x86-Tetris/languages", + "stargazers_url": "https://api.github.com/repos/kylelk/x86-Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kylelk/x86-Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kylelk/x86-Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kylelk/x86-Tetris/subscription", + "commits_url": "https://api.github.com/repos/kylelk/x86-Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kylelk/x86-Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kylelk/x86-Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kylelk/x86-Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kylelk/x86-Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kylelk/x86-Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kylelk/x86-Tetris/merges", + "archive_url": "https://api.github.com/repos/kylelk/x86-Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kylelk/x86-Tetris/downloads", + "issues_url": "https://api.github.com/repos/kylelk/x86-Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kylelk/x86-Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kylelk/x86-Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kylelk/x86-Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kylelk/x86-Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kylelk/x86-Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kylelk/x86-Tetris/deployments", + "created_at": "2013-10-14T23:20:59Z", + "updated_at": "2014-07-31T18:58:16Z", + "pushed_at": "2013-03-09T18:35:17Z", + "git_url": "git://github.com/kylelk/x86-Tetris.git", + "ssh_url": "git@github.com:kylelk/x86-Tetris.git", + "clone_url": "https://github.com/kylelk/x86-Tetris.git", + "svn_url": "https://github.com/kylelk/x86-Tetris", + "homepage": null, + "size": 64, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4162421 + }, + { + "id": 41776113, + "name": "nand2tetris", + "full_name": "dwayne/nand2tetris", + "owner": { + "login": "dwayne", + "id": 319231, + "avatar_url": "https://avatars.githubusercontent.com/u/319231?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dwayne", + "html_url": "https://github.com/dwayne", + "followers_url": "https://api.github.com/users/dwayne/followers", + "following_url": "https://api.github.com/users/dwayne/following{/other_user}", + "gists_url": "https://api.github.com/users/dwayne/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dwayne/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dwayne/subscriptions", + "organizations_url": "https://api.github.com/users/dwayne/orgs", + "repos_url": "https://api.github.com/users/dwayne/repos", + "events_url": "https://api.github.com/users/dwayne/events{/privacy}", + "received_events_url": "https://api.github.com/users/dwayne/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dwayne/nand2tetris", + "description": "From NAND to Tetris - Building a Modern Computer From First Principles", + "fork": false, + "url": "https://api.github.com/repos/dwayne/nand2tetris", + "forks_url": "https://api.github.com/repos/dwayne/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dwayne/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dwayne/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dwayne/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dwayne/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dwayne/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dwayne/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dwayne/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dwayne/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dwayne/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dwayne/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dwayne/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dwayne/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dwayne/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dwayne/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dwayne/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dwayne/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dwayne/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dwayne/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dwayne/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dwayne/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dwayne/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dwayne/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dwayne/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dwayne/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dwayne/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dwayne/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dwayne/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dwayne/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dwayne/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dwayne/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dwayne/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dwayne/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dwayne/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dwayne/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dwayne/nand2tetris/deployments", + "created_at": "2015-09-02T02:54:58Z", + "updated_at": "2015-09-02T10:24:15Z", + "pushed_at": "2015-09-05T02:20:27Z", + "git_url": "git://github.com/dwayne/nand2tetris.git", + "ssh_url": "git@github.com:dwayne/nand2tetris.git", + "clone_url": "https://github.com/dwayne/nand2tetris.git", + "svn_url": "https://github.com/dwayne/nand2tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 660, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4162421 + }, + { + "id": 50686388, + "name": "myassembler", + "full_name": "netskink/myassembler", + "owner": { + "login": "netskink", + "id": 4422172, + "avatar_url": "https://avatars.githubusercontent.com/u/4422172?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/netskink", + "html_url": "https://github.com/netskink", + "followers_url": "https://api.github.com/users/netskink/followers", + "following_url": "https://api.github.com/users/netskink/following{/other_user}", + "gists_url": "https://api.github.com/users/netskink/gists{/gist_id}", + "starred_url": "https://api.github.com/users/netskink/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/netskink/subscriptions", + "organizations_url": "https://api.github.com/users/netskink/orgs", + "repos_url": "https://api.github.com/users/netskink/repos", + "events_url": "https://api.github.com/users/netskink/events{/privacy}", + "received_events_url": "https://api.github.com/users/netskink/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/netskink/myassembler", + "description": "The assembler I wrote for nand to tetris in objective-c", + "fork": false, + "url": "https://api.github.com/repos/netskink/myassembler", + "forks_url": "https://api.github.com/repos/netskink/myassembler/forks", + "keys_url": "https://api.github.com/repos/netskink/myassembler/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/netskink/myassembler/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/netskink/myassembler/teams", + "hooks_url": "https://api.github.com/repos/netskink/myassembler/hooks", + "issue_events_url": "https://api.github.com/repos/netskink/myassembler/issues/events{/number}", + "events_url": "https://api.github.com/repos/netskink/myassembler/events", + "assignees_url": "https://api.github.com/repos/netskink/myassembler/assignees{/user}", + "branches_url": "https://api.github.com/repos/netskink/myassembler/branches{/branch}", + "tags_url": "https://api.github.com/repos/netskink/myassembler/tags", + "blobs_url": "https://api.github.com/repos/netskink/myassembler/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/netskink/myassembler/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/netskink/myassembler/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/netskink/myassembler/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/netskink/myassembler/statuses/{sha}", + "languages_url": "https://api.github.com/repos/netskink/myassembler/languages", + "stargazers_url": "https://api.github.com/repos/netskink/myassembler/stargazers", + "contributors_url": "https://api.github.com/repos/netskink/myassembler/contributors", + "subscribers_url": "https://api.github.com/repos/netskink/myassembler/subscribers", + "subscription_url": "https://api.github.com/repos/netskink/myassembler/subscription", + "commits_url": "https://api.github.com/repos/netskink/myassembler/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/netskink/myassembler/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/netskink/myassembler/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/netskink/myassembler/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/netskink/myassembler/contents/{+path}", + "compare_url": "https://api.github.com/repos/netskink/myassembler/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/netskink/myassembler/merges", + "archive_url": "https://api.github.com/repos/netskink/myassembler/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/netskink/myassembler/downloads", + "issues_url": "https://api.github.com/repos/netskink/myassembler/issues{/number}", + "pulls_url": "https://api.github.com/repos/netskink/myassembler/pulls{/number}", + "milestones_url": "https://api.github.com/repos/netskink/myassembler/milestones{/number}", + "notifications_url": "https://api.github.com/repos/netskink/myassembler/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/netskink/myassembler/labels{/name}", + "releases_url": "https://api.github.com/repos/netskink/myassembler/releases{/id}", + "deployments_url": "https://api.github.com/repos/netskink/myassembler/deployments", + "created_at": "2016-01-29T19:35:07Z", + "updated_at": "2016-01-29T19:42:30Z", + "pushed_at": "2016-01-29T19:45:11Z", + "git_url": "git://github.com/netskink/myassembler.git", + "ssh_url": "git@github.com:netskink/myassembler.git", + "clone_url": "https://github.com/netskink/myassembler.git", + "svn_url": "https://github.com/netskink/myassembler", + "homepage": null, + "size": 72, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4162421 + }, + { + "id": 54340611, + "name": "nand2tetris", + "full_name": "devmeyster/nand2tetris", + "owner": { + "login": "devmeyster", + "id": 6244629, + "avatar_url": "https://avatars.githubusercontent.com/u/6244629?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/devmeyster", + "html_url": "https://github.com/devmeyster", + "followers_url": "https://api.github.com/users/devmeyster/followers", + "following_url": "https://api.github.com/users/devmeyster/following{/other_user}", + "gists_url": "https://api.github.com/users/devmeyster/gists{/gist_id}", + "starred_url": "https://api.github.com/users/devmeyster/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/devmeyster/subscriptions", + "organizations_url": "https://api.github.com/users/devmeyster/orgs", + "repos_url": "https://api.github.com/users/devmeyster/repos", + "events_url": "https://api.github.com/users/devmeyster/events{/privacy}", + "received_events_url": "https://api.github.com/users/devmeyster/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/devmeyster/nand2tetris", + "description": "Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)", + "fork": false, + "url": "https://api.github.com/repos/devmeyster/nand2tetris", + "forks_url": "https://api.github.com/repos/devmeyster/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/devmeyster/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/devmeyster/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/devmeyster/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/devmeyster/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/devmeyster/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/devmeyster/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/devmeyster/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/devmeyster/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/devmeyster/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/devmeyster/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/devmeyster/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/devmeyster/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/devmeyster/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/devmeyster/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/devmeyster/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/devmeyster/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/devmeyster/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/devmeyster/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/devmeyster/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/devmeyster/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/devmeyster/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/devmeyster/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/devmeyster/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/devmeyster/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/devmeyster/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/devmeyster/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/devmeyster/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/devmeyster/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/devmeyster/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/devmeyster/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/devmeyster/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/devmeyster/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/devmeyster/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/devmeyster/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/devmeyster/nand2tetris/deployments", + "created_at": "2016-03-20T21:10:25Z", + "updated_at": "2016-03-20T21:18:47Z", + "pushed_at": "2016-03-20T21:17:24Z", + "git_url": "git://github.com/devmeyster/nand2tetris.git", + "ssh_url": "git@github.com:devmeyster/nand2tetris.git", + "clone_url": "https://github.com/devmeyster/nand2tetris.git", + "svn_url": "https://github.com/devmeyster/nand2tetris", + "homepage": "https://www.coursera.org/learn/build-a-computer/", + "size": 511, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4001079 + }, + { + "id": 34223477, + "name": "tetris-x86", + "full_name": "austinmorgan/tetris-x86", + "owner": { + "login": "austinmorgan", + "id": 8840970, + "avatar_url": "https://avatars.githubusercontent.com/u/8840970?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/austinmorgan", + "html_url": "https://github.com/austinmorgan", + "followers_url": "https://api.github.com/users/austinmorgan/followers", + "following_url": "https://api.github.com/users/austinmorgan/following{/other_user}", + "gists_url": "https://api.github.com/users/austinmorgan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/austinmorgan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/austinmorgan/subscriptions", + "organizations_url": "https://api.github.com/users/austinmorgan/orgs", + "repos_url": "https://api.github.com/users/austinmorgan/repos", + "events_url": "https://api.github.com/users/austinmorgan/events{/privacy}", + "received_events_url": "https://api.github.com/users/austinmorgan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/austinmorgan/tetris-x86", + "description": "Pure assembly Tetris clone group project, no system calls allowed. We tried our best.", + "fork": false, + "url": "https://api.github.com/repos/austinmorgan/tetris-x86", + "forks_url": "https://api.github.com/repos/austinmorgan/tetris-x86/forks", + "keys_url": "https://api.github.com/repos/austinmorgan/tetris-x86/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/austinmorgan/tetris-x86/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/austinmorgan/tetris-x86/teams", + "hooks_url": "https://api.github.com/repos/austinmorgan/tetris-x86/hooks", + "issue_events_url": "https://api.github.com/repos/austinmorgan/tetris-x86/issues/events{/number}", + "events_url": "https://api.github.com/repos/austinmorgan/tetris-x86/events", + "assignees_url": "https://api.github.com/repos/austinmorgan/tetris-x86/assignees{/user}", + "branches_url": "https://api.github.com/repos/austinmorgan/tetris-x86/branches{/branch}", + "tags_url": "https://api.github.com/repos/austinmorgan/tetris-x86/tags", + "blobs_url": "https://api.github.com/repos/austinmorgan/tetris-x86/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/austinmorgan/tetris-x86/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/austinmorgan/tetris-x86/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/austinmorgan/tetris-x86/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/austinmorgan/tetris-x86/statuses/{sha}", + "languages_url": "https://api.github.com/repos/austinmorgan/tetris-x86/languages", + "stargazers_url": "https://api.github.com/repos/austinmorgan/tetris-x86/stargazers", + "contributors_url": "https://api.github.com/repos/austinmorgan/tetris-x86/contributors", + "subscribers_url": "https://api.github.com/repos/austinmorgan/tetris-x86/subscribers", + "subscription_url": "https://api.github.com/repos/austinmorgan/tetris-x86/subscription", + "commits_url": "https://api.github.com/repos/austinmorgan/tetris-x86/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/austinmorgan/tetris-x86/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/austinmorgan/tetris-x86/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/austinmorgan/tetris-x86/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/austinmorgan/tetris-x86/contents/{+path}", + "compare_url": "https://api.github.com/repos/austinmorgan/tetris-x86/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/austinmorgan/tetris-x86/merges", + "archive_url": "https://api.github.com/repos/austinmorgan/tetris-x86/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/austinmorgan/tetris-x86/downloads", + "issues_url": "https://api.github.com/repos/austinmorgan/tetris-x86/issues{/number}", + "pulls_url": "https://api.github.com/repos/austinmorgan/tetris-x86/pulls{/number}", + "milestones_url": "https://api.github.com/repos/austinmorgan/tetris-x86/milestones{/number}", + "notifications_url": "https://api.github.com/repos/austinmorgan/tetris-x86/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/austinmorgan/tetris-x86/labels{/name}", + "releases_url": "https://api.github.com/repos/austinmorgan/tetris-x86/releases{/id}", + "deployments_url": "https://api.github.com/repos/austinmorgan/tetris-x86/deployments", + "created_at": "2015-04-19T20:38:22Z", + "updated_at": "2016-03-26T05:49:09Z", + "pushed_at": "2016-03-26T05:44:52Z", + "git_url": "git://github.com/austinmorgan/tetris-x86.git", + "ssh_url": "git@github.com:austinmorgan/tetris-x86.git", + "clone_url": "https://github.com/austinmorgan/tetris-x86.git", + "svn_url": "https://github.com/austinmorgan/tetris-x86", + "homepage": "", + "size": 27, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4001079 + }, + { + "id": 53215855, + "name": "nand2tetris", + "full_name": "yashiro32/nand2tetris", + "owner": { + "login": "yashiro32", + "id": 1680988, + "avatar_url": "https://avatars.githubusercontent.com/u/1680988?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yashiro32", + "html_url": "https://github.com/yashiro32", + "followers_url": "https://api.github.com/users/yashiro32/followers", + "following_url": "https://api.github.com/users/yashiro32/following{/other_user}", + "gists_url": "https://api.github.com/users/yashiro32/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yashiro32/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yashiro32/subscriptions", + "organizations_url": "https://api.github.com/users/yashiro32/orgs", + "repos_url": "https://api.github.com/users/yashiro32/repos", + "events_url": "https://api.github.com/users/yashiro32/events{/privacy}", + "received_events_url": "https://api.github.com/users/yashiro32/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yashiro32/nand2tetris", + "description": "Coursera Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centered Course)", + "fork": false, + "url": "https://api.github.com/repos/yashiro32/nand2tetris", + "forks_url": "https://api.github.com/repos/yashiro32/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/yashiro32/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yashiro32/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yashiro32/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/yashiro32/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/yashiro32/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yashiro32/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/yashiro32/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yashiro32/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yashiro32/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/yashiro32/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yashiro32/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yashiro32/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yashiro32/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yashiro32/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yashiro32/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/yashiro32/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/yashiro32/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/yashiro32/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/yashiro32/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/yashiro32/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yashiro32/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yashiro32/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yashiro32/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yashiro32/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yashiro32/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yashiro32/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/yashiro32/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yashiro32/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/yashiro32/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yashiro32/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yashiro32/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yashiro32/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yashiro32/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yashiro32/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yashiro32/nand2tetris/deployments", + "created_at": "2016-03-05T18:13:54Z", + "updated_at": "2016-03-05T18:16:01Z", + "pushed_at": "2016-03-05T18:15:59Z", + "git_url": "git://github.com/yashiro32/nand2tetris.git", + "ssh_url": "git@github.com:yashiro32/nand2tetris.git", + "clone_url": "https://github.com/yashiro32/nand2tetris.git", + "svn_url": "https://github.com/yashiro32/nand2tetris", + "homepage": null, + "size": 535, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.4001079 + }, + { + "id": 60170465, + "name": "hackAssembler", + "full_name": "nazrhom/hackAssembler", + "owner": { + "login": "nazrhom", + "id": 6810908, + "avatar_url": "https://avatars.githubusercontent.com/u/6810908?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nazrhom", + "html_url": "https://github.com/nazrhom", + "followers_url": "https://api.github.com/users/nazrhom/followers", + "following_url": "https://api.github.com/users/nazrhom/following{/other_user}", + "gists_url": "https://api.github.com/users/nazrhom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nazrhom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nazrhom/subscriptions", + "organizations_url": "https://api.github.com/users/nazrhom/orgs", + "repos_url": "https://api.github.com/users/nazrhom/repos", + "events_url": "https://api.github.com/users/nazrhom/events{/privacy}", + "received_events_url": "https://api.github.com/users/nazrhom/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nazrhom/hackAssembler", + "description": "A node js assembler for the hack language presented in the course from nand to tetris", + "fork": false, + "url": "https://api.github.com/repos/nazrhom/hackAssembler", + "forks_url": "https://api.github.com/repos/nazrhom/hackAssembler/forks", + "keys_url": "https://api.github.com/repos/nazrhom/hackAssembler/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nazrhom/hackAssembler/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nazrhom/hackAssembler/teams", + "hooks_url": "https://api.github.com/repos/nazrhom/hackAssembler/hooks", + "issue_events_url": "https://api.github.com/repos/nazrhom/hackAssembler/issues/events{/number}", + "events_url": "https://api.github.com/repos/nazrhom/hackAssembler/events", + "assignees_url": "https://api.github.com/repos/nazrhom/hackAssembler/assignees{/user}", + "branches_url": "https://api.github.com/repos/nazrhom/hackAssembler/branches{/branch}", + "tags_url": "https://api.github.com/repos/nazrhom/hackAssembler/tags", + "blobs_url": "https://api.github.com/repos/nazrhom/hackAssembler/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nazrhom/hackAssembler/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nazrhom/hackAssembler/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nazrhom/hackAssembler/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nazrhom/hackAssembler/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nazrhom/hackAssembler/languages", + "stargazers_url": "https://api.github.com/repos/nazrhom/hackAssembler/stargazers", + "contributors_url": "https://api.github.com/repos/nazrhom/hackAssembler/contributors", + "subscribers_url": "https://api.github.com/repos/nazrhom/hackAssembler/subscribers", + "subscription_url": "https://api.github.com/repos/nazrhom/hackAssembler/subscription", + "commits_url": "https://api.github.com/repos/nazrhom/hackAssembler/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nazrhom/hackAssembler/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nazrhom/hackAssembler/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nazrhom/hackAssembler/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nazrhom/hackAssembler/contents/{+path}", + "compare_url": "https://api.github.com/repos/nazrhom/hackAssembler/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nazrhom/hackAssembler/merges", + "archive_url": "https://api.github.com/repos/nazrhom/hackAssembler/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nazrhom/hackAssembler/downloads", + "issues_url": "https://api.github.com/repos/nazrhom/hackAssembler/issues{/number}", + "pulls_url": "https://api.github.com/repos/nazrhom/hackAssembler/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nazrhom/hackAssembler/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nazrhom/hackAssembler/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nazrhom/hackAssembler/labels{/name}", + "releases_url": "https://api.github.com/repos/nazrhom/hackAssembler/releases{/id}", + "deployments_url": "https://api.github.com/repos/nazrhom/hackAssembler/deployments", + "created_at": "2016-06-01T11:16:34Z", + "updated_at": "2016-06-01T11:17:22Z", + "pushed_at": "2016-06-01T11:17:20Z", + "git_url": "git://github.com/nazrhom/hackAssembler.git", + "ssh_url": "git@github.com:nazrhom/hackAssembler.git", + "clone_url": "https://github.com/nazrhom/hackAssembler.git", + "svn_url": "https://github.com/nazrhom/hackAssembler", + "homepage": null, + "size": 33, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.3951874 + }, + { + "id": 57438284, + "name": "From-Nand-to-Tetris", + "full_name": "GISJMR/From-Nand-to-Tetris", + "owner": { + "login": "GISJMR", + "id": 17338239, + "avatar_url": "https://avatars.githubusercontent.com/u/17338239?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/GISJMR", + "html_url": "https://github.com/GISJMR", + "followers_url": "https://api.github.com/users/GISJMR/followers", + "following_url": "https://api.github.com/users/GISJMR/following{/other_user}", + "gists_url": "https://api.github.com/users/GISJMR/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GISJMR/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GISJMR/subscriptions", + "organizations_url": "https://api.github.com/users/GISJMR/orgs", + "repos_url": "https://api.github.com/users/GISJMR/repos", + "events_url": "https://api.github.com/users/GISJMR/events{/privacy}", + "received_events_url": "https://api.github.com/users/GISJMR/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/GISJMR/From-Nand-to-Tetris", + "description": "Build a Modern Computer from First Principles: From Nand to Tetris (Project-Centred Course)", + "fork": false, + "url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris", + "forks_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/forks", + "keys_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/teams", + "hooks_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/events", + "assignees_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/tags", + "blobs_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/languages", + "stargazers_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/subscription", + "commits_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/merges", + "archive_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/downloads", + "issues_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/GISJMR/From-Nand-to-Tetris/deployments", + "created_at": "2016-04-30T11:01:15Z", + "updated_at": "2016-05-20T19:09:29Z", + "pushed_at": "2016-05-27T21:51:34Z", + "git_url": "git://github.com/GISJMR/From-Nand-to-Tetris.git", + "ssh_url": "git@github.com:GISJMR/From-Nand-to-Tetris.git", + "clone_url": "https://github.com/GISJMR/From-Nand-to-Tetris.git", + "svn_url": "https://github.com/GISJMR/From-Nand-to-Tetris", + "homepage": null, + "size": 20, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.3951874 + }, + { + "id": 6851387, + "name": "nand2tetris", + "full_name": "michalvalasek/nand2tetris", + "owner": { + "login": "michalvalasek", + "id": 312155, + "avatar_url": "https://avatars.githubusercontent.com/u/312155?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/michalvalasek", + "html_url": "https://github.com/michalvalasek", + "followers_url": "https://api.github.com/users/michalvalasek/followers", + "following_url": "https://api.github.com/users/michalvalasek/following{/other_user}", + "gists_url": "https://api.github.com/users/michalvalasek/gists{/gist_id}", + "starred_url": "https://api.github.com/users/michalvalasek/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/michalvalasek/subscriptions", + "organizations_url": "https://api.github.com/users/michalvalasek/orgs", + "repos_url": "https://api.github.com/users/michalvalasek/repos", + "events_url": "https://api.github.com/users/michalvalasek/events{/privacy}", + "received_events_url": "https://api.github.com/users/michalvalasek/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/michalvalasek/nand2tetris", + "description": "Projects to the book The elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/michalvalasek/nand2tetris", + "forks_url": "https://api.github.com/repos/michalvalasek/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/michalvalasek/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/michalvalasek/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/michalvalasek/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/michalvalasek/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/michalvalasek/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/michalvalasek/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/michalvalasek/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/michalvalasek/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/michalvalasek/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/michalvalasek/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/michalvalasek/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/michalvalasek/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/michalvalasek/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/michalvalasek/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/michalvalasek/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/michalvalasek/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/michalvalasek/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/michalvalasek/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/michalvalasek/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/michalvalasek/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/michalvalasek/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/michalvalasek/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/michalvalasek/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/michalvalasek/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/michalvalasek/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/michalvalasek/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/michalvalasek/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/michalvalasek/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/michalvalasek/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/michalvalasek/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/michalvalasek/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/michalvalasek/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/michalvalasek/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/michalvalasek/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/michalvalasek/nand2tetris/deployments", + "created_at": "2012-11-25T13:45:23Z", + "updated_at": "2013-10-15T15:45:25Z", + "pushed_at": "2012-11-25T14:48:34Z", + "git_url": "git://github.com/michalvalasek/nand2tetris.git", + "ssh_url": "git@github.com:michalvalasek/nand2tetris.git", + "clone_url": "https://github.com/michalvalasek/nand2tetris.git", + "svn_url": "https://github.com/michalvalasek/nand2tetris", + "homepage": null, + "size": 252, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 8787730, + "name": "nand2tetris", + "full_name": "ragnarosa/nand2tetris", + "owner": { + "login": "ragnarosa", + "id": 3847529, + "avatar_url": "https://avatars.githubusercontent.com/u/3847529?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ragnarosa", + "html_url": "https://github.com/ragnarosa", + "followers_url": "https://api.github.com/users/ragnarosa/followers", + "following_url": "https://api.github.com/users/ragnarosa/following{/other_user}", + "gists_url": "https://api.github.com/users/ragnarosa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ragnarosa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ragnarosa/subscriptions", + "organizations_url": "https://api.github.com/users/ragnarosa/orgs", + "repos_url": "https://api.github.com/users/ragnarosa/repos", + "events_url": "https://api.github.com/users/ragnarosa/events{/privacy}", + "received_events_url": "https://api.github.com/users/ragnarosa/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ragnarosa/nand2tetris", + "description": "Solutions for the exercises from the Nand2Tetris course based on \"Elements of Computing Systems\"", + "fork": false, + "url": "https://api.github.com/repos/ragnarosa/nand2tetris", + "forks_url": "https://api.github.com/repos/ragnarosa/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ragnarosa/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ragnarosa/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ragnarosa/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ragnarosa/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ragnarosa/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ragnarosa/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ragnarosa/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ragnarosa/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ragnarosa/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ragnarosa/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ragnarosa/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ragnarosa/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ragnarosa/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ragnarosa/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ragnarosa/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ragnarosa/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ragnarosa/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ragnarosa/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ragnarosa/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ragnarosa/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ragnarosa/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ragnarosa/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ragnarosa/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ragnarosa/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ragnarosa/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ragnarosa/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ragnarosa/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ragnarosa/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ragnarosa/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ragnarosa/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ragnarosa/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ragnarosa/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ragnarosa/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ragnarosa/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ragnarosa/nand2tetris/deployments", + "created_at": "2013-03-14T23:29:02Z", + "updated_at": "2014-05-21T17:03:20Z", + "pushed_at": "2012-10-21T01:16:57Z", + "git_url": "git://github.com/ragnarosa/nand2tetris.git", + "ssh_url": "git@github.com:ragnarosa/nand2tetris.git", + "clone_url": "https://github.com/ragnarosa/nand2tetris.git", + "svn_url": "https://github.com/ragnarosa/nand2tetris", + "homepage": null, + "size": 576, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 8554163, + "name": "Nand2Tetris", + "full_name": "The-Skas/Nand2Tetris", + "owner": { + "login": "The-Skas", + "id": 3754977, + "avatar_url": "https://avatars.githubusercontent.com/u/3754977?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/The-Skas", + "html_url": "https://github.com/The-Skas", + "followers_url": "https://api.github.com/users/The-Skas/followers", + "following_url": "https://api.github.com/users/The-Skas/following{/other_user}", + "gists_url": "https://api.github.com/users/The-Skas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/The-Skas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/The-Skas/subscriptions", + "organizations_url": "https://api.github.com/users/The-Skas/orgs", + "repos_url": "https://api.github.com/users/The-Skas/repos", + "events_url": "https://api.github.com/users/The-Skas/events{/privacy}", + "received_events_url": "https://api.github.com/users/The-Skas/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/The-Skas/Nand2Tetris", + "description": "My progress in the nand2tetris course :)", + "fork": false, + "url": "https://api.github.com/repos/The-Skas/Nand2Tetris", + "forks_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/The-Skas/Nand2Tetris/deployments", + "created_at": "2013-03-04T11:23:14Z", + "updated_at": "2013-09-09T14:36:48Z", + "pushed_at": "2013-03-04T11:44:12Z", + "git_url": "git://github.com/The-Skas/Nand2Tetris.git", + "ssh_url": "git@github.com:The-Skas/Nand2Tetris.git", + "clone_url": "https://github.com/The-Skas/Nand2Tetris.git", + "svn_url": "https://github.com/The-Skas/Nand2Tetris", + "homepage": null, + "size": 604, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 6664400, + "name": "nand2tetris", + "full_name": "adargel/nand2tetris", + "owner": { + "login": "adargel", + "id": 210133, + "avatar_url": "https://avatars.githubusercontent.com/u/210133?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/adargel", + "html_url": "https://github.com/adargel", + "followers_url": "https://api.github.com/users/adargel/followers", + "following_url": "https://api.github.com/users/adargel/following{/other_user}", + "gists_url": "https://api.github.com/users/adargel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/adargel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/adargel/subscriptions", + "organizations_url": "https://api.github.com/users/adargel/orgs", + "repos_url": "https://api.github.com/users/adargel/repos", + "events_url": "https://api.github.com/users/adargel/events{/privacy}", + "received_events_url": "https://api.github.com/users/adargel/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/adargel/nand2tetris", + "description": "My work through the nand2tetris projects", + "fork": false, + "url": "https://api.github.com/repos/adargel/nand2tetris", + "forks_url": "https://api.github.com/repos/adargel/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/adargel/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/adargel/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/adargel/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/adargel/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/adargel/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/adargel/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/adargel/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/adargel/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/adargel/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/adargel/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/adargel/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/adargel/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/adargel/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/adargel/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/adargel/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/adargel/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/adargel/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/adargel/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/adargel/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/adargel/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/adargel/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/adargel/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/adargel/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/adargel/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/adargel/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/adargel/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/adargel/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/adargel/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/adargel/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/adargel/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/adargel/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/adargel/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/adargel/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/adargel/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/adargel/nand2tetris/deployments", + "created_at": "2012-11-13T02:40:30Z", + "updated_at": "2013-10-16T14:33:51Z", + "pushed_at": "2012-11-13T03:19:15Z", + "git_url": "git://github.com/adargel/nand2tetris.git", + "ssh_url": "git@github.com:adargel/nand2tetris.git", + "clone_url": "https://github.com/adargel/nand2tetris.git", + "svn_url": "https://github.com/adargel/nand2tetris", + "homepage": null, + "size": 268, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 9899438, + "name": "nand2tetris", + "full_name": "markspace/nand2tetris", + "owner": { + "login": "markspace", + "id": 618097, + "avatar_url": "https://avatars.githubusercontent.com/u/618097?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/markspace", + "html_url": "https://github.com/markspace", + "followers_url": "https://api.github.com/users/markspace/followers", + "following_url": "https://api.github.com/users/markspace/following{/other_user}", + "gists_url": "https://api.github.com/users/markspace/gists{/gist_id}", + "starred_url": "https://api.github.com/users/markspace/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/markspace/subscriptions", + "organizations_url": "https://api.github.com/users/markspace/orgs", + "repos_url": "https://api.github.com/users/markspace/repos", + "events_url": "https://api.github.com/users/markspace/events{/privacy}", + "received_events_url": "https://api.github.com/users/markspace/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/markspace/nand2tetris", + "description": "Project files for nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/markspace/nand2tetris", + "forks_url": "https://api.github.com/repos/markspace/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/markspace/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/markspace/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/markspace/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/markspace/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/markspace/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/markspace/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/markspace/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/markspace/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/markspace/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/markspace/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/markspace/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/markspace/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/markspace/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/markspace/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/markspace/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/markspace/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/markspace/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/markspace/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/markspace/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/markspace/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/markspace/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/markspace/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/markspace/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/markspace/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/markspace/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/markspace/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/markspace/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/markspace/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/markspace/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/markspace/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/markspace/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/markspace/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/markspace/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/markspace/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/markspace/nand2tetris/deployments", + "created_at": "2013-05-06T23:25:50Z", + "updated_at": "2014-05-16T11:32:49Z", + "pushed_at": "2013-05-06T23:27:03Z", + "git_url": "git://github.com/markspace/nand2tetris.git", + "ssh_url": "git@github.com:markspace/nand2tetris.git", + "clone_url": "https://github.com/markspace/nand2tetris.git", + "svn_url": "https://github.com/markspace/nand2tetris", + "homepage": null, + "size": 256, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 12497454, + "name": "nand2tetris", + "full_name": "SonOfLilit/nand2tetris", + "owner": { + "login": "SonOfLilit", + "id": 14973, + "avatar_url": "https://avatars.githubusercontent.com/u/14973?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/SonOfLilit", + "html_url": "https://github.com/SonOfLilit", + "followers_url": "https://api.github.com/users/SonOfLilit/followers", + "following_url": "https://api.github.com/users/SonOfLilit/following{/other_user}", + "gists_url": "https://api.github.com/users/SonOfLilit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SonOfLilit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SonOfLilit/subscriptions", + "organizations_url": "https://api.github.com/users/SonOfLilit/orgs", + "repos_url": "https://api.github.com/users/SonOfLilit/repos", + "events_url": "https://api.github.com/users/SonOfLilit/events{/privacy}", + "received_events_url": "https://api.github.com/users/SonOfLilit/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/SonOfLilit/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/SonOfLilit/nand2tetris", + "forks_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/SonOfLilit/nand2tetris/deployments", + "created_at": "2013-08-30T23:25:22Z", + "updated_at": "2013-10-23T19:11:53Z", + "pushed_at": "2013-09-02T06:26:19Z", + "git_url": "git://github.com/SonOfLilit/nand2tetris.git", + "ssh_url": "git@github.com:SonOfLilit/nand2tetris.git", + "clone_url": "https://github.com/SonOfLilit/nand2tetris.git", + "svn_url": "https://github.com/SonOfLilit/nand2tetris", + "homepage": null, + "size": 712, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 15084149, + "name": "nand2tetris", + "full_name": "gordonmcshane/nand2tetris", + "owner": { + "login": "gordonmcshane", + "id": 3814021, + "avatar_url": "https://avatars.githubusercontent.com/u/3814021?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gordonmcshane", + "html_url": "https://github.com/gordonmcshane", + "followers_url": "https://api.github.com/users/gordonmcshane/followers", + "following_url": "https://api.github.com/users/gordonmcshane/following{/other_user}", + "gists_url": "https://api.github.com/users/gordonmcshane/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gordonmcshane/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gordonmcshane/subscriptions", + "organizations_url": "https://api.github.com/users/gordonmcshane/orgs", + "repos_url": "https://api.github.com/users/gordonmcshane/repos", + "events_url": "https://api.github.com/users/gordonmcshane/events{/privacy}", + "received_events_url": "https://api.github.com/users/gordonmcshane/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/gordonmcshane/nand2tetris", + "description": "The Elements of Computing Systems course work", + "fork": false, + "url": "https://api.github.com/repos/gordonmcshane/nand2tetris", + "forks_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/gordonmcshane/nand2tetris/deployments", + "created_at": "2013-12-10T17:28:34Z", + "updated_at": "2013-12-18T19:32:46Z", + "pushed_at": "2013-12-18T02:28:34Z", + "git_url": "git://github.com/gordonmcshane/nand2tetris.git", + "ssh_url": "git@github.com:gordonmcshane/nand2tetris.git", + "clone_url": "https://github.com/gordonmcshane/nand2tetris.git", + "svn_url": "https://github.com/gordonmcshane/nand2tetris", + "homepage": null, + "size": 268, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 15712453, + "name": "nand2tetris", + "full_name": "trevwilson/nand2tetris", + "owner": { + "login": "trevwilson", + "id": 1050760, + "avatar_url": "https://avatars.githubusercontent.com/u/1050760?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/trevwilson", + "html_url": "https://github.com/trevwilson", + "followers_url": "https://api.github.com/users/trevwilson/followers", + "following_url": "https://api.github.com/users/trevwilson/following{/other_user}", + "gists_url": "https://api.github.com/users/trevwilson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/trevwilson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/trevwilson/subscriptions", + "organizations_url": "https://api.github.com/users/trevwilson/orgs", + "repos_url": "https://api.github.com/users/trevwilson/repos", + "events_url": "https://api.github.com/users/trevwilson/events{/privacy}", + "received_events_url": "https://api.github.com/users/trevwilson/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/trevwilson/nand2tetris", + "description": "Building a computer from scratch following \"The Elements of Computing Systems\" from http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/trevwilson/nand2tetris", + "forks_url": "https://api.github.com/repos/trevwilson/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/trevwilson/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/trevwilson/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/trevwilson/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/trevwilson/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/trevwilson/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/trevwilson/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/trevwilson/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/trevwilson/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/trevwilson/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/trevwilson/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/trevwilson/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/trevwilson/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/trevwilson/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/trevwilson/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/trevwilson/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/trevwilson/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/trevwilson/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/trevwilson/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/trevwilson/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/trevwilson/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/trevwilson/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/trevwilson/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/trevwilson/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/trevwilson/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/trevwilson/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/trevwilson/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/trevwilson/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/trevwilson/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/trevwilson/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/trevwilson/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/trevwilson/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/trevwilson/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/trevwilson/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/trevwilson/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/trevwilson/nand2tetris/deployments", + "created_at": "2014-01-07T18:15:40Z", + "updated_at": "2014-01-07T18:18:45Z", + "pushed_at": "2014-01-07T18:18:44Z", + "git_url": "git://github.com/trevwilson/nand2tetris.git", + "ssh_url": "git@github.com:trevwilson/nand2tetris.git", + "clone_url": "https://github.com/trevwilson/nand2tetris.git", + "svn_url": "https://github.com/trevwilson/nand2tetris", + "homepage": null, + "size": 256, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 15457815, + "name": "nand2tetris", + "full_name": "lithium/nand2tetris", + "owner": { + "login": "lithium", + "id": 16558, + "avatar_url": "https://avatars.githubusercontent.com/u/16558?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lithium", + "html_url": "https://github.com/lithium", + "followers_url": "https://api.github.com/users/lithium/followers", + "following_url": "https://api.github.com/users/lithium/following{/other_user}", + "gists_url": "https://api.github.com/users/lithium/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lithium/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lithium/subscriptions", + "organizations_url": "https://api.github.com/users/lithium/orgs", + "repos_url": "https://api.github.com/users/lithium/repos", + "events_url": "https://api.github.com/users/lithium/events{/privacy}", + "received_events_url": "https://api.github.com/users/lithium/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lithium/nand2tetris", + "description": "my work repository for Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/lithium/nand2tetris", + "forks_url": "https://api.github.com/repos/lithium/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lithium/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lithium/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lithium/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lithium/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lithium/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lithium/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lithium/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lithium/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lithium/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lithium/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lithium/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lithium/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lithium/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lithium/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lithium/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lithium/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lithium/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lithium/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lithium/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lithium/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lithium/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lithium/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lithium/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lithium/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lithium/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lithium/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lithium/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lithium/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lithium/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lithium/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lithium/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lithium/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lithium/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lithium/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lithium/nand2tetris/deployments", + "created_at": "2013-12-26T18:10:18Z", + "updated_at": "2014-01-11T19:58:42Z", + "pushed_at": "2014-01-11T19:58:41Z", + "git_url": "git://github.com/lithium/nand2tetris.git", + "ssh_url": "git@github.com:lithium/nand2tetris.git", + "clone_url": "https://github.com/lithium/nand2tetris.git", + "svn_url": "https://github.com/lithium/nand2tetris", + "homepage": null, + "size": 412, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 10811465, + "name": "nand2tetris", + "full_name": "jamesyp/nand2tetris", + "owner": { + "login": "jamesyp", + "id": 478238, + "avatar_url": "https://avatars.githubusercontent.com/u/478238?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jamesyp", + "html_url": "https://github.com/jamesyp", + "followers_url": "https://api.github.com/users/jamesyp/followers", + "following_url": "https://api.github.com/users/jamesyp/following{/other_user}", + "gists_url": "https://api.github.com/users/jamesyp/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jamesyp/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jamesyp/subscriptions", + "organizations_url": "https://api.github.com/users/jamesyp/orgs", + "repos_url": "https://api.github.com/users/jamesyp/repos", + "events_url": "https://api.github.com/users/jamesyp/events{/privacy}", + "received_events_url": "https://api.github.com/users/jamesyp/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jamesyp/nand2tetris", + "description": "Build a computer from scratch from nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/jamesyp/nand2tetris", + "forks_url": "https://api.github.com/repos/jamesyp/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jamesyp/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jamesyp/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jamesyp/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jamesyp/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jamesyp/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jamesyp/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jamesyp/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jamesyp/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jamesyp/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jamesyp/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jamesyp/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jamesyp/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jamesyp/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jamesyp/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jamesyp/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jamesyp/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jamesyp/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jamesyp/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jamesyp/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jamesyp/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jamesyp/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jamesyp/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jamesyp/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jamesyp/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jamesyp/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jamesyp/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jamesyp/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jamesyp/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jamesyp/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jamesyp/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jamesyp/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jamesyp/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jamesyp/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jamesyp/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jamesyp/nand2tetris/deployments", + "created_at": "2013-06-20T03:34:06Z", + "updated_at": "2013-10-03T00:49:55Z", + "pushed_at": "2013-06-30T07:58:52Z", + "git_url": "git://github.com/jamesyp/nand2tetris.git", + "ssh_url": "git@github.com:jamesyp/nand2tetris.git", + "clone_url": "https://github.com/jamesyp/nand2tetris.git", + "svn_url": "https://github.com/jamesyp/nand2tetris", + "homepage": null, + "size": 1304, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 10923690, + "name": "nand2tetris", + "full_name": "griffordson/nand2tetris", + "owner": { + "login": "griffordson", + "id": 16569, + "avatar_url": "https://avatars.githubusercontent.com/u/16569?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/griffordson", + "html_url": "https://github.com/griffordson", + "followers_url": "https://api.github.com/users/griffordson/followers", + "following_url": "https://api.github.com/users/griffordson/following{/other_user}", + "gists_url": "https://api.github.com/users/griffordson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/griffordson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/griffordson/subscriptions", + "organizations_url": "https://api.github.com/users/griffordson/orgs", + "repos_url": "https://api.github.com/users/griffordson/repos", + "events_url": "https://api.github.com/users/griffordson/events{/privacy}", + "received_events_url": "https://api.github.com/users/griffordson/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/griffordson/nand2tetris", + "description": "My project repo for the Nand2Tetris course found at http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/griffordson/nand2tetris", + "forks_url": "https://api.github.com/repos/griffordson/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/griffordson/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/griffordson/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/griffordson/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/griffordson/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/griffordson/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/griffordson/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/griffordson/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/griffordson/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/griffordson/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/griffordson/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/griffordson/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/griffordson/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/griffordson/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/griffordson/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/griffordson/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/griffordson/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/griffordson/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/griffordson/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/griffordson/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/griffordson/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/griffordson/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/griffordson/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/griffordson/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/griffordson/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/griffordson/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/griffordson/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/griffordson/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/griffordson/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/griffordson/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/griffordson/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/griffordson/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/griffordson/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/griffordson/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/griffordson/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/griffordson/nand2tetris/deployments", + "created_at": "2013-06-25T00:07:49Z", + "updated_at": "2014-06-12T12:55:32Z", + "pushed_at": "2013-06-25T03:56:36Z", + "git_url": "git://github.com/griffordson/nand2tetris.git", + "ssh_url": "git@github.com:griffordson/nand2tetris.git", + "clone_url": "https://github.com/griffordson/nand2tetris.git", + "svn_url": "https://github.com/griffordson/nand2tetris", + "homepage": null, + "size": 292, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 10945869, + "name": "nand2tetris", + "full_name": "MGD1981/nand2tetris", + "owner": { + "login": "MGD1981", + "id": 3987917, + "avatar_url": "https://avatars.githubusercontent.com/u/3987917?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MGD1981", + "html_url": "https://github.com/MGD1981", + "followers_url": "https://api.github.com/users/MGD1981/followers", + "following_url": "https://api.github.com/users/MGD1981/following{/other_user}", + "gists_url": "https://api.github.com/users/MGD1981/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MGD1981/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MGD1981/subscriptions", + "organizations_url": "https://api.github.com/users/MGD1981/orgs", + "repos_url": "https://api.github.com/users/MGD1981/repos", + "events_url": "https://api.github.com/users/MGD1981/events{/privacy}", + "received_events_url": "https://api.github.com/users/MGD1981/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/MGD1981/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/MGD1981/nand2tetris", + "forks_url": "https://api.github.com/repos/MGD1981/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/MGD1981/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MGD1981/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MGD1981/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/MGD1981/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/MGD1981/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/MGD1981/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/MGD1981/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/MGD1981/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/MGD1981/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/MGD1981/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MGD1981/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MGD1981/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MGD1981/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MGD1981/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MGD1981/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/MGD1981/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/MGD1981/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/MGD1981/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/MGD1981/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/MGD1981/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MGD1981/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MGD1981/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MGD1981/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MGD1981/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/MGD1981/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MGD1981/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/MGD1981/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MGD1981/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/MGD1981/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/MGD1981/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MGD1981/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MGD1981/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MGD1981/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/MGD1981/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/MGD1981/nand2tetris/deployments", + "created_at": "2013-06-25T18:04:58Z", + "updated_at": "2014-04-22T08:30:05Z", + "pushed_at": "2013-08-27T21:18:44Z", + "git_url": "git://github.com/MGD1981/nand2tetris.git", + "ssh_url": "git@github.com:MGD1981/nand2tetris.git", + "clone_url": "https://github.com/MGD1981/nand2tetris.git", + "svn_url": "https://github.com/MGD1981/nand2tetris", + "homepage": null, + "size": 246, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 11685898, + "name": "nand2tetris", + "full_name": "jffjs/nand2tetris", + "owner": { + "login": "jffjs", + "id": 384388, + "avatar_url": "https://avatars.githubusercontent.com/u/384388?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jffjs", + "html_url": "https://github.com/jffjs", + "followers_url": "https://api.github.com/users/jffjs/followers", + "following_url": "https://api.github.com/users/jffjs/following{/other_user}", + "gists_url": "https://api.github.com/users/jffjs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jffjs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jffjs/subscriptions", + "organizations_url": "https://api.github.com/users/jffjs/orgs", + "repos_url": "https://api.github.com/users/jffjs/repos", + "events_url": "https://api.github.com/users/jffjs/events{/privacy}", + "received_events_url": "https://api.github.com/users/jffjs/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jffjs/nand2tetris", + "description": "Projects from \"The Elements of Computing Systems\"", + "fork": false, + "url": "https://api.github.com/repos/jffjs/nand2tetris", + "forks_url": "https://api.github.com/repos/jffjs/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jffjs/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jffjs/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jffjs/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jffjs/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jffjs/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jffjs/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jffjs/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jffjs/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jffjs/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jffjs/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jffjs/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jffjs/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jffjs/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jffjs/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jffjs/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jffjs/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jffjs/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jffjs/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jffjs/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jffjs/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jffjs/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jffjs/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jffjs/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jffjs/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jffjs/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jffjs/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jffjs/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jffjs/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jffjs/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jffjs/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jffjs/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jffjs/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jffjs/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jffjs/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jffjs/nand2tetris/deployments", + "created_at": "2013-07-26T13:07:49Z", + "updated_at": "2014-03-23T13:32:16Z", + "pushed_at": "2013-08-07T19:40:55Z", + "git_url": "git://github.com/jffjs/nand2tetris.git", + "ssh_url": "git@github.com:jffjs/nand2tetris.git", + "clone_url": "https://github.com/jffjs/nand2tetris.git", + "svn_url": "https://github.com/jffjs/nand2tetris", + "homepage": null, + "size": 340, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 7659009, + "name": "nand2tetris_project", + "full_name": "flourscent/nand2tetris_project", + "owner": { + "login": "flourscent", + "id": 485039, + "avatar_url": "https://avatars.githubusercontent.com/u/485039?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/flourscent", + "html_url": "https://github.com/flourscent", + "followers_url": "https://api.github.com/users/flourscent/followers", + "following_url": "https://api.github.com/users/flourscent/following{/other_user}", + "gists_url": "https://api.github.com/users/flourscent/gists{/gist_id}", + "starred_url": "https://api.github.com/users/flourscent/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/flourscent/subscriptions", + "organizations_url": "https://api.github.com/users/flourscent/orgs", + "repos_url": "https://api.github.com/users/flourscent/repos", + "events_url": "https://api.github.com/users/flourscent/events{/privacy}", + "received_events_url": "https://api.github.com/users/flourscent/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/flourscent/nand2tetris_project", + "description": "solutions for exercises of nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/flourscent/nand2tetris_project", + "forks_url": "https://api.github.com/repos/flourscent/nand2tetris_project/forks", + "keys_url": "https://api.github.com/repos/flourscent/nand2tetris_project/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/flourscent/nand2tetris_project/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/flourscent/nand2tetris_project/teams", + "hooks_url": "https://api.github.com/repos/flourscent/nand2tetris_project/hooks", + "issue_events_url": "https://api.github.com/repos/flourscent/nand2tetris_project/issues/events{/number}", + "events_url": "https://api.github.com/repos/flourscent/nand2tetris_project/events", + "assignees_url": "https://api.github.com/repos/flourscent/nand2tetris_project/assignees{/user}", + "branches_url": "https://api.github.com/repos/flourscent/nand2tetris_project/branches{/branch}", + "tags_url": "https://api.github.com/repos/flourscent/nand2tetris_project/tags", + "blobs_url": "https://api.github.com/repos/flourscent/nand2tetris_project/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/flourscent/nand2tetris_project/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/flourscent/nand2tetris_project/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/flourscent/nand2tetris_project/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/flourscent/nand2tetris_project/statuses/{sha}", + "languages_url": "https://api.github.com/repos/flourscent/nand2tetris_project/languages", + "stargazers_url": "https://api.github.com/repos/flourscent/nand2tetris_project/stargazers", + "contributors_url": "https://api.github.com/repos/flourscent/nand2tetris_project/contributors", + "subscribers_url": "https://api.github.com/repos/flourscent/nand2tetris_project/subscribers", + "subscription_url": "https://api.github.com/repos/flourscent/nand2tetris_project/subscription", + "commits_url": "https://api.github.com/repos/flourscent/nand2tetris_project/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/flourscent/nand2tetris_project/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/flourscent/nand2tetris_project/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/flourscent/nand2tetris_project/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/flourscent/nand2tetris_project/contents/{+path}", + "compare_url": "https://api.github.com/repos/flourscent/nand2tetris_project/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/flourscent/nand2tetris_project/merges", + "archive_url": "https://api.github.com/repos/flourscent/nand2tetris_project/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/flourscent/nand2tetris_project/downloads", + "issues_url": "https://api.github.com/repos/flourscent/nand2tetris_project/issues{/number}", + "pulls_url": "https://api.github.com/repos/flourscent/nand2tetris_project/pulls{/number}", + "milestones_url": "https://api.github.com/repos/flourscent/nand2tetris_project/milestones{/number}", + "notifications_url": "https://api.github.com/repos/flourscent/nand2tetris_project/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/flourscent/nand2tetris_project/labels{/name}", + "releases_url": "https://api.github.com/repos/flourscent/nand2tetris_project/releases{/id}", + "deployments_url": "https://api.github.com/repos/flourscent/nand2tetris_project/deployments", + "created_at": "2013-01-17T03:27:20Z", + "updated_at": "2013-10-02T02:58:56Z", + "pushed_at": "2013-07-13T10:53:37Z", + "git_url": "git://github.com/flourscent/nand2tetris_project.git", + "ssh_url": "git@github.com:flourscent/nand2tetris_project.git", + "clone_url": "https://github.com/flourscent/nand2tetris_project.git", + "svn_url": "https://github.com/flourscent/nand2tetris_project", + "homepage": null, + "size": 312, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 11432357, + "name": "nand2tetris", + "full_name": "JHonaker/nand2tetris", + "owner": { + "login": "JHonaker", + "id": 3012597, + "avatar_url": "https://avatars.githubusercontent.com/u/3012597?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/JHonaker", + "html_url": "https://github.com/JHonaker", + "followers_url": "https://api.github.com/users/JHonaker/followers", + "following_url": "https://api.github.com/users/JHonaker/following{/other_user}", + "gists_url": "https://api.github.com/users/JHonaker/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JHonaker/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JHonaker/subscriptions", + "organizations_url": "https://api.github.com/users/JHonaker/orgs", + "repos_url": "https://api.github.com/users/JHonaker/repos", + "events_url": "https://api.github.com/users/JHonaker/events{/privacy}", + "received_events_url": "https://api.github.com/users/JHonaker/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/JHonaker/nand2tetris", + "description": "My work on the nand2tetris project.", + "fork": false, + "url": "https://api.github.com/repos/JHonaker/nand2tetris", + "forks_url": "https://api.github.com/repos/JHonaker/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/JHonaker/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/JHonaker/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/JHonaker/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/JHonaker/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/JHonaker/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/JHonaker/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/JHonaker/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/JHonaker/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/JHonaker/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/JHonaker/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/JHonaker/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/JHonaker/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/JHonaker/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/JHonaker/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/JHonaker/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/JHonaker/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/JHonaker/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/JHonaker/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/JHonaker/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/JHonaker/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/JHonaker/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/JHonaker/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/JHonaker/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/JHonaker/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/JHonaker/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/JHonaker/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/JHonaker/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/JHonaker/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/JHonaker/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/JHonaker/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/JHonaker/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/JHonaker/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/JHonaker/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/JHonaker/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/JHonaker/nand2tetris/deployments", + "created_at": "2013-07-15T20:04:44Z", + "updated_at": "2014-05-17T15:22:04Z", + "pushed_at": "2014-05-17T15:22:05Z", + "git_url": "git://github.com/JHonaker/nand2tetris.git", + "ssh_url": "git@github.com:JHonaker/nand2tetris.git", + "clone_url": "https://github.com/JHonaker/nand2tetris.git", + "svn_url": "https://github.com/JHonaker/nand2tetris", + "homepage": null, + "size": 388, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 16031337, + "name": "nand2tetris", + "full_name": "urthbound/nand2tetris", + "owner": { + "login": "urthbound", + "id": 4204764, + "avatar_url": "https://avatars.githubusercontent.com/u/4204764?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/urthbound", + "html_url": "https://github.com/urthbound", + "followers_url": "https://api.github.com/users/urthbound/followers", + "following_url": "https://api.github.com/users/urthbound/following{/other_user}", + "gists_url": "https://api.github.com/users/urthbound/gists{/gist_id}", + "starred_url": "https://api.github.com/users/urthbound/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/urthbound/subscriptions", + "organizations_url": "https://api.github.com/users/urthbound/orgs", + "repos_url": "https://api.github.com/users/urthbound/repos", + "events_url": "https://api.github.com/users/urthbound/events{/privacy}", + "received_events_url": "https://api.github.com/users/urthbound/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/urthbound/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/urthbound/nand2tetris", + "forks_url": "https://api.github.com/repos/urthbound/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/urthbound/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/urthbound/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/urthbound/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/urthbound/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/urthbound/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/urthbound/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/urthbound/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/urthbound/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/urthbound/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/urthbound/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/urthbound/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/urthbound/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/urthbound/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/urthbound/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/urthbound/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/urthbound/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/urthbound/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/urthbound/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/urthbound/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/urthbound/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/urthbound/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/urthbound/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/urthbound/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/urthbound/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/urthbound/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/urthbound/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/urthbound/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/urthbound/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/urthbound/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/urthbound/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/urthbound/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/urthbound/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/urthbound/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/urthbound/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/urthbound/nand2tetris/deployments", + "created_at": "2014-01-18T18:33:01Z", + "updated_at": "2014-03-03T17:56:00Z", + "pushed_at": "2014-03-03T17:56:00Z", + "git_url": "git://github.com/urthbound/nand2tetris.git", + "ssh_url": "git@github.com:urthbound/nand2tetris.git", + "clone_url": "https://github.com/urthbound/nand2tetris.git", + "svn_url": "https://github.com/urthbound/nand2tetris", + "homepage": null, + "size": 1088, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 16209981, + "name": "nand2tetris", + "full_name": "michaelschem/nand2tetris", + "owner": { + "login": "michaelschem", + "id": 2836129, + "avatar_url": "https://avatars.githubusercontent.com/u/2836129?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/michaelschem", + "html_url": "https://github.com/michaelschem", + "followers_url": "https://api.github.com/users/michaelschem/followers", + "following_url": "https://api.github.com/users/michaelschem/following{/other_user}", + "gists_url": "https://api.github.com/users/michaelschem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/michaelschem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/michaelschem/subscriptions", + "organizations_url": "https://api.github.com/users/michaelschem/orgs", + "repos_url": "https://api.github.com/users/michaelschem/repos", + "events_url": "https://api.github.com/users/michaelschem/events{/privacy}", + "received_events_url": "https://api.github.com/users/michaelschem/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/michaelschem/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/michaelschem/nand2tetris", + "forks_url": "https://api.github.com/repos/michaelschem/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/michaelschem/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/michaelschem/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/michaelschem/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/michaelschem/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/michaelschem/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/michaelschem/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/michaelschem/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/michaelschem/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/michaelschem/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/michaelschem/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/michaelschem/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/michaelschem/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/michaelschem/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/michaelschem/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/michaelschem/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/michaelschem/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/michaelschem/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/michaelschem/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/michaelschem/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/michaelschem/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/michaelschem/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/michaelschem/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/michaelschem/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/michaelschem/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/michaelschem/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/michaelschem/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/michaelschem/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/michaelschem/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/michaelschem/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/michaelschem/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/michaelschem/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/michaelschem/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/michaelschem/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/michaelschem/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/michaelschem/nand2tetris/deployments", + "created_at": "2014-01-24T16:29:09Z", + "updated_at": "2014-03-03T07:47:13Z", + "pushed_at": "2014-03-03T07:47:11Z", + "git_url": "git://github.com/michaelschem/nand2tetris.git", + "ssh_url": "git@github.com:michaelschem/nand2tetris.git", + "clone_url": "https://github.com/michaelschem/nand2tetris.git", + "svn_url": "https://github.com/michaelschem/nand2tetris", + "homepage": null, + "size": 416, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 26594374, + "name": "nand2tetris", + "full_name": "zoeames/nand2tetris", + "owner": { + "login": "zoeames", + "id": 8093647, + "avatar_url": "https://avatars.githubusercontent.com/u/8093647?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/zoeames", + "html_url": "https://github.com/zoeames", + "followers_url": "https://api.github.com/users/zoeames/followers", + "following_url": "https://api.github.com/users/zoeames/following{/other_user}", + "gists_url": "https://api.github.com/users/zoeames/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zoeames/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zoeames/subscriptions", + "organizations_url": "https://api.github.com/users/zoeames/orgs", + "repos_url": "https://api.github.com/users/zoeames/repos", + "events_url": "https://api.github.com/users/zoeames/events{/privacy}", + "received_events_url": "https://api.github.com/users/zoeames/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/zoeames/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/zoeames/nand2tetris", + "forks_url": "https://api.github.com/repos/zoeames/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/zoeames/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/zoeames/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/zoeames/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/zoeames/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/zoeames/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/zoeames/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/zoeames/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/zoeames/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/zoeames/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/zoeames/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/zoeames/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/zoeames/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/zoeames/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/zoeames/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/zoeames/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/zoeames/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/zoeames/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/zoeames/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/zoeames/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/zoeames/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/zoeames/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/zoeames/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/zoeames/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/zoeames/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/zoeames/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/zoeames/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/zoeames/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/zoeames/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/zoeames/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/zoeames/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/zoeames/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/zoeames/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/zoeames/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/zoeames/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/zoeames/nand2tetris/deployments", + "created_at": "2014-11-13T15:33:59Z", + "updated_at": "2014-11-13T15:34:49Z", + "pushed_at": "2014-11-13T15:34:57Z", + "git_url": "git://github.com/zoeames/nand2tetris.git", + "ssh_url": "git@github.com:zoeames/nand2tetris.git", + "clone_url": "https://github.com/zoeames/nand2tetris.git", + "svn_url": "https://github.com/zoeames/nand2tetris", + "homepage": null, + "size": 648, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 26594532, + "name": "nand2tetris", + "full_name": "SarahMPearson/nand2tetris", + "owner": { + "login": "SarahMPearson", + "id": 8082567, + "avatar_url": "https://avatars.githubusercontent.com/u/8082567?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/SarahMPearson", + "html_url": "https://github.com/SarahMPearson", + "followers_url": "https://api.github.com/users/SarahMPearson/followers", + "following_url": "https://api.github.com/users/SarahMPearson/following{/other_user}", + "gists_url": "https://api.github.com/users/SarahMPearson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SarahMPearson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SarahMPearson/subscriptions", + "organizations_url": "https://api.github.com/users/SarahMPearson/orgs", + "repos_url": "https://api.github.com/users/SarahMPearson/repos", + "events_url": "https://api.github.com/users/SarahMPearson/events{/privacy}", + "received_events_url": "https://api.github.com/users/SarahMPearson/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/SarahMPearson/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/SarahMPearson/nand2tetris", + "forks_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/SarahMPearson/nand2tetris/deployments", + "created_at": "2014-11-13T15:37:14Z", + "updated_at": "2014-11-13T15:37:48Z", + "pushed_at": "2014-11-13T15:37:48Z", + "git_url": "git://github.com/SarahMPearson/nand2tetris.git", + "ssh_url": "git@github.com:SarahMPearson/nand2tetris.git", + "clone_url": "https://github.com/SarahMPearson/nand2tetris.git", + "svn_url": "https://github.com/SarahMPearson/nand2tetris", + "homepage": null, + "size": 620, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 27518528, + "name": "nand2tetris", + "full_name": "idrisr/nand2tetris", + "owner": { + "login": "idrisr", + "id": 531245, + "avatar_url": "https://avatars.githubusercontent.com/u/531245?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/idrisr", + "html_url": "https://github.com/idrisr", + "followers_url": "https://api.github.com/users/idrisr/followers", + "following_url": "https://api.github.com/users/idrisr/following{/other_user}", + "gists_url": "https://api.github.com/users/idrisr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/idrisr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/idrisr/subscriptions", + "organizations_url": "https://api.github.com/users/idrisr/orgs", + "repos_url": "https://api.github.com/users/idrisr/repos", + "events_url": "https://api.github.com/users/idrisr/events{/privacy}", + "received_events_url": "https://api.github.com/users/idrisr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/idrisr/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/idrisr/nand2tetris", + "forks_url": "https://api.github.com/repos/idrisr/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/idrisr/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/idrisr/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/idrisr/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/idrisr/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/idrisr/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/idrisr/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/idrisr/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/idrisr/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/idrisr/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/idrisr/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/idrisr/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/idrisr/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/idrisr/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/idrisr/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/idrisr/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/idrisr/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/idrisr/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/idrisr/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/idrisr/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/idrisr/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/idrisr/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/idrisr/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/idrisr/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/idrisr/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/idrisr/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/idrisr/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/idrisr/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/idrisr/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/idrisr/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/idrisr/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/idrisr/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/idrisr/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/idrisr/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/idrisr/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/idrisr/nand2tetris/deployments", + "created_at": "2014-12-04T02:12:43Z", + "updated_at": "2015-01-03T02:00:16Z", + "pushed_at": "2015-01-03T02:00:13Z", + "git_url": "git://github.com/idrisr/nand2tetris.git", + "ssh_url": "git@github.com:idrisr/nand2tetris.git", + "clone_url": "https://github.com/idrisr/nand2tetris.git", + "svn_url": "https://github.com/idrisr/nand2tetris", + "homepage": null, + "size": 1008, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 20048121, + "name": "nand2tetris_projects", + "full_name": "nand2tetris/nand2tetris_projects", + "owner": { + "login": "nand2tetris", + "id": 7664553, + "avatar_url": "https://avatars.githubusercontent.com/u/7664553?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nand2tetris", + "html_url": "https://github.com/nand2tetris", + "followers_url": "https://api.github.com/users/nand2tetris/followers", + "following_url": "https://api.github.com/users/nand2tetris/following{/other_user}", + "gists_url": "https://api.github.com/users/nand2tetris/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nand2tetris/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nand2tetris/subscriptions", + "organizations_url": "https://api.github.com/users/nand2tetris/orgs", + "repos_url": "https://api.github.com/users/nand2tetris/repos", + "events_url": "https://api.github.com/users/nand2tetris/events{/privacy}", + "received_events_url": "https://api.github.com/users/nand2tetris/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nand2tetris/nand2tetris_projects", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects", + "forks_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/forks", + "keys_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/teams", + "hooks_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/hooks", + "issue_events_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/issues/events{/number}", + "events_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/events", + "assignees_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/assignees{/user}", + "branches_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/branches{/branch}", + "tags_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/tags", + "blobs_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/languages", + "stargazers_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/stargazers", + "contributors_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/contributors", + "subscribers_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/subscribers", + "subscription_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/subscription", + "commits_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/contents/{+path}", + "compare_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/merges", + "archive_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/downloads", + "issues_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/issues{/number}", + "pulls_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/labels{/name}", + "releases_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/releases{/id}", + "deployments_url": "https://api.github.com/repos/nand2tetris/nand2tetris_projects/deployments", + "created_at": "2014-05-22T04:43:07Z", + "updated_at": "2015-02-12T17:38:32Z", + "pushed_at": "2015-02-15T23:53:03Z", + "git_url": "git://github.com/nand2tetris/nand2tetris_projects.git", + "ssh_url": "git@github.com:nand2tetris/nand2tetris_projects.git", + "clone_url": "https://github.com/nand2tetris/nand2tetris_projects.git", + "svn_url": "https://github.com/nand2tetris/nand2tetris_projects", + "homepage": null, + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 20573643, + "name": "nand2tetris", + "full_name": "somasekhar44/nand2tetris", + "owner": { + "login": "somasekhar44", + "id": 7722978, + "avatar_url": "https://avatars.githubusercontent.com/u/7722978?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/somasekhar44", + "html_url": "https://github.com/somasekhar44", + "followers_url": "https://api.github.com/users/somasekhar44/followers", + "following_url": "https://api.github.com/users/somasekhar44/following{/other_user}", + "gists_url": "https://api.github.com/users/somasekhar44/gists{/gist_id}", + "starred_url": "https://api.github.com/users/somasekhar44/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/somasekhar44/subscriptions", + "organizations_url": "https://api.github.com/users/somasekhar44/orgs", + "repos_url": "https://api.github.com/users/somasekhar44/repos", + "events_url": "https://api.github.com/users/somasekhar44/events{/privacy}", + "received_events_url": "https://api.github.com/users/somasekhar44/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/somasekhar44/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/somasekhar44/nand2tetris", + "forks_url": "https://api.github.com/repos/somasekhar44/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/somasekhar44/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/somasekhar44/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/somasekhar44/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/somasekhar44/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/somasekhar44/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/somasekhar44/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/somasekhar44/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/somasekhar44/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/somasekhar44/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/somasekhar44/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/somasekhar44/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/somasekhar44/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/somasekhar44/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/somasekhar44/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/somasekhar44/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/somasekhar44/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/somasekhar44/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/somasekhar44/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/somasekhar44/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/somasekhar44/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/somasekhar44/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/somasekhar44/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/somasekhar44/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/somasekhar44/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/somasekhar44/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/somasekhar44/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/somasekhar44/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/somasekhar44/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/somasekhar44/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/somasekhar44/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/somasekhar44/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/somasekhar44/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/somasekhar44/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/somasekhar44/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/somasekhar44/nand2tetris/deployments", + "created_at": "2014-06-06T18:23:24Z", + "updated_at": "2014-06-07T18:39:11Z", + "pushed_at": "2014-06-07T18:39:11Z", + "git_url": "git://github.com/somasekhar44/nand2tetris.git", + "ssh_url": "git@github.com:somasekhar44/nand2tetris.git", + "clone_url": "https://github.com/somasekhar44/nand2tetris.git", + "svn_url": "https://github.com/somasekhar44/nand2tetris", + "homepage": null, + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 31287364, + "name": "nand2tetris", + "full_name": "emhoracek/nand2tetris", + "owner": { + "login": "emhoracek", + "id": 5353499, + "avatar_url": "https://avatars.githubusercontent.com/u/5353499?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/emhoracek", + "html_url": "https://github.com/emhoracek", + "followers_url": "https://api.github.com/users/emhoracek/followers", + "following_url": "https://api.github.com/users/emhoracek/following{/other_user}", + "gists_url": "https://api.github.com/users/emhoracek/gists{/gist_id}", + "starred_url": "https://api.github.com/users/emhoracek/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/emhoracek/subscriptions", + "organizations_url": "https://api.github.com/users/emhoracek/orgs", + "repos_url": "https://api.github.com/users/emhoracek/repos", + "events_url": "https://api.github.com/users/emhoracek/events{/privacy}", + "received_events_url": "https://api.github.com/users/emhoracek/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/emhoracek/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/emhoracek/nand2tetris", + "forks_url": "https://api.github.com/repos/emhoracek/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/emhoracek/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/emhoracek/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/emhoracek/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/emhoracek/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/emhoracek/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/emhoracek/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/emhoracek/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/emhoracek/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/emhoracek/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/emhoracek/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/emhoracek/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/emhoracek/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/emhoracek/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/emhoracek/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/emhoracek/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/emhoracek/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/emhoracek/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/emhoracek/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/emhoracek/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/emhoracek/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/emhoracek/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/emhoracek/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/emhoracek/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/emhoracek/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/emhoracek/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/emhoracek/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/emhoracek/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/emhoracek/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/emhoracek/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/emhoracek/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/emhoracek/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/emhoracek/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/emhoracek/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/emhoracek/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/emhoracek/nand2tetris/deployments", + "created_at": "2015-02-24T23:24:56Z", + "updated_at": "2015-02-25T21:58:59Z", + "pushed_at": "2015-02-25T21:58:59Z", + "git_url": "git://github.com/emhoracek/nand2tetris.git", + "ssh_url": "git@github.com:emhoracek/nand2tetris.git", + "clone_url": "https://github.com/emhoracek/nand2tetris.git", + "svn_url": "https://github.com/emhoracek/nand2tetris", + "homepage": null, + "size": 240, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 30423512, + "name": "nand2tetris", + "full_name": "Desyz/nand2tetris", + "owner": { + "login": "Desyz", + "id": 6963093, + "avatar_url": "https://avatars.githubusercontent.com/u/6963093?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Desyz", + "html_url": "https://github.com/Desyz", + "followers_url": "https://api.github.com/users/Desyz/followers", + "following_url": "https://api.github.com/users/Desyz/following{/other_user}", + "gists_url": "https://api.github.com/users/Desyz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Desyz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Desyz/subscriptions", + "organizations_url": "https://api.github.com/users/Desyz/orgs", + "repos_url": "https://api.github.com/users/Desyz/repos", + "events_url": "https://api.github.com/users/Desyz/events{/privacy}", + "received_events_url": "https://api.github.com/users/Desyz/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Desyz/nand2tetris", + "description": "A side project to help me with my computer architecture class", + "fork": false, + "url": "https://api.github.com/repos/Desyz/nand2tetris", + "forks_url": "https://api.github.com/repos/Desyz/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Desyz/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Desyz/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Desyz/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Desyz/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Desyz/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Desyz/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Desyz/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Desyz/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Desyz/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Desyz/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Desyz/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Desyz/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Desyz/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Desyz/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Desyz/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Desyz/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Desyz/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Desyz/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Desyz/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Desyz/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Desyz/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Desyz/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Desyz/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Desyz/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Desyz/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Desyz/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Desyz/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Desyz/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Desyz/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Desyz/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Desyz/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Desyz/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Desyz/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Desyz/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Desyz/nand2tetris/deployments", + "created_at": "2015-02-06T17:12:42Z", + "updated_at": "2015-04-26T19:40:08Z", + "pushed_at": "2015-04-26T19:40:08Z", + "git_url": "git://github.com/Desyz/nand2tetris.git", + "ssh_url": "git@github.com:Desyz/nand2tetris.git", + "clone_url": "https://github.com/Desyz/nand2tetris.git", + "svn_url": "https://github.com/Desyz/nand2tetris", + "homepage": null, + "size": 704, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 37908960, + "name": "nand2tetris", + "full_name": "debugger87/nand2tetris", + "owner": { + "login": "debugger87", + "id": 763168, + "avatar_url": "https://avatars.githubusercontent.com/u/763168?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/debugger87", + "html_url": "https://github.com/debugger87", + "followers_url": "https://api.github.com/users/debugger87/followers", + "following_url": "https://api.github.com/users/debugger87/following{/other_user}", + "gists_url": "https://api.github.com/users/debugger87/gists{/gist_id}", + "starred_url": "https://api.github.com/users/debugger87/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/debugger87/subscriptions", + "organizations_url": "https://api.github.com/users/debugger87/orgs", + "repos_url": "https://api.github.com/users/debugger87/repos", + "events_url": "https://api.github.com/users/debugger87/events{/privacy}", + "received_events_url": "https://api.github.com/users/debugger87/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/debugger87/nand2tetris", + "description": "nand2tetris problems", + "fork": false, + "url": "https://api.github.com/repos/debugger87/nand2tetris", + "forks_url": "https://api.github.com/repos/debugger87/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/debugger87/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/debugger87/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/debugger87/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/debugger87/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/debugger87/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/debugger87/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/debugger87/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/debugger87/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/debugger87/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/debugger87/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/debugger87/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/debugger87/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/debugger87/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/debugger87/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/debugger87/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/debugger87/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/debugger87/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/debugger87/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/debugger87/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/debugger87/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/debugger87/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/debugger87/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/debugger87/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/debugger87/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/debugger87/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/debugger87/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/debugger87/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/debugger87/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/debugger87/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/debugger87/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/debugger87/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/debugger87/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/debugger87/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/debugger87/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/debugger87/nand2tetris/deployments", + "created_at": "2015-06-23T09:13:59Z", + "updated_at": "2015-06-23T09:15:27Z", + "pushed_at": "2015-06-23T10:42:26Z", + "git_url": "git://github.com/debugger87/nand2tetris.git", + "ssh_url": "git@github.com:debugger87/nand2tetris.git", + "clone_url": "https://github.com/debugger87/nand2tetris.git", + "svn_url": "https://github.com/debugger87/nand2tetris", + "homepage": null, + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 41134098, + "name": "nand2tetris", + "full_name": "saiki/nand2tetris", + "owner": { + "login": "saiki", + "id": 81905, + "avatar_url": "https://avatars.githubusercontent.com/u/81905?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/saiki", + "html_url": "https://github.com/saiki", + "followers_url": "https://api.github.com/users/saiki/followers", + "following_url": "https://api.github.com/users/saiki/following{/other_user}", + "gists_url": "https://api.github.com/users/saiki/gists{/gist_id}", + "starred_url": "https://api.github.com/users/saiki/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/saiki/subscriptions", + "organizations_url": "https://api.github.com/users/saiki/orgs", + "repos_url": "https://api.github.com/users/saiki/repos", + "events_url": "https://api.github.com/users/saiki/events{/privacy}", + "received_events_url": "https://api.github.com/users/saiki/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/saiki/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/saiki/nand2tetris", + "forks_url": "https://api.github.com/repos/saiki/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/saiki/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/saiki/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/saiki/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/saiki/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/saiki/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/saiki/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/saiki/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/saiki/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/saiki/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/saiki/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/saiki/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/saiki/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/saiki/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/saiki/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/saiki/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/saiki/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/saiki/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/saiki/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/saiki/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/saiki/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/saiki/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/saiki/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/saiki/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/saiki/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/saiki/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/saiki/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/saiki/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/saiki/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/saiki/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/saiki/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/saiki/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/saiki/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/saiki/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/saiki/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/saiki/nand2tetris/deployments", + "created_at": "2015-08-21T04:10:03Z", + "updated_at": "2015-08-21T04:13:28Z", + "pushed_at": "2015-08-25T04:06:24Z", + "git_url": "git://github.com/saiki/nand2tetris.git", + "ssh_url": "git@github.com:saiki/nand2tetris.git", + "clone_url": "https://github.com/saiki/nand2tetris.git", + "svn_url": "https://github.com/saiki/nand2tetris", + "homepage": null, + "size": 292, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 39359003, + "name": "nand2tetris-dist", + "full_name": "nicolasmiller/nand2tetris-dist", + "owner": { + "login": "nicolasmiller", + "id": 1240015, + "avatar_url": "https://avatars.githubusercontent.com/u/1240015?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nicolasmiller", + "html_url": "https://github.com/nicolasmiller", + "followers_url": "https://api.github.com/users/nicolasmiller/followers", + "following_url": "https://api.github.com/users/nicolasmiller/following{/other_user}", + "gists_url": "https://api.github.com/users/nicolasmiller/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nicolasmiller/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nicolasmiller/subscriptions", + "organizations_url": "https://api.github.com/users/nicolasmiller/orgs", + "repos_url": "https://api.github.com/users/nicolasmiller/repos", + "events_url": "https://api.github.com/users/nicolasmiller/events{/privacy}", + "received_events_url": "https://api.github.com/users/nicolasmiller/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nicolasmiller/nand2tetris-dist", + "description": "Git mirror of Nand2Tetris exercise distribution", + "fork": false, + "url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist", + "forks_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/forks", + "keys_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/teams", + "hooks_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/hooks", + "issue_events_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/issues/events{/number}", + "events_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/events", + "assignees_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/assignees{/user}", + "branches_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/branches{/branch}", + "tags_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/tags", + "blobs_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/languages", + "stargazers_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/stargazers", + "contributors_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/contributors", + "subscribers_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/subscribers", + "subscription_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/subscription", + "commits_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/contents/{+path}", + "compare_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/merges", + "archive_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/downloads", + "issues_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/issues{/number}", + "pulls_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/labels{/name}", + "releases_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/releases{/id}", + "deployments_url": "https://api.github.com/repos/nicolasmiller/nand2tetris-dist/deployments", + "created_at": "2015-07-20T02:40:05Z", + "updated_at": "2015-07-20T02:42:18Z", + "pushed_at": "2015-07-20T02:42:18Z", + "git_url": "git://github.com/nicolasmiller/nand2tetris-dist.git", + "ssh_url": "git@github.com:nicolasmiller/nand2tetris-dist.git", + "clone_url": "https://github.com/nicolasmiller/nand2tetris-dist.git", + "svn_url": "https://github.com/nicolasmiller/nand2tetris-dist", + "homepage": null, + "size": 648, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 42673792, + "name": "nand2tetris", + "full_name": "CestDiego/nand2tetris", + "owner": { + "login": "CestDiego", + "id": 3291619, + "avatar_url": "https://avatars.githubusercontent.com/u/3291619?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/CestDiego", + "html_url": "https://github.com/CestDiego", + "followers_url": "https://api.github.com/users/CestDiego/followers", + "following_url": "https://api.github.com/users/CestDiego/following{/other_user}", + "gists_url": "https://api.github.com/users/CestDiego/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CestDiego/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CestDiego/subscriptions", + "organizations_url": "https://api.github.com/users/CestDiego/orgs", + "repos_url": "https://api.github.com/users/CestDiego/repos", + "events_url": "https://api.github.com/users/CestDiego/events{/privacy}", + "received_events_url": "https://api.github.com/users/CestDiego/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/CestDiego/nand2tetris", + "description": "Progress on nand2tetris course", + "fork": false, + "url": "https://api.github.com/repos/CestDiego/nand2tetris", + "forks_url": "https://api.github.com/repos/CestDiego/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/CestDiego/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/CestDiego/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/CestDiego/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/CestDiego/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/CestDiego/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/CestDiego/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/CestDiego/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/CestDiego/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/CestDiego/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/CestDiego/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/CestDiego/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/CestDiego/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/CestDiego/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/CestDiego/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/CestDiego/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/CestDiego/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/CestDiego/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/CestDiego/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/CestDiego/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/CestDiego/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/CestDiego/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/CestDiego/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/CestDiego/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/CestDiego/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/CestDiego/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/CestDiego/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/CestDiego/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/CestDiego/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/CestDiego/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/CestDiego/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/CestDiego/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/CestDiego/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/CestDiego/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/CestDiego/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/CestDiego/nand2tetris/deployments", + "created_at": "2015-09-17T18:22:28Z", + "updated_at": "2015-09-17T18:23:07Z", + "pushed_at": "2015-09-17T18:23:05Z", + "git_url": "git://github.com/CestDiego/nand2tetris.git", + "ssh_url": "git@github.com:CestDiego/nand2tetris.git", + "clone_url": "https://github.com/CestDiego/nand2tetris.git", + "svn_url": "https://github.com/CestDiego/nand2tetris", + "homepage": null, + "size": 664, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 39877990, + "name": "nand2tetris", + "full_name": "abalone0204/nand2tetris", + "owner": { + "login": "abalone0204", + "id": 5833391, + "avatar_url": "https://avatars.githubusercontent.com/u/5833391?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/abalone0204", + "html_url": "https://github.com/abalone0204", + "followers_url": "https://api.github.com/users/abalone0204/followers", + "following_url": "https://api.github.com/users/abalone0204/following{/other_user}", + "gists_url": "https://api.github.com/users/abalone0204/gists{/gist_id}", + "starred_url": "https://api.github.com/users/abalone0204/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/abalone0204/subscriptions", + "organizations_url": "https://api.github.com/users/abalone0204/orgs", + "repos_url": "https://api.github.com/users/abalone0204/repos", + "events_url": "https://api.github.com/users/abalone0204/events{/privacy}", + "received_events_url": "https://api.github.com/users/abalone0204/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/abalone0204/nand2tetris", + "description": "Learn about the truly fundamental elements of computer science!", + "fork": false, + "url": "https://api.github.com/repos/abalone0204/nand2tetris", + "forks_url": "https://api.github.com/repos/abalone0204/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/abalone0204/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/abalone0204/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/abalone0204/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/abalone0204/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/abalone0204/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/abalone0204/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/abalone0204/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/abalone0204/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/abalone0204/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/abalone0204/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/abalone0204/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/abalone0204/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/abalone0204/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/abalone0204/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/abalone0204/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/abalone0204/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/abalone0204/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/abalone0204/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/abalone0204/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/abalone0204/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/abalone0204/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/abalone0204/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/abalone0204/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/abalone0204/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/abalone0204/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/abalone0204/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/abalone0204/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/abalone0204/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/abalone0204/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/abalone0204/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/abalone0204/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/abalone0204/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/abalone0204/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/abalone0204/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/abalone0204/nand2tetris/deployments", + "created_at": "2015-07-29T06:43:32Z", + "updated_at": "2015-07-29T06:43:58Z", + "pushed_at": "2015-08-21T06:42:52Z", + "git_url": "git://github.com/abalone0204/nand2tetris.git", + "ssh_url": "git@github.com:abalone0204/nand2tetris.git", + "clone_url": "https://github.com/abalone0204/nand2tetris.git", + "svn_url": "https://github.com/abalone0204/nand2tetris", + "homepage": null, + "size": 776, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 33706500, + "name": "nand2tetris", + "full_name": "Snamich/nand2tetris", + "owner": { + "login": "Snamich", + "id": 122707, + "avatar_url": "https://avatars.githubusercontent.com/u/122707?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Snamich", + "html_url": "https://github.com/Snamich", + "followers_url": "https://api.github.com/users/Snamich/followers", + "following_url": "https://api.github.com/users/Snamich/following{/other_user}", + "gists_url": "https://api.github.com/users/Snamich/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Snamich/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Snamich/subscriptions", + "organizations_url": "https://api.github.com/users/Snamich/orgs", + "repos_url": "https://api.github.com/users/Snamich/repos", + "events_url": "https://api.github.com/users/Snamich/events{/privacy}", + "received_events_url": "https://api.github.com/users/Snamich/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Snamich/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Snamich/nand2tetris", + "forks_url": "https://api.github.com/repos/Snamich/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Snamich/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Snamich/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Snamich/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Snamich/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Snamich/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Snamich/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Snamich/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Snamich/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Snamich/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Snamich/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Snamich/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Snamich/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Snamich/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Snamich/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Snamich/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Snamich/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Snamich/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Snamich/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Snamich/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Snamich/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Snamich/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Snamich/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Snamich/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Snamich/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Snamich/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Snamich/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Snamich/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Snamich/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Snamich/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Snamich/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Snamich/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Snamich/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Snamich/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Snamich/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Snamich/nand2tetris/deployments", + "created_at": "2015-04-10T03:31:39Z", + "updated_at": "2015-05-07T04:31:42Z", + "pushed_at": "2015-06-13T19:54:19Z", + "git_url": "git://github.com/Snamich/nand2tetris.git", + "ssh_url": "git@github.com:Snamich/nand2tetris.git", + "clone_url": "https://github.com/Snamich/nand2tetris.git", + "svn_url": "https://github.com/Snamich/nand2tetris", + "homepage": null, + "size": 288, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 33446727, + "name": "nand2tetris", + "full_name": "diskkid/nand2tetris", + "owner": { + "login": "diskkid", + "id": 10434974, + "avatar_url": "https://avatars.githubusercontent.com/u/10434974?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/diskkid", + "html_url": "https://github.com/diskkid", + "followers_url": "https://api.github.com/users/diskkid/followers", + "following_url": "https://api.github.com/users/diskkid/following{/other_user}", + "gists_url": "https://api.github.com/users/diskkid/gists{/gist_id}", + "starred_url": "https://api.github.com/users/diskkid/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/diskkid/subscriptions", + "organizations_url": "https://api.github.com/users/diskkid/orgs", + "repos_url": "https://api.github.com/users/diskkid/repos", + "events_url": "https://api.github.com/users/diskkid/events{/privacy}", + "received_events_url": "https://api.github.com/users/diskkid/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/diskkid/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/diskkid/nand2tetris", + "forks_url": "https://api.github.com/repos/diskkid/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/diskkid/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/diskkid/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/diskkid/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/diskkid/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/diskkid/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/diskkid/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/diskkid/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/diskkid/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/diskkid/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/diskkid/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/diskkid/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/diskkid/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/diskkid/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/diskkid/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/diskkid/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/diskkid/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/diskkid/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/diskkid/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/diskkid/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/diskkid/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/diskkid/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/diskkid/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/diskkid/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/diskkid/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/diskkid/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/diskkid/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/diskkid/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/diskkid/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/diskkid/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/diskkid/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/diskkid/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/diskkid/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/diskkid/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/diskkid/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/diskkid/nand2tetris/deployments", + "created_at": "2015-04-05T16:16:07Z", + "updated_at": "2015-04-12T14:51:43Z", + "pushed_at": "2015-04-12T14:51:42Z", + "git_url": "git://github.com/diskkid/nand2tetris.git", + "ssh_url": "git@github.com:diskkid/nand2tetris.git", + "clone_url": "https://github.com/diskkid/nand2tetris.git", + "svn_url": "https://github.com/diskkid/nand2tetris", + "homepage": null, + "size": 260, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 33283809, + "name": "nand2tetris", + "full_name": "ayachigin/nand2tetris", + "owner": { + "login": "ayachigin", + "id": 3293049, + "avatar_url": "https://avatars.githubusercontent.com/u/3293049?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ayachigin", + "html_url": "https://github.com/ayachigin", + "followers_url": "https://api.github.com/users/ayachigin/followers", + "following_url": "https://api.github.com/users/ayachigin/following{/other_user}", + "gists_url": "https://api.github.com/users/ayachigin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ayachigin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ayachigin/subscriptions", + "organizations_url": "https://api.github.com/users/ayachigin/orgs", + "repos_url": "https://api.github.com/users/ayachigin/repos", + "events_url": "https://api.github.com/users/ayachigin/events{/privacy}", + "received_events_url": "https://api.github.com/users/ayachigin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ayachigin/nand2tetris", + "description": "コンピュータシステムの理論と実装", + "fork": false, + "url": "https://api.github.com/repos/ayachigin/nand2tetris", + "forks_url": "https://api.github.com/repos/ayachigin/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ayachigin/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ayachigin/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ayachigin/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ayachigin/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ayachigin/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ayachigin/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ayachigin/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ayachigin/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ayachigin/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ayachigin/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ayachigin/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ayachigin/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ayachigin/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ayachigin/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ayachigin/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ayachigin/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ayachigin/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ayachigin/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ayachigin/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ayachigin/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ayachigin/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ayachigin/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ayachigin/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ayachigin/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ayachigin/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ayachigin/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ayachigin/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ayachigin/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ayachigin/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ayachigin/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ayachigin/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ayachigin/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ayachigin/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ayachigin/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ayachigin/nand2tetris/deployments", + "created_at": "2015-04-02T02:03:34Z", + "updated_at": "2015-04-09T12:46:39Z", + "pushed_at": "2015-04-09T12:46:39Z", + "git_url": "git://github.com/ayachigin/nand2tetris.git", + "ssh_url": "git@github.com:ayachigin/nand2tetris.git", + "clone_url": "https://github.com/ayachigin/nand2tetris.git", + "svn_url": "https://github.com/ayachigin/nand2tetris", + "homepage": null, + "size": 328, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 33070618, + "name": "nand2tetris", + "full_name": "tmtk75/nand2tetris", + "owner": { + "login": "tmtk75", + "id": 425100, + "avatar_url": "https://avatars.githubusercontent.com/u/425100?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tmtk75", + "html_url": "https://github.com/tmtk75", + "followers_url": "https://api.github.com/users/tmtk75/followers", + "following_url": "https://api.github.com/users/tmtk75/following{/other_user}", + "gists_url": "https://api.github.com/users/tmtk75/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tmtk75/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tmtk75/subscriptions", + "organizations_url": "https://api.github.com/users/tmtk75/orgs", + "repos_url": "https://api.github.com/users/tmtk75/repos", + "events_url": "https://api.github.com/users/tmtk75/events{/privacy}", + "received_events_url": "https://api.github.com/users/tmtk75/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tmtk75/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/tmtk75/nand2tetris", + "forks_url": "https://api.github.com/repos/tmtk75/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tmtk75/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tmtk75/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tmtk75/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tmtk75/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tmtk75/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tmtk75/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tmtk75/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tmtk75/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tmtk75/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tmtk75/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tmtk75/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tmtk75/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tmtk75/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tmtk75/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tmtk75/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tmtk75/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tmtk75/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tmtk75/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tmtk75/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tmtk75/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tmtk75/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tmtk75/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tmtk75/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tmtk75/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tmtk75/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tmtk75/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tmtk75/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tmtk75/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tmtk75/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tmtk75/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tmtk75/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tmtk75/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tmtk75/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tmtk75/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tmtk75/nand2tetris/deployments", + "created_at": "2015-03-29T11:30:26Z", + "updated_at": "2015-03-29T11:30:59Z", + "pushed_at": "2015-03-29T12:25:24Z", + "git_url": "git://github.com/tmtk75/nand2tetris.git", + "ssh_url": "git@github.com:tmtk75/nand2tetris.git", + "clone_url": "https://github.com/tmtk75/nand2tetris.git", + "svn_url": "https://github.com/tmtk75/nand2tetris", + "homepage": null, + "size": 2480, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "ch2.5", + "score": 3.2584372 + }, + { + "id": 35925804, + "name": "nand2tetris", + "full_name": "gwincr11/nand2tetris", + "owner": { + "login": "gwincr11", + "id": 289882, + "avatar_url": "https://avatars.githubusercontent.com/u/289882?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gwincr11", + "html_url": "https://github.com/gwincr11", + "followers_url": "https://api.github.com/users/gwincr11/followers", + "following_url": "https://api.github.com/users/gwincr11/following{/other_user}", + "gists_url": "https://api.github.com/users/gwincr11/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gwincr11/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gwincr11/subscriptions", + "organizations_url": "https://api.github.com/users/gwincr11/orgs", + "repos_url": "https://api.github.com/users/gwincr11/repos", + "events_url": "https://api.github.com/users/gwincr11/events{/privacy}", + "received_events_url": "https://api.github.com/users/gwincr11/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/gwincr11/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/gwincr11/nand2tetris", + "forks_url": "https://api.github.com/repos/gwincr11/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/gwincr11/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gwincr11/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gwincr11/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/gwincr11/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/gwincr11/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/gwincr11/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/gwincr11/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/gwincr11/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/gwincr11/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/gwincr11/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gwincr11/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gwincr11/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gwincr11/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gwincr11/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gwincr11/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/gwincr11/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/gwincr11/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/gwincr11/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/gwincr11/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/gwincr11/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gwincr11/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gwincr11/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gwincr11/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gwincr11/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/gwincr11/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gwincr11/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/gwincr11/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gwincr11/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/gwincr11/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/gwincr11/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gwincr11/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gwincr11/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gwincr11/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/gwincr11/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/gwincr11/nand2tetris/deployments", + "created_at": "2015-05-20T04:29:55Z", + "updated_at": "2015-05-20T04:31:11Z", + "pushed_at": "2015-05-20T04:31:01Z", + "git_url": "git://github.com/gwincr11/nand2tetris.git", + "ssh_url": "git@github.com:gwincr11/nand2tetris.git", + "clone_url": "https://github.com/gwincr11/nand2tetris.git", + "svn_url": "https://github.com/gwincr11/nand2tetris", + "homepage": null, + "size": 308, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 36359589, + "name": "nand2tetris", + "full_name": "MrOerni/nand2tetris", + "owner": { + "login": "MrOerni", + "id": 2965273, + "avatar_url": "https://avatars.githubusercontent.com/u/2965273?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MrOerni", + "html_url": "https://github.com/MrOerni", + "followers_url": "https://api.github.com/users/MrOerni/followers", + "following_url": "https://api.github.com/users/MrOerni/following{/other_user}", + "gists_url": "https://api.github.com/users/MrOerni/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MrOerni/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MrOerni/subscriptions", + "organizations_url": "https://api.github.com/users/MrOerni/orgs", + "repos_url": "https://api.github.com/users/MrOerni/repos", + "events_url": "https://api.github.com/users/MrOerni/events{/privacy}", + "received_events_url": "https://api.github.com/users/MrOerni/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/MrOerni/nand2tetris", + "description": "The solutions for the nand2tetris.org course", + "fork": false, + "url": "https://api.github.com/repos/MrOerni/nand2tetris", + "forks_url": "https://api.github.com/repos/MrOerni/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/MrOerni/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MrOerni/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MrOerni/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/MrOerni/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/MrOerni/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/MrOerni/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/MrOerni/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/MrOerni/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/MrOerni/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/MrOerni/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MrOerni/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MrOerni/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MrOerni/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MrOerni/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MrOerni/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/MrOerni/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/MrOerni/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/MrOerni/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/MrOerni/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/MrOerni/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MrOerni/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MrOerni/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MrOerni/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MrOerni/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/MrOerni/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MrOerni/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/MrOerni/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MrOerni/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/MrOerni/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/MrOerni/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MrOerni/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MrOerni/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MrOerni/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/MrOerni/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/MrOerni/nand2tetris/deployments", + "created_at": "2015-05-27T10:23:37Z", + "updated_at": "2015-05-27T10:30:19Z", + "pushed_at": "2015-06-30T08:53:39Z", + "git_url": "git://github.com/MrOerni/nand2tetris.git", + "ssh_url": "git@github.com:MrOerni/nand2tetris.git", + "clone_url": "https://github.com/MrOerni/nand2tetris.git", + "svn_url": "https://github.com/MrOerni/nand2tetris", + "homepage": null, + "size": 452, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 36632332, + "name": "nand2tetris", + "full_name": "xbsd/nand2tetris", + "owner": { + "login": "xbsd", + "id": 1044445, + "avatar_url": "https://avatars.githubusercontent.com/u/1044445?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/xbsd", + "html_url": "https://github.com/xbsd", + "followers_url": "https://api.github.com/users/xbsd/followers", + "following_url": "https://api.github.com/users/xbsd/following{/other_user}", + "gists_url": "https://api.github.com/users/xbsd/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xbsd/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xbsd/subscriptions", + "organizations_url": "https://api.github.com/users/xbsd/orgs", + "repos_url": "https://api.github.com/users/xbsd/repos", + "events_url": "https://api.github.com/users/xbsd/events{/privacy}", + "received_events_url": "https://api.github.com/users/xbsd/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/xbsd/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/xbsd/nand2tetris", + "forks_url": "https://api.github.com/repos/xbsd/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/xbsd/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/xbsd/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/xbsd/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/xbsd/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/xbsd/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/xbsd/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/xbsd/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/xbsd/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/xbsd/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/xbsd/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/xbsd/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/xbsd/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/xbsd/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/xbsd/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/xbsd/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/xbsd/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/xbsd/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/xbsd/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/xbsd/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/xbsd/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/xbsd/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/xbsd/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/xbsd/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/xbsd/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/xbsd/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/xbsd/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/xbsd/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/xbsd/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/xbsd/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/xbsd/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/xbsd/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/xbsd/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/xbsd/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/xbsd/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/xbsd/nand2tetris/deployments", + "created_at": "2015-06-01T02:09:29Z", + "updated_at": "2015-06-01T02:13:53Z", + "pushed_at": "2015-06-04T23:35:36Z", + "git_url": "git://github.com/xbsd/nand2tetris.git", + "ssh_url": "git@github.com:xbsd/nand2tetris.git", + "clone_url": "https://github.com/xbsd/nand2tetris.git", + "svn_url": "https://github.com/xbsd/nand2tetris", + "homepage": null, + "size": 5636, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 34914063, + "name": "nand2tetris", + "full_name": "devgi/nand2tetris", + "owner": { + "login": "devgi", + "id": 4704722, + "avatar_url": "https://avatars.githubusercontent.com/u/4704722?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/devgi", + "html_url": "https://github.com/devgi", + "followers_url": "https://api.github.com/users/devgi/followers", + "following_url": "https://api.github.com/users/devgi/following{/other_user}", + "gists_url": "https://api.github.com/users/devgi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/devgi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/devgi/subscriptions", + "organizations_url": "https://api.github.com/users/devgi/orgs", + "repos_url": "https://api.github.com/users/devgi/repos", + "events_url": "https://api.github.com/users/devgi/events{/privacy}", + "received_events_url": "https://api.github.com/users/devgi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/devgi/nand2tetris", + "description": "Nand2Tetris IDC 2015", + "fork": false, + "url": "https://api.github.com/repos/devgi/nand2tetris", + "forks_url": "https://api.github.com/repos/devgi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/devgi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/devgi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/devgi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/devgi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/devgi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/devgi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/devgi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/devgi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/devgi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/devgi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/devgi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/devgi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/devgi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/devgi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/devgi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/devgi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/devgi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/devgi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/devgi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/devgi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/devgi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/devgi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/devgi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/devgi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/devgi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/devgi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/devgi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/devgi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/devgi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/devgi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/devgi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/devgi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/devgi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/devgi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/devgi/nand2tetris/deployments", + "created_at": "2015-05-01T17:18:12Z", + "updated_at": "2015-05-05T18:48:26Z", + "pushed_at": "2015-07-18T16:07:09Z", + "git_url": "git://github.com/devgi/nand2tetris.git", + "ssh_url": "git@github.com:devgi/nand2tetris.git", + "clone_url": "https://github.com/devgi/nand2tetris.git", + "svn_url": "https://github.com/devgi/nand2tetris", + "homepage": null, + "size": 412, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 34896789, + "name": "nand2tetris", + "full_name": "jyukutyo/nand2tetris", + "owner": { + "login": "jyukutyo", + "id": 60008, + "avatar_url": "https://avatars.githubusercontent.com/u/60008?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jyukutyo", + "html_url": "https://github.com/jyukutyo", + "followers_url": "https://api.github.com/users/jyukutyo/followers", + "following_url": "https://api.github.com/users/jyukutyo/following{/other_user}", + "gists_url": "https://api.github.com/users/jyukutyo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jyukutyo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jyukutyo/subscriptions", + "organizations_url": "https://api.github.com/users/jyukutyo/orgs", + "repos_url": "https://api.github.com/users/jyukutyo/repos", + "events_url": "https://api.github.com/users/jyukutyo/events{/privacy}", + "received_events_url": "https://api.github.com/users/jyukutyo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jyukutyo/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jyukutyo/nand2tetris", + "forks_url": "https://api.github.com/repos/jyukutyo/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jyukutyo/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jyukutyo/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jyukutyo/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jyukutyo/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jyukutyo/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jyukutyo/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jyukutyo/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jyukutyo/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jyukutyo/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jyukutyo/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jyukutyo/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jyukutyo/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jyukutyo/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jyukutyo/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jyukutyo/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jyukutyo/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jyukutyo/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jyukutyo/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jyukutyo/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jyukutyo/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jyukutyo/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jyukutyo/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jyukutyo/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jyukutyo/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jyukutyo/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jyukutyo/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jyukutyo/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jyukutyo/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jyukutyo/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jyukutyo/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jyukutyo/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jyukutyo/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jyukutyo/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jyukutyo/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jyukutyo/nand2tetris/deployments", + "created_at": "2015-05-01T09:33:33Z", + "updated_at": "2015-05-07T10:49:54Z", + "pushed_at": "2015-09-15T10:36:46Z", + "git_url": "git://github.com/jyukutyo/nand2tetris.git", + "ssh_url": "git@github.com:jyukutyo/nand2tetris.git", + "clone_url": "https://github.com/jyukutyo/nand2tetris.git", + "svn_url": "https://github.com/jyukutyo/nand2tetris", + "homepage": null, + "size": 312, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 34999439, + "name": "nand2tetris", + "full_name": "akshatshibu/nand2tetris", + "owner": { + "login": "akshatshibu", + "id": 11056030, + "avatar_url": "https://avatars.githubusercontent.com/u/11056030?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/akshatshibu", + "html_url": "https://github.com/akshatshibu", + "followers_url": "https://api.github.com/users/akshatshibu/followers", + "following_url": "https://api.github.com/users/akshatshibu/following{/other_user}", + "gists_url": "https://api.github.com/users/akshatshibu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/akshatshibu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/akshatshibu/subscriptions", + "organizations_url": "https://api.github.com/users/akshatshibu/orgs", + "repos_url": "https://api.github.com/users/akshatshibu/repos", + "events_url": "https://api.github.com/users/akshatshibu/events{/privacy}", + "received_events_url": "https://api.github.com/users/akshatshibu/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/akshatshibu/nand2tetris", + "description": "Nand2tetris is the course based on \"Building a Modern Computer from First Principles \".", + "fork": false, + "url": "https://api.github.com/repos/akshatshibu/nand2tetris", + "forks_url": "https://api.github.com/repos/akshatshibu/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/akshatshibu/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/akshatshibu/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/akshatshibu/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/akshatshibu/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/akshatshibu/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/akshatshibu/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/akshatshibu/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/akshatshibu/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/akshatshibu/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/akshatshibu/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/akshatshibu/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/akshatshibu/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/akshatshibu/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/akshatshibu/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/akshatshibu/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/akshatshibu/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/akshatshibu/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/akshatshibu/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/akshatshibu/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/akshatshibu/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/akshatshibu/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/akshatshibu/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/akshatshibu/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/akshatshibu/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/akshatshibu/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/akshatshibu/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/akshatshibu/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/akshatshibu/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/akshatshibu/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/akshatshibu/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/akshatshibu/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/akshatshibu/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/akshatshibu/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/akshatshibu/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/akshatshibu/nand2tetris/deployments", + "created_at": "2015-05-03T20:20:23Z", + "updated_at": "2015-05-03T21:06:16Z", + "pushed_at": "2015-05-03T21:06:16Z", + "git_url": "git://github.com/akshatshibu/nand2tetris.git", + "ssh_url": "git@github.com:akshatshibu/nand2tetris.git", + "clone_url": "https://github.com/akshatshibu/nand2tetris.git", + "svn_url": "https://github.com/akshatshibu/nand2tetris", + "homepage": null, + "size": 1192, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 34049837, + "name": "nand2tetris", + "full_name": "fonglh/nand2tetris", + "owner": { + "login": "fonglh", + "id": 1902527, + "avatar_url": "https://avatars.githubusercontent.com/u/1902527?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/fonglh", + "html_url": "https://github.com/fonglh", + "followers_url": "https://api.github.com/users/fonglh/followers", + "following_url": "https://api.github.com/users/fonglh/following{/other_user}", + "gists_url": "https://api.github.com/users/fonglh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fonglh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fonglh/subscriptions", + "organizations_url": "https://api.github.com/users/fonglh/orgs", + "repos_url": "https://api.github.com/users/fonglh/repos", + "events_url": "https://api.github.com/users/fonglh/events{/privacy}", + "received_events_url": "https://api.github.com/users/fonglh/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/fonglh/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/fonglh/nand2tetris", + "forks_url": "https://api.github.com/repos/fonglh/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/fonglh/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/fonglh/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/fonglh/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/fonglh/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/fonglh/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/fonglh/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/fonglh/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/fonglh/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/fonglh/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/fonglh/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/fonglh/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/fonglh/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/fonglh/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/fonglh/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/fonglh/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/fonglh/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/fonglh/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/fonglh/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/fonglh/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/fonglh/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/fonglh/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/fonglh/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/fonglh/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/fonglh/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/fonglh/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/fonglh/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/fonglh/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/fonglh/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/fonglh/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/fonglh/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/fonglh/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/fonglh/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/fonglh/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/fonglh/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/fonglh/nand2tetris/deployments", + "created_at": "2015-04-16T10:37:33Z", + "updated_at": "2015-04-16T10:38:52Z", + "pushed_at": "2015-04-16T10:38:51Z", + "git_url": "git://github.com/fonglh/nand2tetris.git", + "ssh_url": "git@github.com:fonglh/nand2tetris.git", + "clone_url": "https://github.com/fonglh/nand2tetris.git", + "svn_url": "https://github.com/fonglh/nand2tetris", + "homepage": null, + "size": 256, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 33833400, + "name": "nand2tetris", + "full_name": "mostlyerror/nand2tetris", + "owner": { + "login": "mostlyerror", + "id": 2030072, + "avatar_url": "https://avatars.githubusercontent.com/u/2030072?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mostlyerror", + "html_url": "https://github.com/mostlyerror", + "followers_url": "https://api.github.com/users/mostlyerror/followers", + "following_url": "https://api.github.com/users/mostlyerror/following{/other_user}", + "gists_url": "https://api.github.com/users/mostlyerror/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mostlyerror/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mostlyerror/subscriptions", + "organizations_url": "https://api.github.com/users/mostlyerror/orgs", + "repos_url": "https://api.github.com/users/mostlyerror/repos", + "events_url": "https://api.github.com/users/mostlyerror/events{/privacy}", + "received_events_url": "https://api.github.com/users/mostlyerror/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mostlyerror/nand2tetris", + "description": "following along with coursera's Nand To Tetris course... building the hardware/software stack from logic gates up through an assembler, compiler, os, etc", + "fork": false, + "url": "https://api.github.com/repos/mostlyerror/nand2tetris", + "forks_url": "https://api.github.com/repos/mostlyerror/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mostlyerror/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mostlyerror/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mostlyerror/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mostlyerror/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mostlyerror/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mostlyerror/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mostlyerror/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mostlyerror/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mostlyerror/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mostlyerror/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mostlyerror/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mostlyerror/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mostlyerror/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mostlyerror/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mostlyerror/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mostlyerror/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mostlyerror/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mostlyerror/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mostlyerror/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mostlyerror/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mostlyerror/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mostlyerror/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mostlyerror/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mostlyerror/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mostlyerror/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mostlyerror/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mostlyerror/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mostlyerror/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mostlyerror/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mostlyerror/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mostlyerror/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mostlyerror/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mostlyerror/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mostlyerror/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mostlyerror/nand2tetris/deployments", + "created_at": "2015-04-12T20:49:12Z", + "updated_at": "2015-04-12T20:51:31Z", + "pushed_at": "2015-04-12T20:51:30Z", + "git_url": "git://github.com/mostlyerror/nand2tetris.git", + "ssh_url": "git@github.com:mostlyerror/nand2tetris.git", + "clone_url": "https://github.com/mostlyerror/nand2tetris.git", + "svn_url": "https://github.com/mostlyerror/nand2tetris", + "homepage": null, + "size": 612, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 34157266, + "name": "nand2tetris", + "full_name": "alyosha1879/nand2tetris", + "owner": { + "login": "alyosha1879", + "id": 10344226, + "avatar_url": "https://avatars.githubusercontent.com/u/10344226?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/alyosha1879", + "html_url": "https://github.com/alyosha1879", + "followers_url": "https://api.github.com/users/alyosha1879/followers", + "following_url": "https://api.github.com/users/alyosha1879/following{/other_user}", + "gists_url": "https://api.github.com/users/alyosha1879/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alyosha1879/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alyosha1879/subscriptions", + "organizations_url": "https://api.github.com/users/alyosha1879/orgs", + "repos_url": "https://api.github.com/users/alyosha1879/repos", + "events_url": "https://api.github.com/users/alyosha1879/events{/privacy}", + "received_events_url": "https://api.github.com/users/alyosha1879/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/alyosha1879/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/alyosha1879/nand2tetris", + "forks_url": "https://api.github.com/repos/alyosha1879/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/alyosha1879/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/alyosha1879/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/alyosha1879/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/alyosha1879/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/alyosha1879/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/alyosha1879/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/alyosha1879/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/alyosha1879/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/alyosha1879/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/alyosha1879/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/alyosha1879/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/alyosha1879/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/alyosha1879/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/alyosha1879/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/alyosha1879/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/alyosha1879/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/alyosha1879/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/alyosha1879/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/alyosha1879/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/alyosha1879/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/alyosha1879/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/alyosha1879/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/alyosha1879/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/alyosha1879/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/alyosha1879/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/alyosha1879/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/alyosha1879/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/alyosha1879/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/alyosha1879/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/alyosha1879/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/alyosha1879/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/alyosha1879/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/alyosha1879/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/alyosha1879/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/alyosha1879/nand2tetris/deployments", + "created_at": "2015-04-18T07:44:06Z", + "updated_at": "2015-05-05T01:53:51Z", + "pushed_at": "2015-05-05T01:53:51Z", + "git_url": "git://github.com/alyosha1879/nand2tetris.git", + "ssh_url": "git@github.com:alyosha1879/nand2tetris.git", + "clone_url": "https://github.com/alyosha1879/nand2tetris.git", + "svn_url": "https://github.com/alyosha1879/nand2tetris", + "homepage": null, + "size": 188, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 34313152, + "name": "Nand2Tetris", + "full_name": "icecoobe/Nand2Tetris", + "owner": { + "login": "icecoobe", + "id": 1868736, + "avatar_url": "https://avatars.githubusercontent.com/u/1868736?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/icecoobe", + "html_url": "https://github.com/icecoobe", + "followers_url": "https://api.github.com/users/icecoobe/followers", + "following_url": "https://api.github.com/users/icecoobe/following{/other_user}", + "gists_url": "https://api.github.com/users/icecoobe/gists{/gist_id}", + "starred_url": "https://api.github.com/users/icecoobe/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/icecoobe/subscriptions", + "organizations_url": "https://api.github.com/users/icecoobe/orgs", + "repos_url": "https://api.github.com/users/icecoobe/repos", + "events_url": "https://api.github.com/users/icecoobe/events{/privacy}", + "received_events_url": "https://api.github.com/users/icecoobe/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/icecoobe/Nand2Tetris", + "description": "The Projects of the book The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/icecoobe/Nand2Tetris", + "forks_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/icecoobe/Nand2Tetris/deployments", + "created_at": "2015-04-21T08:03:58Z", + "updated_at": "2015-04-21T08:30:16Z", + "pushed_at": "2015-04-21T08:30:16Z", + "git_url": "git://github.com/icecoobe/Nand2Tetris.git", + "ssh_url": "git@github.com:icecoobe/Nand2Tetris.git", + "clone_url": "https://github.com/icecoobe/Nand2Tetris.git", + "svn_url": "https://github.com/icecoobe/Nand2Tetris", + "homepage": null, + "size": 648, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 41619876, + "name": "nand2tetris", + "full_name": "skatsuta/nand2tetris", + "owner": { + "login": "skatsuta", + "id": 5638269, + "avatar_url": "https://avatars.githubusercontent.com/u/5638269?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/skatsuta", + "html_url": "https://github.com/skatsuta", + "followers_url": "https://api.github.com/users/skatsuta/followers", + "following_url": "https://api.github.com/users/skatsuta/following{/other_user}", + "gists_url": "https://api.github.com/users/skatsuta/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skatsuta/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skatsuta/subscriptions", + "organizations_url": "https://api.github.com/users/skatsuta/orgs", + "repos_url": "https://api.github.com/users/skatsuta/repos", + "events_url": "https://api.github.com/users/skatsuta/events{/privacy}", + "received_events_url": "https://api.github.com/users/skatsuta/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/skatsuta/nand2tetris", + "description": "All the exercises in _The Elements of Computer Systems_.", + "fork": false, + "url": "https://api.github.com/repos/skatsuta/nand2tetris", + "forks_url": "https://api.github.com/repos/skatsuta/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/skatsuta/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/skatsuta/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/skatsuta/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/skatsuta/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/skatsuta/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/skatsuta/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/skatsuta/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/skatsuta/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/skatsuta/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/skatsuta/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/skatsuta/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/skatsuta/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/skatsuta/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/skatsuta/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/skatsuta/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/skatsuta/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/skatsuta/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/skatsuta/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/skatsuta/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/skatsuta/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/skatsuta/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/skatsuta/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/skatsuta/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/skatsuta/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/skatsuta/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/skatsuta/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/skatsuta/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/skatsuta/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/skatsuta/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/skatsuta/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/skatsuta/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/skatsuta/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/skatsuta/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/skatsuta/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/skatsuta/nand2tetris/deployments", + "created_at": "2015-08-30T07:05:32Z", + "updated_at": "2015-09-23T03:27:30Z", + "pushed_at": "2015-12-20T13:50:43Z", + "git_url": "git://github.com/skatsuta/nand2tetris.git", + "ssh_url": "git@github.com:skatsuta/nand2tetris.git", + "clone_url": "https://github.com/skatsuta/nand2tetris.git", + "svn_url": "https://github.com/skatsuta/nand2tetris", + "homepage": null, + "size": 1675, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 42912563, + "name": "nand2tetris", + "full_name": "IanBoyanZhang/nand2tetris", + "owner": { + "login": "IanBoyanZhang", + "id": 4110995, + "avatar_url": "https://avatars.githubusercontent.com/u/4110995?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/IanBoyanZhang", + "html_url": "https://github.com/IanBoyanZhang", + "followers_url": "https://api.github.com/users/IanBoyanZhang/followers", + "following_url": "https://api.github.com/users/IanBoyanZhang/following{/other_user}", + "gists_url": "https://api.github.com/users/IanBoyanZhang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/IanBoyanZhang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/IanBoyanZhang/subscriptions", + "organizations_url": "https://api.github.com/users/IanBoyanZhang/orgs", + "repos_url": "https://api.github.com/users/IanBoyanZhang/repos", + "events_url": "https://api.github.com/users/IanBoyanZhang/events{/privacy}", + "received_events_url": "https://api.github.com/users/IanBoyanZhang/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/IanBoyanZhang/nand2tetris", + "description": "Creating a general purpose computer system, starting from NAND gates all the way up to an implementation of Tetris", + "fork": false, + "url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris", + "forks_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/IanBoyanZhang/nand2tetris/deployments", + "created_at": "2015-09-22T05:04:34Z", + "updated_at": "2015-10-29T06:12:14Z", + "pushed_at": "2015-10-31T16:24:27Z", + "git_url": "git://github.com/IanBoyanZhang/nand2tetris.git", + "ssh_url": "git@github.com:IanBoyanZhang/nand2tetris.git", + "clone_url": "https://github.com/IanBoyanZhang/nand2tetris.git", + "svn_url": "https://github.com/IanBoyanZhang/nand2tetris", + "homepage": "", + "size": 352, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 31045593, + "name": "nand2tetris", + "full_name": "rgravina/nand2tetris", + "owner": { + "login": "rgravina", + "id": 19086, + "avatar_url": "https://avatars.githubusercontent.com/u/19086?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rgravina", + "html_url": "https://github.com/rgravina", + "followers_url": "https://api.github.com/users/rgravina/followers", + "following_url": "https://api.github.com/users/rgravina/following{/other_user}", + "gists_url": "https://api.github.com/users/rgravina/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rgravina/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rgravina/subscriptions", + "organizations_url": "https://api.github.com/users/rgravina/orgs", + "repos_url": "https://api.github.com/users/rgravina/repos", + "events_url": "https://api.github.com/users/rgravina/events{/privacy}", + "received_events_url": "https://api.github.com/users/rgravina/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/rgravina/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/rgravina/nand2tetris", + "forks_url": "https://api.github.com/repos/rgravina/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/rgravina/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rgravina/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rgravina/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/rgravina/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/rgravina/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/rgravina/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/rgravina/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/rgravina/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/rgravina/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/rgravina/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rgravina/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rgravina/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rgravina/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rgravina/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rgravina/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/rgravina/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/rgravina/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/rgravina/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/rgravina/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/rgravina/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rgravina/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rgravina/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rgravina/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rgravina/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/rgravina/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rgravina/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/rgravina/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rgravina/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/rgravina/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/rgravina/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rgravina/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rgravina/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rgravina/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/rgravina/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/rgravina/nand2tetris/deployments", + "created_at": "2015-02-20T01:03:36Z", + "updated_at": "2015-05-04T23:22:57Z", + "pushed_at": "2015-10-31T07:52:32Z", + "git_url": "git://github.com/rgravina/nand2tetris.git", + "ssh_url": "git@github.com:rgravina/nand2tetris.git", + "clone_url": "https://github.com/rgravina/nand2tetris.git", + "svn_url": "https://github.com/rgravina/nand2tetris", + "homepage": null, + "size": 1320, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 50275203, + "name": "Nand2Tetris", + "full_name": "addsict/Nand2Tetris", + "owner": { + "login": "addsict", + "id": 1595215, + "avatar_url": "https://avatars.githubusercontent.com/u/1595215?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/addsict", + "html_url": "https://github.com/addsict", + "followers_url": "https://api.github.com/users/addsict/followers", + "following_url": "https://api.github.com/users/addsict/following{/other_user}", + "gists_url": "https://api.github.com/users/addsict/gists{/gist_id}", + "starred_url": "https://api.github.com/users/addsict/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/addsict/subscriptions", + "organizations_url": "https://api.github.com/users/addsict/orgs", + "repos_url": "https://api.github.com/users/addsict/repos", + "events_url": "https://api.github.com/users/addsict/events{/privacy}", + "received_events_url": "https://api.github.com/users/addsict/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/addsict/Nand2Tetris", + "description": "Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/addsict/Nand2Tetris", + "forks_url": "https://api.github.com/repos/addsict/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/addsict/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/addsict/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/addsict/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/addsict/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/addsict/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/addsict/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/addsict/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/addsict/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/addsict/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/addsict/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/addsict/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/addsict/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/addsict/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/addsict/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/addsict/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/addsict/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/addsict/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/addsict/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/addsict/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/addsict/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/addsict/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/addsict/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/addsict/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/addsict/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/addsict/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/addsict/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/addsict/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/addsict/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/addsict/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/addsict/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/addsict/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/addsict/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/addsict/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/addsict/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/addsict/Nand2Tetris/deployments", + "created_at": "2016-01-24T06:22:51Z", + "updated_at": "2016-01-24T06:27:03Z", + "pushed_at": "2016-01-24T12:47:38Z", + "git_url": "git://github.com/addsict/Nand2Tetris.git", + "ssh_url": "git@github.com:addsict/Nand2Tetris.git", + "clone_url": "https://github.com/addsict/Nand2Tetris.git", + "svn_url": "https://github.com/addsict/Nand2Tetris", + "homepage": null, + "size": 169, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 48831936, + "name": "nand2tetris", + "full_name": "tones111/nand2tetris", + "owner": { + "login": "tones111", + "id": 828656, + "avatar_url": "https://avatars.githubusercontent.com/u/828656?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tones111", + "html_url": "https://github.com/tones111", + "followers_url": "https://api.github.com/users/tones111/followers", + "following_url": "https://api.github.com/users/tones111/following{/other_user}", + "gists_url": "https://api.github.com/users/tones111/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tones111/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tones111/subscriptions", + "organizations_url": "https://api.github.com/users/tones111/orgs", + "repos_url": "https://api.github.com/users/tones111/repos", + "events_url": "https://api.github.com/users/tones111/events{/privacy}", + "received_events_url": "https://api.github.com/users/tones111/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tones111/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/tones111/nand2tetris", + "forks_url": "https://api.github.com/repos/tones111/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tones111/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tones111/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tones111/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tones111/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tones111/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tones111/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tones111/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tones111/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tones111/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tones111/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tones111/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tones111/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tones111/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tones111/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tones111/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tones111/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tones111/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tones111/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tones111/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tones111/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tones111/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tones111/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tones111/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tones111/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tones111/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tones111/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tones111/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tones111/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tones111/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tones111/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tones111/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tones111/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tones111/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tones111/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tones111/nand2tetris/deployments", + "created_at": "2015-12-31T03:46:03Z", + "updated_at": "2015-12-31T03:46:49Z", + "pushed_at": "2015-12-31T03:47:17Z", + "git_url": "git://github.com/tones111/nand2tetris.git", + "ssh_url": "git@github.com:tones111/nand2tetris.git", + "clone_url": "https://github.com/tones111/nand2tetris.git", + "svn_url": "https://github.com/tones111/nand2tetris", + "homepage": null, + "size": 520, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 48820565, + "name": "nand2tetris", + "full_name": "raymondethan/nand2tetris", + "owner": { + "login": "raymondethan", + "id": 5714523, + "avatar_url": "https://avatars.githubusercontent.com/u/5714523?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/raymondethan", + "html_url": "https://github.com/raymondethan", + "followers_url": "https://api.github.com/users/raymondethan/followers", + "following_url": "https://api.github.com/users/raymondethan/following{/other_user}", + "gists_url": "https://api.github.com/users/raymondethan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/raymondethan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/raymondethan/subscriptions", + "organizations_url": "https://api.github.com/users/raymondethan/orgs", + "repos_url": "https://api.github.com/users/raymondethan/repos", + "events_url": "https://api.github.com/users/raymondethan/events{/privacy}", + "received_events_url": "https://api.github.com/users/raymondethan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/raymondethan/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/raymondethan/nand2tetris", + "forks_url": "https://api.github.com/repos/raymondethan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/raymondethan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/raymondethan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/raymondethan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/raymondethan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/raymondethan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/raymondethan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/raymondethan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/raymondethan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/raymondethan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/raymondethan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/raymondethan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/raymondethan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/raymondethan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/raymondethan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/raymondethan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/raymondethan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/raymondethan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/raymondethan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/raymondethan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/raymondethan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/raymondethan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/raymondethan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/raymondethan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/raymondethan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/raymondethan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/raymondethan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/raymondethan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/raymondethan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/raymondethan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/raymondethan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/raymondethan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/raymondethan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/raymondethan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/raymondethan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/raymondethan/nand2tetris/deployments", + "created_at": "2015-12-30T21:42:24Z", + "updated_at": "2015-12-30T21:50:07Z", + "pushed_at": "2015-12-30T21:50:05Z", + "git_url": "git://github.com/raymondethan/nand2tetris.git", + "ssh_url": "git@github.com:raymondethan/nand2tetris.git", + "clone_url": "https://github.com/raymondethan/nand2tetris.git", + "svn_url": "https://github.com/raymondethan/nand2tetris", + "homepage": null, + "size": 535, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 37582867, + "name": "nand2tetris", + "full_name": "theapi/nand2tetris", + "owner": { + "login": "theapi", + "id": 2162420, + "avatar_url": "https://avatars.githubusercontent.com/u/2162420?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/theapi", + "html_url": "https://github.com/theapi", + "followers_url": "https://api.github.com/users/theapi/followers", + "following_url": "https://api.github.com/users/theapi/following{/other_user}", + "gists_url": "https://api.github.com/users/theapi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/theapi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/theapi/subscriptions", + "organizations_url": "https://api.github.com/users/theapi/orgs", + "repos_url": "https://api.github.com/users/theapi/repos", + "events_url": "https://api.github.com/users/theapi/events{/privacy}", + "received_events_url": "https://api.github.com/users/theapi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/theapi/nand2tetris", + "description": "http://www.nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/theapi/nand2tetris", + "forks_url": "https://api.github.com/repos/theapi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/theapi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/theapi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/theapi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/theapi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/theapi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/theapi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/theapi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/theapi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/theapi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/theapi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/theapi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/theapi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/theapi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/theapi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/theapi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/theapi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/theapi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/theapi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/theapi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/theapi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/theapi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/theapi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/theapi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/theapi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/theapi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/theapi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/theapi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/theapi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/theapi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/theapi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/theapi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/theapi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/theapi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/theapi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/theapi/nand2tetris/deployments", + "created_at": "2015-06-17T08:35:07Z", + "updated_at": "2016-01-20T09:28:58Z", + "pushed_at": "2016-01-26T14:09:49Z", + "git_url": "git://github.com/theapi/nand2tetris.git", + "ssh_url": "git@github.com:theapi/nand2tetris.git", + "clone_url": "https://github.com/theapi/nand2tetris.git", + "svn_url": "https://github.com/theapi/nand2tetris", + "homepage": null, + "size": 337, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 42762825, + "name": "nand2tetris", + "full_name": "youkidearitai/nand2tetris", + "owner": { + "login": "youkidearitai", + "id": 305368, + "avatar_url": "https://avatars.githubusercontent.com/u/305368?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/youkidearitai", + "html_url": "https://github.com/youkidearitai", + "followers_url": "https://api.github.com/users/youkidearitai/followers", + "following_url": "https://api.github.com/users/youkidearitai/following{/other_user}", + "gists_url": "https://api.github.com/users/youkidearitai/gists{/gist_id}", + "starred_url": "https://api.github.com/users/youkidearitai/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/youkidearitai/subscriptions", + "organizations_url": "https://api.github.com/users/youkidearitai/orgs", + "repos_url": "https://api.github.com/users/youkidearitai/repos", + "events_url": "https://api.github.com/users/youkidearitai/events{/privacy}", + "received_events_url": "https://api.github.com/users/youkidearitai/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/youkidearitai/nand2tetris", + "description": "nand2tetris.org / コンピュータシステムの理論と実装の解答", + "fork": false, + "url": "https://api.github.com/repos/youkidearitai/nand2tetris", + "forks_url": "https://api.github.com/repos/youkidearitai/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/youkidearitai/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/youkidearitai/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/youkidearitai/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/youkidearitai/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/youkidearitai/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/youkidearitai/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/youkidearitai/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/youkidearitai/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/youkidearitai/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/youkidearitai/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/youkidearitai/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/youkidearitai/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/youkidearitai/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/youkidearitai/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/youkidearitai/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/youkidearitai/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/youkidearitai/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/youkidearitai/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/youkidearitai/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/youkidearitai/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/youkidearitai/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/youkidearitai/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/youkidearitai/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/youkidearitai/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/youkidearitai/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/youkidearitai/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/youkidearitai/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/youkidearitai/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/youkidearitai/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/youkidearitai/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/youkidearitai/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/youkidearitai/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/youkidearitai/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/youkidearitai/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/youkidearitai/nand2tetris/deployments", + "created_at": "2015-09-19T06:39:43Z", + "updated_at": "2016-01-30T10:25:05Z", + "pushed_at": "2016-01-30T10:25:03Z", + "git_url": "git://github.com/youkidearitai/nand2tetris.git", + "ssh_url": "git@github.com:youkidearitai/nand2tetris.git", + "clone_url": "https://github.com/youkidearitai/nand2tetris.git", + "svn_url": "https://github.com/youkidearitai/nand2tetris", + "homepage": null, + "size": 126, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 49466232, + "name": "nand2tetris", + "full_name": "DrZoo/nand2tetris", + "owner": { + "login": "DrZoo", + "id": 9037345, + "avatar_url": "https://avatars.githubusercontent.com/u/9037345?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/DrZoo", + "html_url": "https://github.com/DrZoo", + "followers_url": "https://api.github.com/users/DrZoo/followers", + "following_url": "https://api.github.com/users/DrZoo/following{/other_user}", + "gists_url": "https://api.github.com/users/DrZoo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/DrZoo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/DrZoo/subscriptions", + "organizations_url": "https://api.github.com/users/DrZoo/orgs", + "repos_url": "https://api.github.com/users/DrZoo/repos", + "events_url": "https://api.github.com/users/DrZoo/events{/privacy}", + "received_events_url": "https://api.github.com/users/DrZoo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/DrZoo/nand2tetris", + "description": "nand2tetris project", + "fork": false, + "url": "https://api.github.com/repos/DrZoo/nand2tetris", + "forks_url": "https://api.github.com/repos/DrZoo/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/DrZoo/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/DrZoo/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/DrZoo/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/DrZoo/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/DrZoo/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/DrZoo/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/DrZoo/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/DrZoo/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/DrZoo/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/DrZoo/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/DrZoo/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/DrZoo/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/DrZoo/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/DrZoo/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/DrZoo/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/DrZoo/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/DrZoo/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/DrZoo/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/DrZoo/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/DrZoo/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/DrZoo/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/DrZoo/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/DrZoo/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/DrZoo/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/DrZoo/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/DrZoo/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/DrZoo/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/DrZoo/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/DrZoo/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/DrZoo/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/DrZoo/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/DrZoo/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/DrZoo/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/DrZoo/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/DrZoo/nand2tetris/deployments", + "created_at": "2016-01-12T01:28:57Z", + "updated_at": "2016-01-12T01:29:06Z", + "pushed_at": "2016-03-03T01:27:11Z", + "git_url": "git://github.com/DrZoo/nand2tetris.git", + "ssh_url": "git@github.com:DrZoo/nand2tetris.git", + "clone_url": "https://github.com/DrZoo/nand2tetris.git", + "svn_url": "https://github.com/DrZoo/nand2tetris", + "homepage": null, + "size": 551, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 49663310, + "name": "Nand2Tetris", + "full_name": "JRempel/Nand2Tetris", + "owner": { + "login": "JRempel", + "id": 16583409, + "avatar_url": "https://avatars.githubusercontent.com/u/16583409?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/JRempel", + "html_url": "https://github.com/JRempel", + "followers_url": "https://api.github.com/users/JRempel/followers", + "following_url": "https://api.github.com/users/JRempel/following{/other_user}", + "gists_url": "https://api.github.com/users/JRempel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JRempel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JRempel/subscriptions", + "organizations_url": "https://api.github.com/users/JRempel/orgs", + "repos_url": "https://api.github.com/users/JRempel/repos", + "events_url": "https://api.github.com/users/JRempel/events{/privacy}", + "received_events_url": "https://api.github.com/users/JRempel/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/JRempel/Nand2Tetris", + "description": "My solutions for Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/JRempel/Nand2Tetris", + "forks_url": "https://api.github.com/repos/JRempel/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/JRempel/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/JRempel/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/JRempel/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/JRempel/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/JRempel/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/JRempel/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/JRempel/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/JRempel/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/JRempel/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/JRempel/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/JRempel/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/JRempel/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/JRempel/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/JRempel/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/JRempel/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/JRempel/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/JRempel/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/JRempel/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/JRempel/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/JRempel/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/JRempel/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/JRempel/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/JRempel/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/JRempel/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/JRempel/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/JRempel/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/JRempel/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/JRempel/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/JRempel/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/JRempel/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/JRempel/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/JRempel/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/JRempel/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/JRempel/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/JRempel/Nand2Tetris/deployments", + "created_at": "2016-01-14T17:31:48Z", + "updated_at": "2016-02-24T01:57:29Z", + "pushed_at": "2016-02-24T01:57:29Z", + "git_url": "git://github.com/JRempel/Nand2Tetris.git", + "ssh_url": "git@github.com:JRempel/Nand2Tetris.git", + "clone_url": "https://github.com/JRempel/Nand2Tetris.git", + "svn_url": "https://github.com/JRempel/Nand2Tetris", + "homepage": null, + "size": 12, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 52869798, + "name": "nand2tetris", + "full_name": "lpld/nand2tetris", + "owner": { + "login": "lpld", + "id": 995622, + "avatar_url": "https://avatars.githubusercontent.com/u/995622?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lpld", + "html_url": "https://github.com/lpld", + "followers_url": "https://api.github.com/users/lpld/followers", + "following_url": "https://api.github.com/users/lpld/following{/other_user}", + "gists_url": "https://api.github.com/users/lpld/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lpld/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lpld/subscriptions", + "organizations_url": "https://api.github.com/users/lpld/orgs", + "repos_url": "https://api.github.com/users/lpld/repos", + "events_url": "https://api.github.com/users/lpld/events{/privacy}", + "received_events_url": "https://api.github.com/users/lpld/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lpld/nand2tetris", + "description": "http://nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/lpld/nand2tetris", + "forks_url": "https://api.github.com/repos/lpld/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lpld/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lpld/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lpld/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lpld/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lpld/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lpld/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lpld/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lpld/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lpld/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lpld/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lpld/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lpld/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lpld/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lpld/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lpld/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lpld/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lpld/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lpld/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lpld/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lpld/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lpld/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lpld/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lpld/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lpld/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lpld/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lpld/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lpld/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lpld/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lpld/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lpld/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lpld/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lpld/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lpld/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lpld/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lpld/nand2tetris/deployments", + "created_at": "2016-03-01T10:49:41Z", + "updated_at": "2016-03-27T20:11:34Z", + "pushed_at": "2016-03-28T23:06:27Z", + "git_url": "git://github.com/lpld/nand2tetris.git", + "ssh_url": "git@github.com:lpld/nand2tetris.git", + "clone_url": "https://github.com/lpld/nand2tetris.git", + "svn_url": "https://github.com/lpld/nand2tetris", + "homepage": null, + "size": 90, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 53365604, + "name": "nand2tetris", + "full_name": "mdaisuke/nand2tetris", + "owner": { + "login": "mdaisuke", + "id": 122267, + "avatar_url": "https://avatars.githubusercontent.com/u/122267?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mdaisuke", + "html_url": "https://github.com/mdaisuke", + "followers_url": "https://api.github.com/users/mdaisuke/followers", + "following_url": "https://api.github.com/users/mdaisuke/following{/other_user}", + "gists_url": "https://api.github.com/users/mdaisuke/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mdaisuke/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mdaisuke/subscriptions", + "organizations_url": "https://api.github.com/users/mdaisuke/orgs", + "repos_url": "https://api.github.com/users/mdaisuke/repos", + "events_url": "https://api.github.com/users/mdaisuke/events{/privacy}", + "received_events_url": "https://api.github.com/users/mdaisuke/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mdaisuke/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/mdaisuke/nand2tetris", + "forks_url": "https://api.github.com/repos/mdaisuke/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mdaisuke/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mdaisuke/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mdaisuke/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mdaisuke/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mdaisuke/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mdaisuke/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mdaisuke/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mdaisuke/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mdaisuke/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mdaisuke/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mdaisuke/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mdaisuke/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mdaisuke/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mdaisuke/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mdaisuke/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mdaisuke/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mdaisuke/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mdaisuke/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mdaisuke/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mdaisuke/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mdaisuke/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mdaisuke/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mdaisuke/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mdaisuke/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mdaisuke/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mdaisuke/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mdaisuke/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mdaisuke/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mdaisuke/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mdaisuke/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mdaisuke/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mdaisuke/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mdaisuke/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mdaisuke/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mdaisuke/nand2tetris/deployments", + "created_at": "2016-03-07T23:03:35Z", + "updated_at": "2016-03-07T23:33:26Z", + "pushed_at": "2016-03-07T23:33:23Z", + "git_url": "git://github.com/mdaisuke/nand2tetris.git", + "ssh_url": "git@github.com:mdaisuke/nand2tetris.git", + "clone_url": "https://github.com/mdaisuke/nand2tetris.git", + "svn_url": "https://github.com/mdaisuke/nand2tetris", + "homepage": null, + "size": 1061, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 52034219, + "name": "nandToTetris", + "full_name": "seabjackson/nandToTetris", + "owner": { + "login": "seabjackson", + "id": 11398615, + "avatar_url": "https://avatars.githubusercontent.com/u/11398615?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/seabjackson", + "html_url": "https://github.com/seabjackson", + "followers_url": "https://api.github.com/users/seabjackson/followers", + "following_url": "https://api.github.com/users/seabjackson/following{/other_user}", + "gists_url": "https://api.github.com/users/seabjackson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/seabjackson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/seabjackson/subscriptions", + "organizations_url": "https://api.github.com/users/seabjackson/orgs", + "repos_url": "https://api.github.com/users/seabjackson/repos", + "events_url": "https://api.github.com/users/seabjackson/events{/privacy}", + "received_events_url": "https://api.github.com/users/seabjackson/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/seabjackson/nandToTetris", + "description": "Starting with primitive Nand gates I will construct a computer that can be programmed to even play computer games.", + "fork": false, + "url": "https://api.github.com/repos/seabjackson/nandToTetris", + "forks_url": "https://api.github.com/repos/seabjackson/nandToTetris/forks", + "keys_url": "https://api.github.com/repos/seabjackson/nandToTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/seabjackson/nandToTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/seabjackson/nandToTetris/teams", + "hooks_url": "https://api.github.com/repos/seabjackson/nandToTetris/hooks", + "issue_events_url": "https://api.github.com/repos/seabjackson/nandToTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/seabjackson/nandToTetris/events", + "assignees_url": "https://api.github.com/repos/seabjackson/nandToTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/seabjackson/nandToTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/seabjackson/nandToTetris/tags", + "blobs_url": "https://api.github.com/repos/seabjackson/nandToTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/seabjackson/nandToTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/seabjackson/nandToTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/seabjackson/nandToTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/seabjackson/nandToTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/seabjackson/nandToTetris/languages", + "stargazers_url": "https://api.github.com/repos/seabjackson/nandToTetris/stargazers", + "contributors_url": "https://api.github.com/repos/seabjackson/nandToTetris/contributors", + "subscribers_url": "https://api.github.com/repos/seabjackson/nandToTetris/subscribers", + "subscription_url": "https://api.github.com/repos/seabjackson/nandToTetris/subscription", + "commits_url": "https://api.github.com/repos/seabjackson/nandToTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/seabjackson/nandToTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/seabjackson/nandToTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/seabjackson/nandToTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/seabjackson/nandToTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/seabjackson/nandToTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/seabjackson/nandToTetris/merges", + "archive_url": "https://api.github.com/repos/seabjackson/nandToTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/seabjackson/nandToTetris/downloads", + "issues_url": "https://api.github.com/repos/seabjackson/nandToTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/seabjackson/nandToTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/seabjackson/nandToTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/seabjackson/nandToTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/seabjackson/nandToTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/seabjackson/nandToTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/seabjackson/nandToTetris/deployments", + "created_at": "2016-02-18T19:51:20Z", + "updated_at": "2016-02-19T02:08:44Z", + "pushed_at": "2016-03-07T20:29:51Z", + "git_url": "git://github.com/seabjackson/nandToTetris.git", + "ssh_url": "git@github.com:seabjackson/nandToTetris.git", + "clone_url": "https://github.com/seabjackson/nandToTetris.git", + "svn_url": "https://github.com/seabjackson/nandToTetris", + "homepage": null, + "size": 514, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 54548569, + "name": "nand2tetris", + "full_name": "MakSim345/nand2tetris", + "owner": { + "login": "MakSim345", + "id": 2471397, + "avatar_url": "https://avatars.githubusercontent.com/u/2471397?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MakSim345", + "html_url": "https://github.com/MakSim345", + "followers_url": "https://api.github.com/users/MakSim345/followers", + "following_url": "https://api.github.com/users/MakSim345/following{/other_user}", + "gists_url": "https://api.github.com/users/MakSim345/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MakSim345/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MakSim345/subscriptions", + "organizations_url": "https://api.github.com/users/MakSim345/orgs", + "repos_url": "https://api.github.com/users/MakSim345/repos", + "events_url": "https://api.github.com/users/MakSim345/events{/privacy}", + "received_events_url": "https://api.github.com/users/MakSim345/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/MakSim345/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/MakSim345/nand2tetris", + "forks_url": "https://api.github.com/repos/MakSim345/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/MakSim345/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MakSim345/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MakSim345/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/MakSim345/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/MakSim345/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/MakSim345/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/MakSim345/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/MakSim345/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/MakSim345/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/MakSim345/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MakSim345/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MakSim345/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MakSim345/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MakSim345/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MakSim345/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/MakSim345/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/MakSim345/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/MakSim345/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/MakSim345/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/MakSim345/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MakSim345/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MakSim345/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MakSim345/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MakSim345/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/MakSim345/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MakSim345/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/MakSim345/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MakSim345/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/MakSim345/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/MakSim345/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MakSim345/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MakSim345/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MakSim345/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/MakSim345/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/MakSim345/nand2tetris/deployments", + "created_at": "2016-03-23T09:50:32Z", + "updated_at": "2016-03-23T10:00:08Z", + "pushed_at": "2016-03-23T10:01:36Z", + "git_url": "git://github.com/MakSim345/nand2tetris.git", + "ssh_url": "git@github.com:MakSim345/nand2tetris.git", + "clone_url": "https://github.com/MakSim345/nand2tetris.git", + "svn_url": "https://github.com/MakSim345/nand2tetris", + "homepage": null, + "size": 190, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 53068598, + "name": "nand2tetris", + "full_name": "jfitzell/nand2tetris", + "owner": { + "login": "jfitzell", + "id": 2814934, + "avatar_url": "https://avatars.githubusercontent.com/u/2814934?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jfitzell", + "html_url": "https://github.com/jfitzell", + "followers_url": "https://api.github.com/users/jfitzell/followers", + "following_url": "https://api.github.com/users/jfitzell/following{/other_user}", + "gists_url": "https://api.github.com/users/jfitzell/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jfitzell/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jfitzell/subscriptions", + "organizations_url": "https://api.github.com/users/jfitzell/orgs", + "repos_url": "https://api.github.com/users/jfitzell/repos", + "events_url": "https://api.github.com/users/jfitzell/events{/privacy}", + "received_events_url": "https://api.github.com/users/jfitzell/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jfitzell/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jfitzell/nand2tetris", + "forks_url": "https://api.github.com/repos/jfitzell/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jfitzell/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jfitzell/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jfitzell/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jfitzell/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jfitzell/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jfitzell/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jfitzell/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jfitzell/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jfitzell/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jfitzell/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jfitzell/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jfitzell/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jfitzell/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jfitzell/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jfitzell/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jfitzell/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jfitzell/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jfitzell/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jfitzell/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jfitzell/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jfitzell/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jfitzell/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jfitzell/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jfitzell/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jfitzell/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jfitzell/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jfitzell/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jfitzell/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jfitzell/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jfitzell/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jfitzell/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jfitzell/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jfitzell/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jfitzell/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jfitzell/nand2tetris/deployments", + "created_at": "2016-03-03T17:13:48Z", + "updated_at": "2016-03-03T17:15:33Z", + "pushed_at": "2016-03-09T11:22:59Z", + "git_url": "git://github.com/jfitzell/nand2tetris.git", + "ssh_url": "git@github.com:jfitzell/nand2tetris.git", + "clone_url": "https://github.com/jfitzell/nand2tetris.git", + "svn_url": "https://github.com/jfitzell/nand2tetris", + "homepage": null, + "size": 173, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 52258088, + "name": "nand2tetris", + "full_name": "jbazalar/nand2tetris", + "owner": { + "login": "jbazalar", + "id": 3432440, + "avatar_url": "https://avatars.githubusercontent.com/u/3432440?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jbazalar", + "html_url": "https://github.com/jbazalar", + "followers_url": "https://api.github.com/users/jbazalar/followers", + "following_url": "https://api.github.com/users/jbazalar/following{/other_user}", + "gists_url": "https://api.github.com/users/jbazalar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jbazalar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jbazalar/subscriptions", + "organizations_url": "https://api.github.com/users/jbazalar/orgs", + "repos_url": "https://api.github.com/users/jbazalar/repos", + "events_url": "https://api.github.com/users/jbazalar/events{/privacy}", + "received_events_url": "https://api.github.com/users/jbazalar/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jbazalar/nand2tetris", + "description": "Work done for the nand2tetris course.", + "fork": false, + "url": "https://api.github.com/repos/jbazalar/nand2tetris", + "forks_url": "https://api.github.com/repos/jbazalar/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jbazalar/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jbazalar/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jbazalar/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jbazalar/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jbazalar/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jbazalar/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jbazalar/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jbazalar/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jbazalar/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jbazalar/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jbazalar/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jbazalar/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jbazalar/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jbazalar/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jbazalar/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jbazalar/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jbazalar/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jbazalar/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jbazalar/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jbazalar/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jbazalar/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jbazalar/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jbazalar/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jbazalar/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jbazalar/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jbazalar/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jbazalar/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jbazalar/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jbazalar/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jbazalar/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jbazalar/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jbazalar/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jbazalar/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jbazalar/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jbazalar/nand2tetris/deployments", + "created_at": "2016-02-22T08:20:26Z", + "updated_at": "2016-02-22T08:21:57Z", + "pushed_at": "2016-03-09T05:13:03Z", + "git_url": "git://github.com/jbazalar/nand2tetris.git", + "ssh_url": "git@github.com:jbazalar/nand2tetris.git", + "clone_url": "https://github.com/jbazalar/nand2tetris.git", + "svn_url": "https://github.com/jbazalar/nand2tetris", + "homepage": null, + "size": 508, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 53259745, + "name": "Nand2tetris", + "full_name": "talsagiv/Nand2tetris", + "owner": { + "login": "talsagiv", + "id": 15180556, + "avatar_url": "https://avatars.githubusercontent.com/u/15180556?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/talsagiv", + "html_url": "https://github.com/talsagiv", + "followers_url": "https://api.github.com/users/talsagiv/followers", + "following_url": "https://api.github.com/users/talsagiv/following{/other_user}", + "gists_url": "https://api.github.com/users/talsagiv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/talsagiv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/talsagiv/subscriptions", + "organizations_url": "https://api.github.com/users/talsagiv/orgs", + "repos_url": "https://api.github.com/users/talsagiv/repos", + "events_url": "https://api.github.com/users/talsagiv/events{/privacy}", + "received_events_url": "https://api.github.com/users/talsagiv/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/talsagiv/Nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/talsagiv/Nand2tetris", + "forks_url": "https://api.github.com/repos/talsagiv/Nand2tetris/forks", + "keys_url": "https://api.github.com/repos/talsagiv/Nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/talsagiv/Nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/talsagiv/Nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/talsagiv/Nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/talsagiv/Nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/talsagiv/Nand2tetris/events", + "assignees_url": "https://api.github.com/repos/talsagiv/Nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/talsagiv/Nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/talsagiv/Nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/talsagiv/Nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/talsagiv/Nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/talsagiv/Nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/talsagiv/Nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/talsagiv/Nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/talsagiv/Nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/talsagiv/Nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/talsagiv/Nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/talsagiv/Nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/talsagiv/Nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/talsagiv/Nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/talsagiv/Nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/talsagiv/Nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/talsagiv/Nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/talsagiv/Nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/talsagiv/Nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/talsagiv/Nand2tetris/merges", + "archive_url": "https://api.github.com/repos/talsagiv/Nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/talsagiv/Nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/talsagiv/Nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/talsagiv/Nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/talsagiv/Nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/talsagiv/Nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/talsagiv/Nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/talsagiv/Nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/talsagiv/Nand2tetris/deployments", + "created_at": "2016-03-06T14:46:54Z", + "updated_at": "2016-03-09T14:15:38Z", + "pushed_at": "2016-03-09T15:34:01Z", + "git_url": "git://github.com/talsagiv/Nand2tetris.git", + "ssh_url": "git@github.com:talsagiv/Nand2tetris.git", + "clone_url": "https://github.com/talsagiv/Nand2tetris.git", + "svn_url": "https://github.com/talsagiv/Nand2tetris", + "homepage": null, + "size": 514, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 50848986, + "name": "Nand2Tetris", + "full_name": "saikumarm4/Nand2Tetris", + "owner": { + "login": "saikumarm4", + "id": 8482002, + "avatar_url": "https://avatars.githubusercontent.com/u/8482002?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/saikumarm4", + "html_url": "https://github.com/saikumarm4", + "followers_url": "https://api.github.com/users/saikumarm4/followers", + "following_url": "https://api.github.com/users/saikumarm4/following{/other_user}", + "gists_url": "https://api.github.com/users/saikumarm4/gists{/gist_id}", + "starred_url": "https://api.github.com/users/saikumarm4/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/saikumarm4/subscriptions", + "organizations_url": "https://api.github.com/users/saikumarm4/orgs", + "repos_url": "https://api.github.com/users/saikumarm4/repos", + "events_url": "https://api.github.com/users/saikumarm4/events{/privacy}", + "received_events_url": "https://api.github.com/users/saikumarm4/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/saikumarm4/Nand2Tetris", + "description": "This repository consists of Implementation for Nand2Tetris assignments", + "fork": false, + "url": "https://api.github.com/repos/saikumarm4/Nand2Tetris", + "forks_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/saikumarm4/Nand2Tetris/deployments", + "created_at": "2016-02-01T15:34:28Z", + "updated_at": "2016-02-21T05:42:03Z", + "pushed_at": "2016-03-30T02:19:17Z", + "git_url": "git://github.com/saikumarm4/Nand2Tetris.git", + "ssh_url": "git@github.com:saikumarm4/Nand2Tetris.git", + "clone_url": "https://github.com/saikumarm4/Nand2Tetris.git", + "svn_url": "https://github.com/saikumarm4/Nand2Tetris", + "homepage": null, + "size": 152, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 47659906, + "name": "nand2tetris_projects", + "full_name": "ccckmit/nand2tetris_projects", + "owner": { + "login": "ccckmit", + "id": 1188390, + "avatar_url": "https://avatars.githubusercontent.com/u/1188390?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ccckmit", + "html_url": "https://github.com/ccckmit", + "followers_url": "https://api.github.com/users/ccckmit/followers", + "following_url": "https://api.github.com/users/ccckmit/following{/other_user}", + "gists_url": "https://api.github.com/users/ccckmit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ccckmit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ccckmit/subscriptions", + "organizations_url": "https://api.github.com/users/ccckmit/orgs", + "repos_url": "https://api.github.com/users/ccckmit/repos", + "events_url": "https://api.github.com/users/ccckmit/events{/privacy}", + "received_events_url": "https://api.github.com/users/ccckmit/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ccckmit/nand2tetris_projects", + "description": "my nand2tetris homework ", + "fork": false, + "url": "https://api.github.com/repos/ccckmit/nand2tetris_projects", + "forks_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/forks", + "keys_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/teams", + "hooks_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/hooks", + "issue_events_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/issues/events{/number}", + "events_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/events", + "assignees_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/assignees{/user}", + "branches_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/branches{/branch}", + "tags_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/tags", + "blobs_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/languages", + "stargazers_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/stargazers", + "contributors_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/contributors", + "subscribers_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/subscribers", + "subscription_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/subscription", + "commits_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/contents/{+path}", + "compare_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/merges", + "archive_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/downloads", + "issues_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/issues{/number}", + "pulls_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/labels{/name}", + "releases_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/releases{/id}", + "deployments_url": "https://api.github.com/repos/ccckmit/nand2tetris_projects/deployments", + "created_at": "2015-12-09T01:11:22Z", + "updated_at": "2015-12-09T02:12:57Z", + "pushed_at": "2015-12-09T02:12:56Z", + "git_url": "git://github.com/ccckmit/nand2tetris_projects.git", + "ssh_url": "git@github.com:ccckmit/nand2tetris_projects.git", + "clone_url": "https://github.com/ccckmit/nand2tetris_projects.git", + "svn_url": "https://github.com/ccckmit/nand2tetris_projects", + "homepage": null, + "size": 266, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 45806353, + "name": "nand2tetris", + "full_name": "erikchau/nand2tetris", + "owner": { + "login": "erikchau", + "id": 6894634, + "avatar_url": "https://avatars.githubusercontent.com/u/6894634?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/erikchau", + "html_url": "https://github.com/erikchau", + "followers_url": "https://api.github.com/users/erikchau/followers", + "following_url": "https://api.github.com/users/erikchau/following{/other_user}", + "gists_url": "https://api.github.com/users/erikchau/gists{/gist_id}", + "starred_url": "https://api.github.com/users/erikchau/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/erikchau/subscriptions", + "organizations_url": "https://api.github.com/users/erikchau/orgs", + "repos_url": "https://api.github.com/users/erikchau/repos", + "events_url": "https://api.github.com/users/erikchau/events{/privacy}", + "received_events_url": "https://api.github.com/users/erikchau/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/erikchau/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/erikchau/nand2tetris", + "forks_url": "https://api.github.com/repos/erikchau/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/erikchau/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/erikchau/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/erikchau/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/erikchau/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/erikchau/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/erikchau/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/erikchau/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/erikchau/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/erikchau/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/erikchau/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/erikchau/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/erikchau/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/erikchau/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/erikchau/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/erikchau/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/erikchau/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/erikchau/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/erikchau/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/erikchau/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/erikchau/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/erikchau/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/erikchau/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/erikchau/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/erikchau/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/erikchau/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/erikchau/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/erikchau/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/erikchau/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/erikchau/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/erikchau/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/erikchau/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/erikchau/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/erikchau/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/erikchau/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/erikchau/nand2tetris/deployments", + "created_at": "2015-11-09T00:45:20Z", + "updated_at": "2015-11-09T01:00:01Z", + "pushed_at": "2015-11-09T09:51:20Z", + "git_url": "git://github.com/erikchau/nand2tetris.git", + "ssh_url": "git@github.com:erikchau/nand2tetris.git", + "clone_url": "https://github.com/erikchau/nand2tetris.git", + "svn_url": "https://github.com/erikchau/nand2tetris", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 45976393, + "name": "nand2tetris", + "full_name": "r4ghu/nand2tetris", + "owner": { + "login": "r4ghu", + "id": 5736976, + "avatar_url": "https://avatars.githubusercontent.com/u/5736976?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/r4ghu", + "html_url": "https://github.com/r4ghu", + "followers_url": "https://api.github.com/users/r4ghu/followers", + "following_url": "https://api.github.com/users/r4ghu/following{/other_user}", + "gists_url": "https://api.github.com/users/r4ghu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/r4ghu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/r4ghu/subscriptions", + "organizations_url": "https://api.github.com/users/r4ghu/orgs", + "repos_url": "https://api.github.com/users/r4ghu/repos", + "events_url": "https://api.github.com/users/r4ghu/events{/privacy}", + "received_events_url": "https://api.github.com/users/r4ghu/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/r4ghu/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/r4ghu/nand2tetris", + "forks_url": "https://api.github.com/repos/r4ghu/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/r4ghu/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/r4ghu/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/r4ghu/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/r4ghu/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/r4ghu/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/r4ghu/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/r4ghu/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/r4ghu/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/r4ghu/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/r4ghu/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/r4ghu/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/r4ghu/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/r4ghu/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/r4ghu/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/r4ghu/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/r4ghu/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/r4ghu/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/r4ghu/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/r4ghu/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/r4ghu/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/r4ghu/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/r4ghu/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/r4ghu/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/r4ghu/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/r4ghu/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/r4ghu/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/r4ghu/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/r4ghu/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/r4ghu/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/r4ghu/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/r4ghu/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/r4ghu/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/r4ghu/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/r4ghu/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/r4ghu/nand2tetris/deployments", + "created_at": "2015-11-11T10:57:19Z", + "updated_at": "2015-11-11T10:57:32Z", + "pushed_at": "2015-11-11T10:57:30Z", + "git_url": "git://github.com/r4ghu/nand2tetris.git", + "ssh_url": "git@github.com:r4ghu/nand2tetris.git", + "clone_url": "https://github.com/r4ghu/nand2tetris.git", + "svn_url": "https://github.com/r4ghu/nand2tetris", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 46046727, + "name": "nand2tetris", + "full_name": "devonestes/nand2tetris", + "owner": { + "login": "devonestes", + "id": 8422484, + "avatar_url": "https://avatars.githubusercontent.com/u/8422484?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/devonestes", + "html_url": "https://github.com/devonestes", + "followers_url": "https://api.github.com/users/devonestes/followers", + "following_url": "https://api.github.com/users/devonestes/following{/other_user}", + "gists_url": "https://api.github.com/users/devonestes/gists{/gist_id}", + "starred_url": "https://api.github.com/users/devonestes/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/devonestes/subscriptions", + "organizations_url": "https://api.github.com/users/devonestes/orgs", + "repos_url": "https://api.github.com/users/devonestes/repos", + "events_url": "https://api.github.com/users/devonestes/events{/privacy}", + "received_events_url": "https://api.github.com/users/devonestes/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/devonestes/nand2tetris", + "description": "My code for working through the nand2tetris course on Coursera", + "fork": false, + "url": "https://api.github.com/repos/devonestes/nand2tetris", + "forks_url": "https://api.github.com/repos/devonestes/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/devonestes/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/devonestes/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/devonestes/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/devonestes/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/devonestes/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/devonestes/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/devonestes/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/devonestes/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/devonestes/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/devonestes/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/devonestes/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/devonestes/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/devonestes/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/devonestes/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/devonestes/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/devonestes/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/devonestes/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/devonestes/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/devonestes/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/devonestes/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/devonestes/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/devonestes/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/devonestes/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/devonestes/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/devonestes/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/devonestes/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/devonestes/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/devonestes/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/devonestes/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/devonestes/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/devonestes/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/devonestes/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/devonestes/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/devonestes/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/devonestes/nand2tetris/deployments", + "created_at": "2015-11-12T10:48:59Z", + "updated_at": "2015-11-12T10:49:31Z", + "pushed_at": "2015-11-20T18:48:04Z", + "git_url": "git://github.com/devonestes/nand2tetris.git", + "ssh_url": "git@github.com:devonestes/nand2tetris.git", + "clone_url": "https://github.com/devonestes/nand2tetris.git", + "svn_url": "https://github.com/devonestes/nand2tetris", + "homepage": null, + "size": 525, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 48088451, + "name": "nand2tetris", + "full_name": "lesniakbj/nand2tetris", + "owner": { + "login": "lesniakbj", + "id": 4515077, + "avatar_url": "https://avatars.githubusercontent.com/u/4515077?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lesniakbj", + "html_url": "https://github.com/lesniakbj", + "followers_url": "https://api.github.com/users/lesniakbj/followers", + "following_url": "https://api.github.com/users/lesniakbj/following{/other_user}", + "gists_url": "https://api.github.com/users/lesniakbj/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lesniakbj/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lesniakbj/subscriptions", + "organizations_url": "https://api.github.com/users/lesniakbj/orgs", + "repos_url": "https://api.github.com/users/lesniakbj/repos", + "events_url": "https://api.github.com/users/lesniakbj/events{/privacy}", + "received_events_url": "https://api.github.com/users/lesniakbj/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lesniakbj/nand2tetris", + "description": "Work area for the nand2tetris series", + "fork": false, + "url": "https://api.github.com/repos/lesniakbj/nand2tetris", + "forks_url": "https://api.github.com/repos/lesniakbj/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lesniakbj/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lesniakbj/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lesniakbj/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lesniakbj/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lesniakbj/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lesniakbj/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lesniakbj/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lesniakbj/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lesniakbj/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lesniakbj/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lesniakbj/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lesniakbj/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lesniakbj/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lesniakbj/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lesniakbj/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lesniakbj/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lesniakbj/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lesniakbj/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lesniakbj/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lesniakbj/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lesniakbj/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lesniakbj/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lesniakbj/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lesniakbj/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lesniakbj/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lesniakbj/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lesniakbj/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lesniakbj/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lesniakbj/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lesniakbj/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lesniakbj/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lesniakbj/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lesniakbj/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lesniakbj/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lesniakbj/nand2tetris/deployments", + "created_at": "2015-12-16T04:59:14Z", + "updated_at": "2015-12-16T05:07:49Z", + "pushed_at": "2015-12-16T05:41:36Z", + "git_url": "git://github.com/lesniakbj/nand2tetris.git", + "ssh_url": "git@github.com:lesniakbj/nand2tetris.git", + "clone_url": "https://github.com/lesniakbj/nand2tetris.git", + "svn_url": "https://github.com/lesniakbj/nand2tetris", + "homepage": null, + "size": 529, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 52823486, + "name": "nand2tetris", + "full_name": "hderms/nand2tetris", + "owner": { + "login": "hderms", + "id": 833575, + "avatar_url": "https://avatars.githubusercontent.com/u/833575?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hderms", + "html_url": "https://github.com/hderms", + "followers_url": "https://api.github.com/users/hderms/followers", + "following_url": "https://api.github.com/users/hderms/following{/other_user}", + "gists_url": "https://api.github.com/users/hderms/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hderms/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hderms/subscriptions", + "organizations_url": "https://api.github.com/users/hderms/orgs", + "repos_url": "https://api.github.com/users/hderms/repos", + "events_url": "https://api.github.com/users/hderms/events{/privacy}", + "received_events_url": "https://api.github.com/users/hderms/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hderms/nand2tetris", + "description": "Exercises from the book Nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/hderms/nand2tetris", + "forks_url": "https://api.github.com/repos/hderms/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/hderms/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hderms/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hderms/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/hderms/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/hderms/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/hderms/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/hderms/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/hderms/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/hderms/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/hderms/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hderms/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hderms/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hderms/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hderms/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hderms/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/hderms/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/hderms/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/hderms/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/hderms/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/hderms/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hderms/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hderms/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hderms/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hderms/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/hderms/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hderms/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/hderms/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hderms/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/hderms/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/hderms/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hderms/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hderms/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hderms/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/hderms/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/hderms/nand2tetris/deployments", + "created_at": "2016-02-29T20:46:26Z", + "updated_at": "2016-02-29T20:46:40Z", + "pushed_at": "2016-02-29T20:50:56Z", + "git_url": "git://github.com/hderms/nand2tetris.git", + "ssh_url": "git@github.com:hderms/nand2tetris.git", + "clone_url": "https://github.com/hderms/nand2tetris.git", + "svn_url": "https://github.com/hderms/nand2tetris", + "homepage": null, + "size": 152, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 50708093, + "name": "Nand2TetrisHDL", + "full_name": "Mons1Oerjan/Nand2TetrisHDL", + "owner": { + "login": "Mons1Oerjan", + "id": 16712579, + "avatar_url": "https://avatars.githubusercontent.com/u/16712579?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Mons1Oerjan", + "html_url": "https://github.com/Mons1Oerjan", + "followers_url": "https://api.github.com/users/Mons1Oerjan/followers", + "following_url": "https://api.github.com/users/Mons1Oerjan/following{/other_user}", + "gists_url": "https://api.github.com/users/Mons1Oerjan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mons1Oerjan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mons1Oerjan/subscriptions", + "organizations_url": "https://api.github.com/users/Mons1Oerjan/orgs", + "repos_url": "https://api.github.com/users/Mons1Oerjan/repos", + "events_url": "https://api.github.com/users/Mons1Oerjan/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mons1Oerjan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Mons1Oerjan/Nand2TetrisHDL", + "description": "Assembly - Logic gates in Hardware Description Language ", + "fork": false, + "url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL", + "forks_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/forks", + "keys_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/teams", + "hooks_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/hooks", + "issue_events_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/issues/events{/number}", + "events_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/events", + "assignees_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/assignees{/user}", + "branches_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/branches{/branch}", + "tags_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/tags", + "blobs_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/languages", + "stargazers_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/stargazers", + "contributors_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/contributors", + "subscribers_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/subscribers", + "subscription_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/subscription", + "commits_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/contents/{+path}", + "compare_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/merges", + "archive_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/downloads", + "issues_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/issues{/number}", + "pulls_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/labels{/name}", + "releases_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/releases{/id}", + "deployments_url": "https://api.github.com/repos/Mons1Oerjan/Nand2TetrisHDL/deployments", + "created_at": "2016-01-30T04:02:11Z", + "updated_at": "2016-02-29T15:01:53Z", + "pushed_at": "2016-02-29T15:01:53Z", + "git_url": "git://github.com/Mons1Oerjan/Nand2TetrisHDL.git", + "ssh_url": "git@github.com:Mons1Oerjan/Nand2TetrisHDL.git", + "clone_url": "https://github.com/Mons1Oerjan/Nand2TetrisHDL.git", + "svn_url": "https://github.com/Mons1Oerjan/Nand2TetrisHDL", + "homepage": null, + "size": 12, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 50324190, + "name": "nand2tetris", + "full_name": "kradical/nand2tetris", + "owner": { + "login": "kradical", + "id": 9980985, + "avatar_url": "https://avatars.githubusercontent.com/u/9980985?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kradical", + "html_url": "https://github.com/kradical", + "followers_url": "https://api.github.com/users/kradical/followers", + "following_url": "https://api.github.com/users/kradical/following{/other_user}", + "gists_url": "https://api.github.com/users/kradical/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kradical/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kradical/subscriptions", + "organizations_url": "https://api.github.com/users/kradical/orgs", + "repos_url": "https://api.github.com/users/kradical/repos", + "events_url": "https://api.github.com/users/kradical/events{/privacy}", + "received_events_url": "https://api.github.com/users/kradical/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kradical/nand2tetris", + "description": "Building a computer from first principles.", + "fork": false, + "url": "https://api.github.com/repos/kradical/nand2tetris", + "forks_url": "https://api.github.com/repos/kradical/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kradical/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kradical/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kradical/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kradical/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kradical/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kradical/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kradical/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kradical/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kradical/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kradical/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kradical/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kradical/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kradical/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kradical/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kradical/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kradical/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kradical/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kradical/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kradical/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kradical/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kradical/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kradical/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kradical/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kradical/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kradical/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kradical/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kradical/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kradical/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kradical/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kradical/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kradical/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kradical/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kradical/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kradical/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kradical/nand2tetris/deployments", + "created_at": "2016-01-25T03:42:54Z", + "updated_at": "2016-01-26T04:49:49Z", + "pushed_at": "2016-03-07T07:30:56Z", + "git_url": "git://github.com/kradical/nand2tetris.git", + "ssh_url": "git@github.com:kradical/nand2tetris.git", + "clone_url": "https://github.com/kradical/nand2tetris.git", + "svn_url": "https://github.com/kradical/nand2tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 163, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 55089474, + "name": "nand2tetris", + "full_name": "snarisi/nand2tetris", + "owner": { + "login": "snarisi", + "id": 12989566, + "avatar_url": "https://avatars.githubusercontent.com/u/12989566?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/snarisi", + "html_url": "https://github.com/snarisi", + "followers_url": "https://api.github.com/users/snarisi/followers", + "following_url": "https://api.github.com/users/snarisi/following{/other_user}", + "gists_url": "https://api.github.com/users/snarisi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/snarisi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/snarisi/subscriptions", + "organizations_url": "https://api.github.com/users/snarisi/orgs", + "repos_url": "https://api.github.com/users/snarisi/repos", + "events_url": "https://api.github.com/users/snarisi/events{/privacy}", + "received_events_url": "https://api.github.com/users/snarisi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/snarisi/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/snarisi/nand2tetris", + "forks_url": "https://api.github.com/repos/snarisi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/snarisi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/snarisi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/snarisi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/snarisi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/snarisi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/snarisi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/snarisi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/snarisi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/snarisi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/snarisi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/snarisi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/snarisi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/snarisi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/snarisi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/snarisi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/snarisi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/snarisi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/snarisi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/snarisi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/snarisi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/snarisi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/snarisi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/snarisi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/snarisi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/snarisi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/snarisi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/snarisi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/snarisi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/snarisi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/snarisi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/snarisi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/snarisi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/snarisi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/snarisi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/snarisi/nand2tetris/deployments", + "created_at": "2016-03-30T19:00:14Z", + "updated_at": "2016-03-30T19:03:32Z", + "pushed_at": "2016-04-04T19:23:51Z", + "git_url": "git://github.com/snarisi/nand2tetris.git", + "ssh_url": "git@github.com:snarisi/nand2tetris.git", + "clone_url": "https://github.com/snarisi/nand2tetris.git", + "svn_url": "https://github.com/snarisi/nand2tetris", + "homepage": null, + "size": 522, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 55754400, + "name": "nand2tetris", + "full_name": "ChapmanSnowden/nand2tetris", + "owner": { + "login": "ChapmanSnowden", + "id": 1605798, + "avatar_url": "https://avatars.githubusercontent.com/u/1605798?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ChapmanSnowden", + "html_url": "https://github.com/ChapmanSnowden", + "followers_url": "https://api.github.com/users/ChapmanSnowden/followers", + "following_url": "https://api.github.com/users/ChapmanSnowden/following{/other_user}", + "gists_url": "https://api.github.com/users/ChapmanSnowden/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ChapmanSnowden/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ChapmanSnowden/subscriptions", + "organizations_url": "https://api.github.com/users/ChapmanSnowden/orgs", + "repos_url": "https://api.github.com/users/ChapmanSnowden/repos", + "events_url": "https://api.github.com/users/ChapmanSnowden/events{/privacy}", + "received_events_url": "https://api.github.com/users/ChapmanSnowden/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ChapmanSnowden/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris", + "forks_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ChapmanSnowden/nand2tetris/deployments", + "created_at": "2016-04-08T06:03:03Z", + "updated_at": "2016-04-08T06:16:07Z", + "pushed_at": "2016-04-08T06:18:30Z", + "git_url": "git://github.com/ChapmanSnowden/nand2tetris.git", + "ssh_url": "git@github.com:ChapmanSnowden/nand2tetris.git", + "clone_url": "https://github.com/ChapmanSnowden/nand2tetris.git", + "svn_url": "https://github.com/ChapmanSnowden/nand2tetris", + "homepage": null, + "size": 166, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 56316254, + "name": "nand2tetris", + "full_name": "TomShacham/nand2tetris", + "owner": { + "login": "TomShacham", + "id": 5289332, + "avatar_url": "https://avatars.githubusercontent.com/u/5289332?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/TomShacham", + "html_url": "https://github.com/TomShacham", + "followers_url": "https://api.github.com/users/TomShacham/followers", + "following_url": "https://api.github.com/users/TomShacham/following{/other_user}", + "gists_url": "https://api.github.com/users/TomShacham/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TomShacham/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TomShacham/subscriptions", + "organizations_url": "https://api.github.com/users/TomShacham/orgs", + "repos_url": "https://api.github.com/users/TomShacham/repos", + "events_url": "https://api.github.com/users/TomShacham/events{/privacy}", + "received_events_url": "https://api.github.com/users/TomShacham/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/TomShacham/nand2tetris", + "description": "following nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/TomShacham/nand2tetris", + "forks_url": "https://api.github.com/repos/TomShacham/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/TomShacham/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/TomShacham/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/TomShacham/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/TomShacham/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/TomShacham/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/TomShacham/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/TomShacham/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/TomShacham/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/TomShacham/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/TomShacham/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/TomShacham/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/TomShacham/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/TomShacham/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/TomShacham/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/TomShacham/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/TomShacham/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/TomShacham/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/TomShacham/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/TomShacham/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/TomShacham/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/TomShacham/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/TomShacham/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/TomShacham/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/TomShacham/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/TomShacham/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/TomShacham/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/TomShacham/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/TomShacham/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/TomShacham/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/TomShacham/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/TomShacham/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/TomShacham/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/TomShacham/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/TomShacham/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/TomShacham/nand2tetris/deployments", + "created_at": "2016-04-15T11:48:31Z", + "updated_at": "2016-04-15T23:10:33Z", + "pushed_at": "2016-04-15T18:50:12Z", + "git_url": "git://github.com/TomShacham/nand2tetris.git", + "ssh_url": "git@github.com:TomShacham/nand2tetris.git", + "clone_url": "https://github.com/TomShacham/nand2tetris.git", + "svn_url": "https://github.com/TomShacham/nand2tetris", + "homepage": "", + "size": 32, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 56611135, + "name": "nand_to_tetris", + "full_name": "kmagida110/nand_to_tetris", + "owner": { + "login": "kmagida110", + "id": 11461531, + "avatar_url": "https://avatars.githubusercontent.com/u/11461531?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kmagida110", + "html_url": "https://github.com/kmagida110", + "followers_url": "https://api.github.com/users/kmagida110/followers", + "following_url": "https://api.github.com/users/kmagida110/following{/other_user}", + "gists_url": "https://api.github.com/users/kmagida110/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kmagida110/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kmagida110/subscriptions", + "organizations_url": "https://api.github.com/users/kmagida110/orgs", + "repos_url": "https://api.github.com/users/kmagida110/repos", + "events_url": "https://api.github.com/users/kmagida110/events{/privacy}", + "received_events_url": "https://api.github.com/users/kmagida110/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kmagida110/nand_to_tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/kmagida110/nand_to_tetris", + "forks_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/forks", + "keys_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/teams", + "hooks_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/events", + "assignees_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/tags", + "blobs_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/languages", + "stargazers_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/subscription", + "commits_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/merges", + "archive_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/downloads", + "issues_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kmagida110/nand_to_tetris/deployments", + "created_at": "2016-04-19T15:56:29Z", + "updated_at": "2016-04-19T15:59:40Z", + "pushed_at": "2016-04-19T15:59:38Z", + "git_url": "git://github.com/kmagida110/nand_to_tetris.git", + "ssh_url": "git@github.com:kmagida110/nand_to_tetris.git", + "clone_url": "https://github.com/kmagida110/nand_to_tetris.git", + "svn_url": "https://github.com/kmagida110/nand_to_tetris", + "homepage": null, + "size": 564, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 54682229, + "name": "nand2tetris", + "full_name": "gkaffka/nand2tetris", + "owner": { + "login": "gkaffka", + "id": 7598540, + "avatar_url": "https://avatars.githubusercontent.com/u/7598540?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gkaffka", + "html_url": "https://github.com/gkaffka", + "followers_url": "https://api.github.com/users/gkaffka/followers", + "following_url": "https://api.github.com/users/gkaffka/following{/other_user}", + "gists_url": "https://api.github.com/users/gkaffka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gkaffka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gkaffka/subscriptions", + "organizations_url": "https://api.github.com/users/gkaffka/orgs", + "repos_url": "https://api.github.com/users/gkaffka/repos", + "events_url": "https://api.github.com/users/gkaffka/events{/privacy}", + "received_events_url": "https://api.github.com/users/gkaffka/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/gkaffka/nand2tetris", + "description": "Projects for the nand2Tetris course", + "fork": false, + "url": "https://api.github.com/repos/gkaffka/nand2tetris", + "forks_url": "https://api.github.com/repos/gkaffka/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/gkaffka/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gkaffka/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gkaffka/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/gkaffka/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/gkaffka/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/gkaffka/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/gkaffka/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/gkaffka/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/gkaffka/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/gkaffka/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gkaffka/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gkaffka/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gkaffka/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gkaffka/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gkaffka/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/gkaffka/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/gkaffka/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/gkaffka/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/gkaffka/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/gkaffka/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gkaffka/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gkaffka/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gkaffka/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gkaffka/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/gkaffka/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gkaffka/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/gkaffka/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gkaffka/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/gkaffka/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/gkaffka/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gkaffka/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gkaffka/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gkaffka/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/gkaffka/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/gkaffka/nand2tetris/deployments", + "created_at": "2016-03-25T00:06:41Z", + "updated_at": "2016-04-22T01:25:16Z", + "pushed_at": "2016-04-22T01:25:15Z", + "git_url": "git://github.com/gkaffka/nand2tetris.git", + "ssh_url": "git@github.com:gkaffka/nand2tetris.git", + "clone_url": "https://github.com/gkaffka/nand2tetris.git", + "svn_url": "https://github.com/gkaffka/nand2tetris", + "homepage": null, + "size": 71, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 59449711, + "name": "nand2tetris", + "full_name": "programmerMOT/nand2tetris", + "owner": { + "login": "programmerMOT", + "id": 2757205, + "avatar_url": "https://avatars.githubusercontent.com/u/2757205?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/programmerMOT", + "html_url": "https://github.com/programmerMOT", + "followers_url": "https://api.github.com/users/programmerMOT/followers", + "following_url": "https://api.github.com/users/programmerMOT/following{/other_user}", + "gists_url": "https://api.github.com/users/programmerMOT/gists{/gist_id}", + "starred_url": "https://api.github.com/users/programmerMOT/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/programmerMOT/subscriptions", + "organizations_url": "https://api.github.com/users/programmerMOT/orgs", + "repos_url": "https://api.github.com/users/programmerMOT/repos", + "events_url": "https://api.github.com/users/programmerMOT/events{/privacy}", + "received_events_url": "https://api.github.com/users/programmerMOT/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/programmerMOT/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/programmerMOT/nand2tetris", + "forks_url": "https://api.github.com/repos/programmerMOT/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/programmerMOT/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/programmerMOT/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/programmerMOT/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/programmerMOT/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/programmerMOT/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/programmerMOT/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/programmerMOT/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/programmerMOT/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/programmerMOT/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/programmerMOT/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/programmerMOT/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/programmerMOT/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/programmerMOT/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/programmerMOT/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/programmerMOT/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/programmerMOT/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/programmerMOT/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/programmerMOT/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/programmerMOT/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/programmerMOT/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/programmerMOT/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/programmerMOT/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/programmerMOT/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/programmerMOT/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/programmerMOT/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/programmerMOT/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/programmerMOT/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/programmerMOT/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/programmerMOT/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/programmerMOT/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/programmerMOT/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/programmerMOT/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/programmerMOT/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/programmerMOT/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/programmerMOT/nand2tetris/deployments", + "created_at": "2016-05-23T03:33:26Z", + "updated_at": "2016-05-23T03:33:47Z", + "pushed_at": "2016-05-24T14:43:49Z", + "git_url": "git://github.com/programmerMOT/nand2tetris.git", + "ssh_url": "git@github.com:programmerMOT/nand2tetris.git", + "clone_url": "https://github.com/programmerMOT/nand2tetris.git", + "svn_url": "https://github.com/programmerMOT/nand2tetris", + "homepage": null, + "size": 1768, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 56863228, + "name": "ossu_nand2tetris", + "full_name": "brooksgarrett/ossu_nand2tetris", + "owner": { + "login": "brooksgarrett", + "id": 158907, + "avatar_url": "https://avatars.githubusercontent.com/u/158907?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/brooksgarrett", + "html_url": "https://github.com/brooksgarrett", + "followers_url": "https://api.github.com/users/brooksgarrett/followers", + "following_url": "https://api.github.com/users/brooksgarrett/following{/other_user}", + "gists_url": "https://api.github.com/users/brooksgarrett/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brooksgarrett/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brooksgarrett/subscriptions", + "organizations_url": "https://api.github.com/users/brooksgarrett/orgs", + "repos_url": "https://api.github.com/users/brooksgarrett/repos", + "events_url": "https://api.github.com/users/brooksgarrett/events{/privacy}", + "received_events_url": "https://api.github.com/users/brooksgarrett/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/brooksgarrett/ossu_nand2tetris", + "description": "https://www.coursera.org/learn/build-a-computer", + "fork": false, + "url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris", + "forks_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/forks", + "keys_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/events", + "assignees_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/merges", + "archive_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/brooksgarrett/ossu_nand2tetris/deployments", + "created_at": "2016-04-22T14:55:29Z", + "updated_at": "2016-04-28T20:20:29Z", + "pushed_at": "2016-04-29T16:09:47Z", + "git_url": "git://github.com/brooksgarrett/ossu_nand2tetris.git", + "ssh_url": "git@github.com:brooksgarrett/ossu_nand2tetris.git", + "clone_url": "https://github.com/brooksgarrett/ossu_nand2tetris.git", + "svn_url": "https://github.com/brooksgarrett/ossu_nand2tetris", + "homepage": null, + "size": 155, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 55832788, + "name": "Nand2Tetris", + "full_name": "ubufed/Nand2Tetris", + "owner": { + "login": "ubufed", + "id": 2317496, + "avatar_url": "https://avatars.githubusercontent.com/u/2317496?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ubufed", + "html_url": "https://github.com/ubufed", + "followers_url": "https://api.github.com/users/ubufed/followers", + "following_url": "https://api.github.com/users/ubufed/following{/other_user}", + "gists_url": "https://api.github.com/users/ubufed/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ubufed/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ubufed/subscriptions", + "organizations_url": "https://api.github.com/users/ubufed/orgs", + "repos_url": "https://api.github.com/users/ubufed/repos", + "events_url": "https://api.github.com/users/ubufed/events{/privacy}", + "received_events_url": "https://api.github.com/users/ubufed/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ubufed/Nand2Tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/ubufed/Nand2Tetris", + "forks_url": "https://api.github.com/repos/ubufed/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/ubufed/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ubufed/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ubufed/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/ubufed/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ubufed/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ubufed/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/ubufed/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ubufed/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ubufed/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/ubufed/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ubufed/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ubufed/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ubufed/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ubufed/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ubufed/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/ubufed/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ubufed/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ubufed/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ubufed/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/ubufed/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ubufed/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ubufed/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ubufed/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ubufed/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ubufed/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ubufed/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/ubufed/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ubufed/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/ubufed/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ubufed/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ubufed/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ubufed/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ubufed/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ubufed/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ubufed/Nand2Tetris/deployments", + "created_at": "2016-04-09T08:04:05Z", + "updated_at": "2016-04-09T08:12:24Z", + "pushed_at": "2016-04-24T00:34:57Z", + "git_url": "git://github.com/ubufed/Nand2Tetris.git", + "ssh_url": "git@github.com:ubufed/Nand2Tetris.git", + "clone_url": "https://github.com/ubufed/Nand2Tetris.git", + "svn_url": "https://github.com/ubufed/Nand2Tetris", + "homepage": null, + "size": 17, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 53232009, + "name": "nand2tetris", + "full_name": "contrarian/nand2tetris", + "owner": { + "login": "contrarian", + "id": 5007279, + "avatar_url": "https://avatars.githubusercontent.com/u/5007279?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/contrarian", + "html_url": "https://github.com/contrarian", + "followers_url": "https://api.github.com/users/contrarian/followers", + "following_url": "https://api.github.com/users/contrarian/following{/other_user}", + "gists_url": "https://api.github.com/users/contrarian/gists{/gist_id}", + "starred_url": "https://api.github.com/users/contrarian/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/contrarian/subscriptions", + "organizations_url": "https://api.github.com/users/contrarian/orgs", + "repos_url": "https://api.github.com/users/contrarian/repos", + "events_url": "https://api.github.com/users/contrarian/events{/privacy}", + "received_events_url": "https://api.github.com/users/contrarian/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/contrarian/nand2tetris", + "description": "nand2tetris is a 12 project effort to build a computer system from scratch. This repository contains my files for the project. ", + "fork": false, + "url": "https://api.github.com/repos/contrarian/nand2tetris", + "forks_url": "https://api.github.com/repos/contrarian/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/contrarian/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/contrarian/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/contrarian/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/contrarian/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/contrarian/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/contrarian/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/contrarian/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/contrarian/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/contrarian/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/contrarian/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/contrarian/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/contrarian/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/contrarian/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/contrarian/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/contrarian/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/contrarian/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/contrarian/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/contrarian/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/contrarian/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/contrarian/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/contrarian/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/contrarian/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/contrarian/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/contrarian/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/contrarian/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/contrarian/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/contrarian/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/contrarian/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/contrarian/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/contrarian/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/contrarian/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/contrarian/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/contrarian/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/contrarian/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/contrarian/nand2tetris/deployments", + "created_at": "2016-03-06T01:35:06Z", + "updated_at": "2016-03-06T01:52:27Z", + "pushed_at": "2016-05-07T04:20:53Z", + "git_url": "git://github.com/contrarian/nand2tetris.git", + "ssh_url": "git@github.com:contrarian/nand2tetris.git", + "clone_url": "https://github.com/contrarian/nand2tetris.git", + "svn_url": "https://github.com/contrarian/nand2tetris", + "homepage": null, + "size": 263, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 58883051, + "name": "nand2tetris", + "full_name": "ilyarudyak/nand2tetris", + "owner": { + "login": "ilyarudyak", + "id": 4819603, + "avatar_url": "https://avatars.githubusercontent.com/u/4819603?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ilyarudyak", + "html_url": "https://github.com/ilyarudyak", + "followers_url": "https://api.github.com/users/ilyarudyak/followers", + "following_url": "https://api.github.com/users/ilyarudyak/following{/other_user}", + "gists_url": "https://api.github.com/users/ilyarudyak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ilyarudyak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ilyarudyak/subscriptions", + "organizations_url": "https://api.github.com/users/ilyarudyak/orgs", + "repos_url": "https://api.github.com/users/ilyarudyak/repos", + "events_url": "https://api.github.com/users/ilyarudyak/events{/privacy}", + "received_events_url": "https://api.github.com/users/ilyarudyak/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ilyarudyak/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/ilyarudyak/nand2tetris", + "forks_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ilyarudyak/nand2tetris/deployments", + "created_at": "2016-05-15T20:33:36Z", + "updated_at": "2016-05-15T21:10:14Z", + "pushed_at": "2016-05-15T21:10:12Z", + "git_url": "git://github.com/ilyarudyak/nand2tetris.git", + "ssh_url": "git@github.com:ilyarudyak/nand2tetris.git", + "clone_url": "https://github.com/ilyarudyak/nand2tetris.git", + "svn_url": "https://github.com/ilyarudyak/nand2tetris", + "homepage": null, + "size": 507, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 55005461, + "name": "Nand2Tetris", + "full_name": "Grandiferr/Nand2Tetris", + "owner": { + "login": "Grandiferr", + "id": 10864227, + "avatar_url": "https://avatars.githubusercontent.com/u/10864227?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Grandiferr", + "html_url": "https://github.com/Grandiferr", + "followers_url": "https://api.github.com/users/Grandiferr/followers", + "following_url": "https://api.github.com/users/Grandiferr/following{/other_user}", + "gists_url": "https://api.github.com/users/Grandiferr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Grandiferr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Grandiferr/subscriptions", + "organizations_url": "https://api.github.com/users/Grandiferr/orgs", + "repos_url": "https://api.github.com/users/Grandiferr/repos", + "events_url": "https://api.github.com/users/Grandiferr/events{/privacy}", + "received_events_url": "https://api.github.com/users/Grandiferr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Grandiferr/Nand2Tetris", + "description": "Archive of Nand2Tetris course projects", + "fork": false, + "url": "https://api.github.com/repos/Grandiferr/Nand2Tetris", + "forks_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Grandiferr/Nand2Tetris/deployments", + "created_at": "2016-03-29T19:39:49Z", + "updated_at": "2016-05-13T17:20:22Z", + "pushed_at": "2016-05-13T21:32:51Z", + "git_url": "git://github.com/Grandiferr/Nand2Tetris.git", + "ssh_url": "git@github.com:Grandiferr/Nand2Tetris.git", + "clone_url": "https://github.com/Grandiferr/Nand2Tetris.git", + "svn_url": "https://github.com/Grandiferr/Nand2Tetris", + "homepage": null, + "size": 41, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 56050156, + "name": "Nand2Tetris", + "full_name": "okamototy/Nand2Tetris", + "owner": { + "login": "okamototy", + "id": 18417451, + "avatar_url": "https://avatars.githubusercontent.com/u/18417451?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/okamototy", + "html_url": "https://github.com/okamototy", + "followers_url": "https://api.github.com/users/okamototy/followers", + "following_url": "https://api.github.com/users/okamototy/following{/other_user}", + "gists_url": "https://api.github.com/users/okamototy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/okamototy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/okamototy/subscriptions", + "organizations_url": "https://api.github.com/users/okamototy/orgs", + "repos_url": "https://api.github.com/users/okamototy/repos", + "events_url": "https://api.github.com/users/okamototy/events{/privacy}", + "received_events_url": "https://api.github.com/users/okamototy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/okamototy/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/okamototy/Nand2Tetris", + "forks_url": "https://api.github.com/repos/okamototy/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/okamototy/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/okamototy/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/okamototy/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/okamototy/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/okamototy/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/okamototy/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/okamototy/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/okamototy/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/okamototy/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/okamototy/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/okamototy/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/okamototy/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/okamototy/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/okamototy/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/okamototy/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/okamototy/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/okamototy/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/okamototy/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/okamototy/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/okamototy/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/okamototy/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/okamototy/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/okamototy/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/okamototy/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/okamototy/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/okamototy/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/okamototy/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/okamototy/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/okamototy/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/okamototy/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/okamototy/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/okamototy/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/okamototy/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/okamototy/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/okamototy/Nand2Tetris/deployments", + "created_at": "2016-04-12T09:36:36Z", + "updated_at": "2016-05-11T09:50:31Z", + "pushed_at": "2016-05-18T11:03:54Z", + "git_url": "git://github.com/okamototy/Nand2Tetris.git", + "ssh_url": "git@github.com:okamototy/Nand2Tetris.git", + "clone_url": "https://github.com/okamototy/Nand2Tetris.git", + "svn_url": "https://github.com/okamototy/Nand2Tetris", + "homepage": null, + "size": 16, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 11585167, + "name": "hs-nand2tetris", + "full_name": "cmisenas/hs-nand2tetris", + "owner": { + "login": "cmisenas", + "id": 3933148, + "avatar_url": "https://avatars.githubusercontent.com/u/3933148?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cmisenas", + "html_url": "https://github.com/cmisenas", + "followers_url": "https://api.github.com/users/cmisenas/followers", + "following_url": "https://api.github.com/users/cmisenas/following{/other_user}", + "gists_url": "https://api.github.com/users/cmisenas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cmisenas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cmisenas/subscriptions", + "organizations_url": "https://api.github.com/users/cmisenas/orgs", + "repos_url": "https://api.github.com/users/cmisenas/repos", + "events_url": "https://api.github.com/users/cmisenas/events{/privacy}", + "received_events_url": "https://api.github.com/users/cmisenas/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cmisenas/hs-nand2tetris", + "description": "Awesome nand2tetris course!! Began taking on hacker school.", + "fork": false, + "url": "https://api.github.com/repos/cmisenas/hs-nand2tetris", + "forks_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/forks", + "keys_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/events", + "assignees_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/merges", + "archive_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/cmisenas/hs-nand2tetris/deployments", + "created_at": "2013-07-22T15:40:33Z", + "updated_at": "2015-08-02T02:28:12Z", + "pushed_at": "2015-08-02T03:22:46Z", + "git_url": "git://github.com/cmisenas/hs-nand2tetris.git", + "ssh_url": "git@github.com:cmisenas/hs-nand2tetris.git", + "clone_url": "https://github.com/cmisenas/hs-nand2tetris.git", + "svn_url": "https://github.com/cmisenas/hs-nand2tetris", + "homepage": "", + "size": 320, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 57889393, + "name": "FromNandtoTetris", + "full_name": "yellowmoneybank/FromNandtoTetris", + "owner": { + "login": "yellowmoneybank", + "id": 16255242, + "avatar_url": "https://avatars.githubusercontent.com/u/16255242?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yellowmoneybank", + "html_url": "https://github.com/yellowmoneybank", + "followers_url": "https://api.github.com/users/yellowmoneybank/followers", + "following_url": "https://api.github.com/users/yellowmoneybank/following{/other_user}", + "gists_url": "https://api.github.com/users/yellowmoneybank/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yellowmoneybank/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yellowmoneybank/subscriptions", + "organizations_url": "https://api.github.com/users/yellowmoneybank/orgs", + "repos_url": "https://api.github.com/users/yellowmoneybank/repos", + "events_url": "https://api.github.com/users/yellowmoneybank/events{/privacy}", + "received_events_url": "https://api.github.com/users/yellowmoneybank/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yellowmoneybank/FromNandtoTetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris", + "forks_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/forks", + "keys_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/teams", + "hooks_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/hooks", + "issue_events_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/events", + "assignees_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/tags", + "blobs_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/languages", + "stargazers_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/stargazers", + "contributors_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/contributors", + "subscribers_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/subscribers", + "subscription_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/subscription", + "commits_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/merges", + "archive_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/downloads", + "issues_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yellowmoneybank/FromNandtoTetris/deployments", + "created_at": "2016-05-02T12:41:35Z", + "updated_at": "2016-05-02T12:46:50Z", + "pushed_at": "2016-05-19T15:56:28Z", + "git_url": "git://github.com/yellowmoneybank/FromNandtoTetris.git", + "ssh_url": "git@github.com:yellowmoneybank/FromNandtoTetris.git", + "clone_url": "https://github.com/yellowmoneybank/FromNandtoTetris.git", + "svn_url": "https://github.com/yellowmoneybank/FromNandtoTetris", + "homepage": null, + "size": 517, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 55148151, + "name": "nand2tetris", + "full_name": "RyanPSullivan/nand2tetris", + "owner": { + "login": "RyanPSullivan", + "id": 1622013, + "avatar_url": "https://avatars.githubusercontent.com/u/1622013?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/RyanPSullivan", + "html_url": "https://github.com/RyanPSullivan", + "followers_url": "https://api.github.com/users/RyanPSullivan/followers", + "following_url": "https://api.github.com/users/RyanPSullivan/following{/other_user}", + "gists_url": "https://api.github.com/users/RyanPSullivan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/RyanPSullivan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/RyanPSullivan/subscriptions", + "organizations_url": "https://api.github.com/users/RyanPSullivan/orgs", + "repos_url": "https://api.github.com/users/RyanPSullivan/repos", + "events_url": "https://api.github.com/users/RyanPSullivan/events{/privacy}", + "received_events_url": "https://api.github.com/users/RyanPSullivan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/RyanPSullivan/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/RyanPSullivan/nand2tetris", + "forks_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/RyanPSullivan/nand2tetris/deployments", + "created_at": "2016-03-31T12:17:48Z", + "updated_at": "2016-04-04T13:03:38Z", + "pushed_at": "2016-05-19T11:44:52Z", + "git_url": "git://github.com/RyanPSullivan/nand2tetris.git", + "ssh_url": "git@github.com:RyanPSullivan/nand2tetris.git", + "clone_url": "https://github.com/RyanPSullivan/nand2tetris.git", + "svn_url": "https://github.com/RyanPSullivan/nand2tetris", + "homepage": null, + "size": 542, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 57170709, + "name": "Nand2Tetris", + "full_name": "KyleBWilson49/Nand2Tetris", + "owner": { + "login": "KyleBWilson49", + "id": 14809705, + "avatar_url": "https://avatars.githubusercontent.com/u/14809705?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/KyleBWilson49", + "html_url": "https://github.com/KyleBWilson49", + "followers_url": "https://api.github.com/users/KyleBWilson49/followers", + "following_url": "https://api.github.com/users/KyleBWilson49/following{/other_user}", + "gists_url": "https://api.github.com/users/KyleBWilson49/gists{/gist_id}", + "starred_url": "https://api.github.com/users/KyleBWilson49/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/KyleBWilson49/subscriptions", + "organizations_url": "https://api.github.com/users/KyleBWilson49/orgs", + "repos_url": "https://api.github.com/users/KyleBWilson49/repos", + "events_url": "https://api.github.com/users/KyleBWilson49/events{/privacy}", + "received_events_url": "https://api.github.com/users/KyleBWilson49/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/KyleBWilson49/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris", + "forks_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/KyleBWilson49/Nand2Tetris/deployments", + "created_at": "2016-04-27T00:17:24Z", + "updated_at": "2016-04-27T00:17:46Z", + "pushed_at": "2016-04-27T00:17:44Z", + "git_url": "git://github.com/KyleBWilson49/Nand2Tetris.git", + "ssh_url": "git@github.com:KyleBWilson49/Nand2Tetris.git", + "clone_url": "https://github.com/KyleBWilson49/Nand2Tetris.git", + "svn_url": "https://github.com/KyleBWilson49/Nand2Tetris", + "homepage": null, + "size": 171, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 55377577, + "name": "nand2tetris", + "full_name": "JediKoder/nand2tetris", + "owner": { + "login": "JediKoder", + "id": 16416542, + "avatar_url": "https://avatars.githubusercontent.com/u/16416542?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/JediKoder", + "html_url": "https://github.com/JediKoder", + "followers_url": "https://api.github.com/users/JediKoder/followers", + "following_url": "https://api.github.com/users/JediKoder/following{/other_user}", + "gists_url": "https://api.github.com/users/JediKoder/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JediKoder/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JediKoder/subscriptions", + "organizations_url": "https://api.github.com/users/JediKoder/orgs", + "repos_url": "https://api.github.com/users/JediKoder/repos", + "events_url": "https://api.github.com/users/JediKoder/events{/privacy}", + "received_events_url": "https://api.github.com/users/JediKoder/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/JediKoder/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/JediKoder/nand2tetris", + "forks_url": "https://api.github.com/repos/JediKoder/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/JediKoder/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/JediKoder/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/JediKoder/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/JediKoder/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/JediKoder/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/JediKoder/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/JediKoder/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/JediKoder/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/JediKoder/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/JediKoder/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/JediKoder/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/JediKoder/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/JediKoder/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/JediKoder/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/JediKoder/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/JediKoder/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/JediKoder/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/JediKoder/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/JediKoder/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/JediKoder/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/JediKoder/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/JediKoder/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/JediKoder/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/JediKoder/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/JediKoder/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/JediKoder/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/JediKoder/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/JediKoder/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/JediKoder/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/JediKoder/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/JediKoder/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/JediKoder/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/JediKoder/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/JediKoder/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/JediKoder/nand2tetris/deployments", + "created_at": "2016-04-04T01:11:41Z", + "updated_at": "2016-04-28T04:33:10Z", + "pushed_at": "2016-04-17T23:09:43Z", + "git_url": "git://github.com/JediKoder/nand2tetris.git", + "ssh_url": "git@github.com:JediKoder/nand2tetris.git", + "clone_url": "https://github.com/JediKoder/nand2tetris.git", + "svn_url": "https://github.com/JediKoder/nand2tetris", + "homepage": null, + "size": 754, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 57323220, + "name": "Nand2Tetris", + "full_name": "Kannaj/Nand2Tetris", + "owner": { + "login": "Kannaj", + "id": 13432536, + "avatar_url": "https://avatars.githubusercontent.com/u/13432536?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Kannaj", + "html_url": "https://github.com/Kannaj", + "followers_url": "https://api.github.com/users/Kannaj/followers", + "following_url": "https://api.github.com/users/Kannaj/following{/other_user}", + "gists_url": "https://api.github.com/users/Kannaj/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Kannaj/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Kannaj/subscriptions", + "organizations_url": "https://api.github.com/users/Kannaj/orgs", + "repos_url": "https://api.github.com/users/Kannaj/repos", + "events_url": "https://api.github.com/users/Kannaj/events{/privacy}", + "received_events_url": "https://api.github.com/users/Kannaj/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Kannaj/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Kannaj/Nand2Tetris", + "forks_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Kannaj/Nand2Tetris/deployments", + "created_at": "2016-04-28T18:01:47Z", + "updated_at": "2016-04-28T18:03:32Z", + "pushed_at": "2016-04-28T18:04:14Z", + "git_url": "git://github.com/Kannaj/Nand2Tetris.git", + "ssh_url": "git@github.com:Kannaj/Nand2Tetris.git", + "clone_url": "https://github.com/Kannaj/Nand2Tetris.git", + "svn_url": "https://github.com/Kannaj/Nand2Tetris", + "homepage": null, + "size": 151, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + }, + { + "id": 60042196, + "name": "nand2tetris", + "full_name": "jmoyers/nand2tetris", + "owner": { + "login": "jmoyers", + "id": 235505, + "avatar_url": "https://avatars.githubusercontent.com/u/235505?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jmoyers", + "html_url": "https://github.com/jmoyers", + "followers_url": "https://api.github.com/users/jmoyers/followers", + "following_url": "https://api.github.com/users/jmoyers/following{/other_user}", + "gists_url": "https://api.github.com/users/jmoyers/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jmoyers/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jmoyers/subscriptions", + "organizations_url": "https://api.github.com/users/jmoyers/orgs", + "repos_url": "https://api.github.com/users/jmoyers/repos", + "events_url": "https://api.github.com/users/jmoyers/events{/privacy}", + "received_events_url": "https://api.github.com/users/jmoyers/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jmoyers/nand2tetris", + "description": "A computer built in HDL via http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/jmoyers/nand2tetris", + "forks_url": "https://api.github.com/repos/jmoyers/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jmoyers/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jmoyers/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jmoyers/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jmoyers/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jmoyers/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jmoyers/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jmoyers/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jmoyers/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jmoyers/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jmoyers/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jmoyers/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jmoyers/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jmoyers/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jmoyers/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jmoyers/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jmoyers/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jmoyers/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jmoyers/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jmoyers/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jmoyers/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jmoyers/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jmoyers/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jmoyers/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jmoyers/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jmoyers/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jmoyers/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jmoyers/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jmoyers/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jmoyers/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jmoyers/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jmoyers/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jmoyers/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jmoyers/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jmoyers/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jmoyers/nand2tetris/deployments", + "created_at": "2016-05-30T22:22:48Z", + "updated_at": "2016-06-03T00:16:12Z", + "pushed_at": "2016-06-04T00:43:08Z", + "git_url": "git://github.com/jmoyers/nand2tetris.git", + "ssh_url": "git@github.com:jmoyers/nand2tetris.git", + "clone_url": "https://github.com/jmoyers/nand2tetris.git", + "svn_url": "https://github.com/jmoyers/nand2tetris", + "homepage": "http://jmoyers.org/nand2tetris/", + "size": 26, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2584372 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:14 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "481603", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "28", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "link": "; rel=\"next\", ; rel=\"last\", ; rel=\"first\", ; rel=\"prev\"", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "a474937f3b2fa272558fa6dc951018ad", + "x-github-request-id": "AE1408AB:5528:836B1F3:5769F4B1" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/repositories?q=tetris+language%3Aassembly&sort=stars&order=desc&type=all&per_page=100&page=3&q=tetris+language:assembly&sort=stars&order=desc&type=all&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 473, + "incomplete_results": false, + "items": [ + { + "id": 58152629, + "name": "nand2tetris", + "full_name": "Chebotarev/nand2tetris", + "owner": { + "login": "Chebotarev", + "id": 4983495, + "avatar_url": "https://avatars.githubusercontent.com/u/4983495?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Chebotarev", + "html_url": "https://github.com/Chebotarev", + "followers_url": "https://api.github.com/users/Chebotarev/followers", + "following_url": "https://api.github.com/users/Chebotarev/following{/other_user}", + "gists_url": "https://api.github.com/users/Chebotarev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Chebotarev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Chebotarev/subscriptions", + "organizations_url": "https://api.github.com/users/Chebotarev/orgs", + "repos_url": "https://api.github.com/users/Chebotarev/repos", + "events_url": "https://api.github.com/users/Chebotarev/events{/privacy}", + "received_events_url": "https://api.github.com/users/Chebotarev/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Chebotarev/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Chebotarev/nand2tetris", + "forks_url": "https://api.github.com/repos/Chebotarev/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Chebotarev/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Chebotarev/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Chebotarev/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Chebotarev/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Chebotarev/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Chebotarev/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Chebotarev/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Chebotarev/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Chebotarev/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Chebotarev/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Chebotarev/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Chebotarev/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Chebotarev/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Chebotarev/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Chebotarev/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Chebotarev/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Chebotarev/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Chebotarev/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Chebotarev/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Chebotarev/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Chebotarev/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Chebotarev/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Chebotarev/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Chebotarev/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Chebotarev/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Chebotarev/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Chebotarev/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Chebotarev/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Chebotarev/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Chebotarev/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Chebotarev/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Chebotarev/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Chebotarev/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Chebotarev/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Chebotarev/nand2tetris/deployments", + "created_at": "2016-05-05T18:39:07Z", + "updated_at": "2016-05-05T18:39:47Z", + "pushed_at": "2016-06-06T16:15:50Z", + "git_url": "git://github.com/Chebotarev/nand2tetris.git", + "ssh_url": "git@github.com:Chebotarev/nand2tetris.git", + "clone_url": "https://github.com/Chebotarev/nand2tetris.git", + "svn_url": "https://github.com/Chebotarev/nand2tetris", + "homepage": null, + "size": 505, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 56449727, + "name": "nand2tetris", + "full_name": "ErwinM/nand2tetris", + "owner": { + "login": "ErwinM", + "id": 451731, + "avatar_url": "https://avatars.githubusercontent.com/u/451731?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ErwinM", + "html_url": "https://github.com/ErwinM", + "followers_url": "https://api.github.com/users/ErwinM/followers", + "following_url": "https://api.github.com/users/ErwinM/following{/other_user}", + "gists_url": "https://api.github.com/users/ErwinM/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ErwinM/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ErwinM/subscriptions", + "organizations_url": "https://api.github.com/users/ErwinM/orgs", + "repos_url": "https://api.github.com/users/ErwinM/repos", + "events_url": "https://api.github.com/users/ErwinM/events{/privacy}", + "received_events_url": "https://api.github.com/users/ErwinM/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ErwinM/nand2tetris", + "description": "building a CPU from scratch", + "fork": false, + "url": "https://api.github.com/repos/ErwinM/nand2tetris", + "forks_url": "https://api.github.com/repos/ErwinM/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ErwinM/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ErwinM/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ErwinM/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ErwinM/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ErwinM/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ErwinM/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ErwinM/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ErwinM/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ErwinM/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ErwinM/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ErwinM/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ErwinM/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ErwinM/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ErwinM/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ErwinM/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ErwinM/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ErwinM/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ErwinM/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ErwinM/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ErwinM/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ErwinM/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ErwinM/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ErwinM/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ErwinM/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ErwinM/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ErwinM/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ErwinM/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ErwinM/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ErwinM/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ErwinM/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ErwinM/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ErwinM/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ErwinM/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ErwinM/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ErwinM/nand2tetris/deployments", + "created_at": "2016-04-17T17:39:22Z", + "updated_at": "2016-04-17T17:39:42Z", + "pushed_at": "2016-06-06T21:37:38Z", + "git_url": "git://github.com/ErwinM/nand2tetris.git", + "ssh_url": "git@github.com:ErwinM/nand2tetris.git", + "clone_url": "https://github.com/ErwinM/nand2tetris.git", + "svn_url": "https://github.com/ErwinM/nand2tetris", + "homepage": null, + "size": 553, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 51807687, + "name": "nand2tetris_projects", + "full_name": "nwokeo/nand2tetris_projects", + "owner": { + "login": "nwokeo", + "id": 132086, + "avatar_url": "https://avatars.githubusercontent.com/u/132086?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nwokeo", + "html_url": "https://github.com/nwokeo", + "followers_url": "https://api.github.com/users/nwokeo/followers", + "following_url": "https://api.github.com/users/nwokeo/following{/other_user}", + "gists_url": "https://api.github.com/users/nwokeo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nwokeo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nwokeo/subscriptions", + "organizations_url": "https://api.github.com/users/nwokeo/orgs", + "repos_url": "https://api.github.com/users/nwokeo/repos", + "events_url": "https://api.github.com/users/nwokeo/events{/privacy}", + "received_events_url": "https://api.github.com/users/nwokeo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nwokeo/nand2tetris_projects", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/nwokeo/nand2tetris_projects", + "forks_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/forks", + "keys_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/teams", + "hooks_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/hooks", + "issue_events_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/issues/events{/number}", + "events_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/events", + "assignees_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/assignees{/user}", + "branches_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/branches{/branch}", + "tags_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/tags", + "blobs_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/languages", + "stargazers_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/stargazers", + "contributors_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/contributors", + "subscribers_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/subscribers", + "subscription_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/subscription", + "commits_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/contents/{+path}", + "compare_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/merges", + "archive_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/downloads", + "issues_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/issues{/number}", + "pulls_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/labels{/name}", + "releases_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/releases{/id}", + "deployments_url": "https://api.github.com/repos/nwokeo/nand2tetris_projects/deployments", + "created_at": "2016-02-16T04:22:57Z", + "updated_at": "2016-02-17T17:41:56Z", + "pushed_at": "2016-06-06T03:40:24Z", + "git_url": "git://github.com/nwokeo/nand2tetris_projects.git", + "ssh_url": "git@github.com:nwokeo/nand2tetris_projects.git", + "clone_url": "https://github.com/nwokeo/nand2tetris_projects.git", + "svn_url": "https://github.com/nwokeo/nand2tetris_projects", + "homepage": null, + "size": 165, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 56048885, + "name": "nand2tetris", + "full_name": "bleach31/nand2tetris", + "owner": { + "login": "bleach31", + "id": 5919566, + "avatar_url": "https://avatars.githubusercontent.com/u/5919566?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bleach31", + "html_url": "https://github.com/bleach31", + "followers_url": "https://api.github.com/users/bleach31/followers", + "following_url": "https://api.github.com/users/bleach31/following{/other_user}", + "gists_url": "https://api.github.com/users/bleach31/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bleach31/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bleach31/subscriptions", + "organizations_url": "https://api.github.com/users/bleach31/orgs", + "repos_url": "https://api.github.com/users/bleach31/repos", + "events_url": "https://api.github.com/users/bleach31/events{/privacy}", + "received_events_url": "https://api.github.com/users/bleach31/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bleach31/nand2tetris", + "description": "コンピュータシステムの理論と実装", + "fork": false, + "url": "https://api.github.com/repos/bleach31/nand2tetris", + "forks_url": "https://api.github.com/repos/bleach31/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bleach31/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bleach31/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bleach31/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bleach31/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bleach31/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bleach31/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bleach31/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bleach31/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bleach31/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bleach31/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bleach31/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bleach31/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bleach31/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bleach31/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bleach31/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bleach31/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bleach31/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bleach31/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bleach31/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bleach31/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bleach31/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bleach31/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bleach31/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bleach31/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bleach31/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bleach31/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bleach31/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bleach31/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bleach31/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bleach31/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bleach31/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bleach31/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bleach31/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bleach31/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bleach31/nand2tetris/deployments", + "created_at": "2016-04-12T09:19:57Z", + "updated_at": "2016-04-14T07:39:04Z", + "pushed_at": "2016-06-09T03:38:45Z", + "git_url": "git://github.com/bleach31/nand2tetris.git", + "ssh_url": "git@github.com:bleach31/nand2tetris.git", + "clone_url": "https://github.com/bleach31/nand2tetris.git", + "svn_url": "https://github.com/bleach31/nand2tetris", + "homepage": null, + "size": 569, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 58296664, + "name": "nand2tetris", + "full_name": "kejadlen/nand2tetris", + "owner": { + "login": "kejadlen", + "id": 8639, + "avatar_url": "https://avatars.githubusercontent.com/u/8639?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kejadlen", + "html_url": "https://github.com/kejadlen", + "followers_url": "https://api.github.com/users/kejadlen/followers", + "following_url": "https://api.github.com/users/kejadlen/following{/other_user}", + "gists_url": "https://api.github.com/users/kejadlen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kejadlen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kejadlen/subscriptions", + "organizations_url": "https://api.github.com/users/kejadlen/orgs", + "repos_url": "https://api.github.com/users/kejadlen/repos", + "events_url": "https://api.github.com/users/kejadlen/events{/privacy}", + "received_events_url": "https://api.github.com/users/kejadlen/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kejadlen/nand2tetris", + "description": "Exercises for Nand2Tetris: Building a Modern Computer from First Principles", + "fork": false, + "url": "https://api.github.com/repos/kejadlen/nand2tetris", + "forks_url": "https://api.github.com/repos/kejadlen/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kejadlen/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kejadlen/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kejadlen/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kejadlen/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kejadlen/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kejadlen/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kejadlen/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kejadlen/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kejadlen/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kejadlen/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kejadlen/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kejadlen/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kejadlen/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kejadlen/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kejadlen/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kejadlen/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kejadlen/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kejadlen/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kejadlen/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kejadlen/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kejadlen/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kejadlen/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kejadlen/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kejadlen/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kejadlen/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kejadlen/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kejadlen/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kejadlen/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kejadlen/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kejadlen/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kejadlen/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kejadlen/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kejadlen/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kejadlen/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kejadlen/nand2tetris/deployments", + "created_at": "2016-05-08T04:33:14Z", + "updated_at": "2016-05-15T20:32:41Z", + "pushed_at": "2016-06-13T14:39:59Z", + "git_url": "git://github.com/kejadlen/nand2tetris.git", + "ssh_url": "git@github.com:kejadlen/nand2tetris.git", + "clone_url": "https://github.com/kejadlen/nand2tetris.git", + "svn_url": "https://github.com/kejadlen/nand2tetris", + "homepage": "", + "size": 284, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 53294715, + "name": "nand2tetris", + "full_name": "chuckSMASH/nand2tetris", + "owner": { + "login": "chuckSMASH", + "id": 3101367, + "avatar_url": "https://avatars.githubusercontent.com/u/3101367?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/chuckSMASH", + "html_url": "https://github.com/chuckSMASH", + "followers_url": "https://api.github.com/users/chuckSMASH/followers", + "following_url": "https://api.github.com/users/chuckSMASH/following{/other_user}", + "gists_url": "https://api.github.com/users/chuckSMASH/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chuckSMASH/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chuckSMASH/subscriptions", + "organizations_url": "https://api.github.com/users/chuckSMASH/orgs", + "repos_url": "https://api.github.com/users/chuckSMASH/repos", + "events_url": "https://api.github.com/users/chuckSMASH/events{/privacy}", + "received_events_url": "https://api.github.com/users/chuckSMASH/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/chuckSMASH/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/chuckSMASH/nand2tetris", + "forks_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/chuckSMASH/nand2tetris/deployments", + "created_at": "2016-03-07T04:01:51Z", + "updated_at": "2016-06-13T03:10:14Z", + "pushed_at": "2016-06-14T00:34:00Z", + "git_url": "git://github.com/chuckSMASH/nand2tetris.git", + "ssh_url": "git@github.com:chuckSMASH/nand2tetris.git", + "clone_url": "https://github.com/chuckSMASH/nand2tetris.git", + "svn_url": "https://github.com/chuckSMASH/nand2tetris", + "homepage": null, + "size": 78, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 56850912, + "name": "from-nand-to-tetris", + "full_name": "omarrayward/from-nand-to-tetris", + "owner": { + "login": "omarrayward", + "id": 1934424, + "avatar_url": "https://avatars.githubusercontent.com/u/1934424?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/omarrayward", + "html_url": "https://github.com/omarrayward", + "followers_url": "https://api.github.com/users/omarrayward/followers", + "following_url": "https://api.github.com/users/omarrayward/following{/other_user}", + "gists_url": "https://api.github.com/users/omarrayward/gists{/gist_id}", + "starred_url": "https://api.github.com/users/omarrayward/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/omarrayward/subscriptions", + "organizations_url": "https://api.github.com/users/omarrayward/orgs", + "repos_url": "https://api.github.com/users/omarrayward/repos", + "events_url": "https://api.github.com/users/omarrayward/events{/privacy}", + "received_events_url": "https://api.github.com/users/omarrayward/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/omarrayward/from-nand-to-tetris", + "description": "Solutions for the book \"The Elements of Computing Systems: Building a Modern Computer from First Principles\"", + "fork": false, + "url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris", + "forks_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/forks", + "keys_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/teams", + "hooks_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/hooks", + "issue_events_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/events", + "assignees_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/tags", + "blobs_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/languages", + "stargazers_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/stargazers", + "contributors_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/contributors", + "subscribers_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/subscribers", + "subscription_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/subscription", + "commits_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/merges", + "archive_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/downloads", + "issues_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/omarrayward/from-nand-to-tetris/deployments", + "created_at": "2016-04-22T11:35:45Z", + "updated_at": "2016-04-22T11:58:42Z", + "pushed_at": "2016-06-17T16:31:15Z", + "git_url": "git://github.com/omarrayward/from-nand-to-tetris.git", + "ssh_url": "git@github.com:omarrayward/from-nand-to-tetris.git", + "clone_url": "https://github.com/omarrayward/from-nand-to-tetris.git", + "svn_url": "https://github.com/omarrayward/from-nand-to-tetris", + "homepage": null, + "size": 589, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 60189466, + "name": "nand2tetris", + "full_name": "macroscopicentric/nand2tetris", + "owner": { + "login": "macroscopicentric", + "id": 5589957, + "avatar_url": "https://avatars.githubusercontent.com/u/5589957?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/macroscopicentric", + "html_url": "https://github.com/macroscopicentric", + "followers_url": "https://api.github.com/users/macroscopicentric/followers", + "following_url": "https://api.github.com/users/macroscopicentric/following{/other_user}", + "gists_url": "https://api.github.com/users/macroscopicentric/gists{/gist_id}", + "starred_url": "https://api.github.com/users/macroscopicentric/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/macroscopicentric/subscriptions", + "organizations_url": "https://api.github.com/users/macroscopicentric/orgs", + "repos_url": "https://api.github.com/users/macroscopicentric/repos", + "events_url": "https://api.github.com/users/macroscopicentric/events{/privacy}", + "received_events_url": "https://api.github.com/users/macroscopicentric/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/macroscopicentric/nand2tetris", + "description": "Exercises from Nand2Tetris.", + "fork": false, + "url": "https://api.github.com/repos/macroscopicentric/nand2tetris", + "forks_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/macroscopicentric/nand2tetris/deployments", + "created_at": "2016-06-01T15:34:50Z", + "updated_at": "2016-06-13T20:17:36Z", + "pushed_at": "2016-06-21T15:59:27Z", + "git_url": "git://github.com/macroscopicentric/nand2tetris.git", + "ssh_url": "git@github.com:macroscopicentric/nand2tetris.git", + "clone_url": "https://github.com/macroscopicentric/nand2tetris.git", + "svn_url": "https://github.com/macroscopicentric/nand2tetris", + "homepage": null, + "size": 15, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.258437 + }, + { + "id": 24294103, + "name": "nand2tetris", + "full_name": "itayabu/nand2tetris", + "owner": { + "login": "itayabu", + "id": 6882339, + "avatar_url": "https://avatars.githubusercontent.com/u/6882339?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/itayabu", + "html_url": "https://github.com/itayabu", + "followers_url": "https://api.github.com/users/itayabu/followers", + "following_url": "https://api.github.com/users/itayabu/following{/other_user}", + "gists_url": "https://api.github.com/users/itayabu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/itayabu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/itayabu/subscriptions", + "organizations_url": "https://api.github.com/users/itayabu/orgs", + "repos_url": "https://api.github.com/users/itayabu/repos", + "events_url": "https://api.github.com/users/itayabu/events{/privacy}", + "received_events_url": "https://api.github.com/users/itayabu/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/itayabu/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/itayabu/nand2tetris", + "forks_url": "https://api.github.com/repos/itayabu/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/itayabu/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/itayabu/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/itayabu/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/itayabu/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/itayabu/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/itayabu/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/itayabu/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/itayabu/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/itayabu/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/itayabu/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/itayabu/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/itayabu/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/itayabu/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/itayabu/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/itayabu/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/itayabu/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/itayabu/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/itayabu/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/itayabu/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/itayabu/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/itayabu/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/itayabu/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/itayabu/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/itayabu/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/itayabu/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/itayabu/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/itayabu/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/itayabu/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/itayabu/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/itayabu/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/itayabu/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/itayabu/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/itayabu/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/itayabu/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/itayabu/nand2tetris/deployments", + "created_at": "2014-09-21T15:05:57Z", + "updated_at": "2015-05-05T10:11:18Z", + "pushed_at": "2015-06-22T07:21:37Z", + "git_url": "git://github.com/itayabu/nand2tetris.git", + "ssh_url": "git@github.com:itayabu/nand2tetris.git", + "clone_url": "https://github.com/itayabu/nand2tetris.git", + "svn_url": "https://github.com/itayabu/nand2tetris", + "homepage": null, + "size": 528, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 25301783, + "name": "nand2tetris", + "full_name": "sdemario/nand2tetris", + "owner": { + "login": "sdemario", + "id": 565145, + "avatar_url": "https://avatars.githubusercontent.com/u/565145?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sdemario", + "html_url": "https://github.com/sdemario", + "followers_url": "https://api.github.com/users/sdemario/followers", + "following_url": "https://api.github.com/users/sdemario/following{/other_user}", + "gists_url": "https://api.github.com/users/sdemario/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sdemario/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sdemario/subscriptions", + "organizations_url": "https://api.github.com/users/sdemario/orgs", + "repos_url": "https://api.github.com/users/sdemario/repos", + "events_url": "https://api.github.com/users/sdemario/events{/privacy}", + "received_events_url": "https://api.github.com/users/sdemario/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sdemario/nand2tetris", + "description": "Exercises from the Book The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/sdemario/nand2tetris", + "forks_url": "https://api.github.com/repos/sdemario/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/sdemario/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sdemario/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sdemario/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/sdemario/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/sdemario/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/sdemario/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/sdemario/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/sdemario/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/sdemario/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/sdemario/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sdemario/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sdemario/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sdemario/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sdemario/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sdemario/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/sdemario/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/sdemario/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/sdemario/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/sdemario/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/sdemario/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sdemario/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sdemario/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sdemario/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sdemario/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/sdemario/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sdemario/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/sdemario/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sdemario/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/sdemario/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/sdemario/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sdemario/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sdemario/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sdemario/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/sdemario/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/sdemario/nand2tetris/deployments", + "created_at": "2014-10-16T12:49:37Z", + "updated_at": "2014-10-16T13:02:37Z", + "pushed_at": "2014-10-16T13:02:37Z", + "git_url": "git://github.com/sdemario/nand2tetris.git", + "ssh_url": "git@github.com:sdemario/nand2tetris.git", + "clone_url": "https://github.com/sdemario/nand2tetris.git", + "svn_url": "https://github.com/sdemario/nand2tetris", + "homepage": null, + "size": 256, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 26615751, + "name": "nand2tetris", + "full_name": "abarnhard/nand2tetris", + "owner": { + "login": "abarnhard", + "id": 3149853, + "avatar_url": "https://avatars.githubusercontent.com/u/3149853?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/abarnhard", + "html_url": "https://github.com/abarnhard", + "followers_url": "https://api.github.com/users/abarnhard/followers", + "following_url": "https://api.github.com/users/abarnhard/following{/other_user}", + "gists_url": "https://api.github.com/users/abarnhard/gists{/gist_id}", + "starred_url": "https://api.github.com/users/abarnhard/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/abarnhard/subscriptions", + "organizations_url": "https://api.github.com/users/abarnhard/orgs", + "repos_url": "https://api.github.com/users/abarnhard/repos", + "events_url": "https://api.github.com/users/abarnhard/events{/privacy}", + "received_events_url": "https://api.github.com/users/abarnhard/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/abarnhard/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/abarnhard/nand2tetris", + "forks_url": "https://api.github.com/repos/abarnhard/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/abarnhard/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/abarnhard/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/abarnhard/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/abarnhard/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/abarnhard/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/abarnhard/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/abarnhard/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/abarnhard/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/abarnhard/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/abarnhard/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/abarnhard/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/abarnhard/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/abarnhard/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/abarnhard/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/abarnhard/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/abarnhard/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/abarnhard/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/abarnhard/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/abarnhard/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/abarnhard/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/abarnhard/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/abarnhard/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/abarnhard/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/abarnhard/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/abarnhard/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/abarnhard/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/abarnhard/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/abarnhard/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/abarnhard/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/abarnhard/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/abarnhard/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/abarnhard/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/abarnhard/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/abarnhard/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/abarnhard/nand2tetris/deployments", + "created_at": "2014-11-14T01:07:45Z", + "updated_at": "2014-11-14T01:08:38Z", + "pushed_at": "2014-11-14T01:09:45Z", + "git_url": "git://github.com/abarnhard/nand2tetris.git", + "ssh_url": "git@github.com:abarnhard/nand2tetris.git", + "clone_url": "https://github.com/abarnhard/nand2tetris.git", + "svn_url": "https://github.com/abarnhard/nand2tetris", + "homepage": null, + "size": 276, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 19907546, + "name": "nand2tetris", + "full_name": "beswarm/nand2tetris", + "owner": { + "login": "beswarm", + "id": 7619685, + "avatar_url": "https://avatars.githubusercontent.com/u/7619685?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/beswarm", + "html_url": "https://github.com/beswarm", + "followers_url": "https://api.github.com/users/beswarm/followers", + "following_url": "https://api.github.com/users/beswarm/following{/other_user}", + "gists_url": "https://api.github.com/users/beswarm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/beswarm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/beswarm/subscriptions", + "organizations_url": "https://api.github.com/users/beswarm/orgs", + "repos_url": "https://api.github.com/users/beswarm/repos", + "events_url": "https://api.github.com/users/beswarm/events{/privacy}", + "received_events_url": "https://api.github.com/users/beswarm/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/beswarm/nand2tetris", + "description": "self learning for nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/beswarm/nand2tetris", + "forks_url": "https://api.github.com/repos/beswarm/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/beswarm/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/beswarm/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/beswarm/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/beswarm/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/beswarm/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/beswarm/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/beswarm/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/beswarm/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/beswarm/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/beswarm/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/beswarm/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/beswarm/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/beswarm/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/beswarm/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/beswarm/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/beswarm/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/beswarm/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/beswarm/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/beswarm/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/beswarm/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/beswarm/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/beswarm/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/beswarm/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/beswarm/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/beswarm/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/beswarm/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/beswarm/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/beswarm/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/beswarm/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/beswarm/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/beswarm/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/beswarm/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/beswarm/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/beswarm/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/beswarm/nand2tetris/deployments", + "created_at": "2014-05-18T09:51:06Z", + "updated_at": "2014-05-18T09:53:56Z", + "pushed_at": "2013-10-26T18:24:19Z", + "git_url": "git://github.com/beswarm/nand2tetris.git", + "ssh_url": "git@github.com:beswarm/nand2tetris.git", + "clone_url": "https://github.com/beswarm/nand2tetris.git", + "svn_url": "https://github.com/beswarm/nand2tetris", + "homepage": null, + "size": 260, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 20533659, + "name": "nand2tetris", + "full_name": "olijens/nand2tetris", + "owner": { + "login": "olijens", + "id": 3739987, + "avatar_url": "https://avatars.githubusercontent.com/u/3739987?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/olijens", + "html_url": "https://github.com/olijens", + "followers_url": "https://api.github.com/users/olijens/followers", + "following_url": "https://api.github.com/users/olijens/following{/other_user}", + "gists_url": "https://api.github.com/users/olijens/gists{/gist_id}", + "starred_url": "https://api.github.com/users/olijens/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/olijens/subscriptions", + "organizations_url": "https://api.github.com/users/olijens/orgs", + "repos_url": "https://api.github.com/users/olijens/repos", + "events_url": "https://api.github.com/users/olijens/events{/privacy}", + "received_events_url": "https://api.github.com/users/olijens/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/olijens/nand2tetris", + "description": "My nand2tetris projects", + "fork": false, + "url": "https://api.github.com/repos/olijens/nand2tetris", + "forks_url": "https://api.github.com/repos/olijens/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/olijens/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/olijens/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/olijens/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/olijens/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/olijens/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/olijens/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/olijens/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/olijens/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/olijens/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/olijens/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/olijens/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/olijens/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/olijens/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/olijens/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/olijens/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/olijens/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/olijens/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/olijens/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/olijens/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/olijens/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/olijens/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/olijens/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/olijens/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/olijens/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/olijens/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/olijens/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/olijens/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/olijens/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/olijens/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/olijens/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/olijens/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/olijens/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/olijens/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/olijens/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/olijens/nand2tetris/deployments", + "created_at": "2014-06-05T17:02:20Z", + "updated_at": "2014-06-29T23:49:37Z", + "pushed_at": "2014-06-29T23:49:37Z", + "git_url": "git://github.com/olijens/nand2tetris.git", + "ssh_url": "git@github.com:olijens/nand2tetris.git", + "clone_url": "https://github.com/olijens/nand2tetris.git", + "svn_url": "https://github.com/olijens/nand2tetris", + "homepage": null, + "size": 336, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 23079224, + "name": "Nand2Tetris", + "full_name": "jburnworth/Nand2Tetris", + "owner": { + "login": "jburnworth", + "id": 7218306, + "avatar_url": "https://avatars.githubusercontent.com/u/7218306?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jburnworth", + "html_url": "https://github.com/jburnworth", + "followers_url": "https://api.github.com/users/jburnworth/followers", + "following_url": "https://api.github.com/users/jburnworth/following{/other_user}", + "gists_url": "https://api.github.com/users/jburnworth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jburnworth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jburnworth/subscriptions", + "organizations_url": "https://api.github.com/users/jburnworth/orgs", + "repos_url": "https://api.github.com/users/jburnworth/repos", + "events_url": "https://api.github.com/users/jburnworth/events{/privacy}", + "received_events_url": "https://api.github.com/users/jburnworth/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jburnworth/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jburnworth/Nand2Tetris", + "forks_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jburnworth/Nand2Tetris/deployments", + "created_at": "2014-08-18T16:58:28Z", + "updated_at": "2015-05-05T04:21:43Z", + "pushed_at": "2015-05-05T04:21:42Z", + "git_url": "git://github.com/jburnworth/Nand2Tetris.git", + "ssh_url": "git@github.com:jburnworth/Nand2Tetris.git", + "clone_url": "https://github.com/jburnworth/Nand2Tetris.git", + "svn_url": "https://github.com/jburnworth/Nand2Tetris", + "homepage": null, + "size": 740, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 30916941, + "name": "nand2tetris", + "full_name": "nellsel/nand2tetris", + "owner": { + "login": "nellsel", + "id": 3777527, + "avatar_url": "https://avatars.githubusercontent.com/u/3777527?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nellsel", + "html_url": "https://github.com/nellsel", + "followers_url": "https://api.github.com/users/nellsel/followers", + "following_url": "https://api.github.com/users/nellsel/following{/other_user}", + "gists_url": "https://api.github.com/users/nellsel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nellsel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nellsel/subscriptions", + "organizations_url": "https://api.github.com/users/nellsel/orgs", + "repos_url": "https://api.github.com/users/nellsel/repos", + "events_url": "https://api.github.com/users/nellsel/events{/privacy}", + "received_events_url": "https://api.github.com/users/nellsel/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nellsel/nand2tetris", + "description": "My work on the projects for the nand2tetris(http://www.nand2tetris.org/) course.", + "fork": false, + "url": "https://api.github.com/repos/nellsel/nand2tetris", + "forks_url": "https://api.github.com/repos/nellsel/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/nellsel/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nellsel/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nellsel/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/nellsel/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/nellsel/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/nellsel/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/nellsel/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/nellsel/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/nellsel/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/nellsel/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nellsel/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nellsel/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nellsel/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nellsel/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nellsel/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/nellsel/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/nellsel/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/nellsel/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/nellsel/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/nellsel/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nellsel/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nellsel/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nellsel/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nellsel/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/nellsel/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nellsel/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/nellsel/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nellsel/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/nellsel/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/nellsel/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nellsel/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nellsel/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nellsel/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/nellsel/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/nellsel/nand2tetris/deployments", + "created_at": "2015-02-17T12:56:09Z", + "updated_at": "2015-02-18T15:55:21Z", + "pushed_at": "2015-02-18T15:55:21Z", + "git_url": "git://github.com/nellsel/nand2tetris.git", + "ssh_url": "git@github.com:nellsel/nand2tetris.git", + "clone_url": "https://github.com/nellsel/nand2tetris.git", + "svn_url": "https://github.com/nellsel/nand2tetris", + "homepage": null, + "size": 336, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 29717469, + "name": "nand2tetris", + "full_name": "tomatrow/nand2tetris", + "owner": { + "login": "tomatrow", + "id": 2867210, + "avatar_url": "https://avatars.githubusercontent.com/u/2867210?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tomatrow", + "html_url": "https://github.com/tomatrow", + "followers_url": "https://api.github.com/users/tomatrow/followers", + "following_url": "https://api.github.com/users/tomatrow/following{/other_user}", + "gists_url": "https://api.github.com/users/tomatrow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tomatrow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tomatrow/subscriptions", + "organizations_url": "https://api.github.com/users/tomatrow/orgs", + "repos_url": "https://api.github.com/users/tomatrow/repos", + "events_url": "https://api.github.com/users/tomatrow/events{/privacy}", + "received_events_url": "https://api.github.com/users/tomatrow/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tomatrow/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/tomatrow/nand2tetris", + "forks_url": "https://api.github.com/repos/tomatrow/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tomatrow/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tomatrow/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tomatrow/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tomatrow/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tomatrow/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tomatrow/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tomatrow/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tomatrow/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tomatrow/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tomatrow/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tomatrow/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tomatrow/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tomatrow/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tomatrow/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tomatrow/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tomatrow/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tomatrow/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tomatrow/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tomatrow/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tomatrow/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tomatrow/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tomatrow/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tomatrow/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tomatrow/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tomatrow/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tomatrow/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tomatrow/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tomatrow/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tomatrow/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tomatrow/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tomatrow/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tomatrow/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tomatrow/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tomatrow/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tomatrow/nand2tetris/deployments", + "created_at": "2015-01-23T05:04:18Z", + "updated_at": "2015-04-12T20:24:41Z", + "pushed_at": "2015-04-12T20:24:40Z", + "git_url": "git://github.com/tomatrow/nand2tetris.git", + "ssh_url": "git@github.com:tomatrow/nand2tetris.git", + "clone_url": "https://github.com/tomatrow/nand2tetris.git", + "svn_url": "https://github.com/tomatrow/nand2tetris", + "homepage": null, + "size": 1108, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 31197103, + "name": "nand2tetris", + "full_name": "elitwin/nand2tetris", + "owner": { + "login": "elitwin", + "id": 85953, + "avatar_url": "https://avatars.githubusercontent.com/u/85953?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/elitwin", + "html_url": "https://github.com/elitwin", + "followers_url": "https://api.github.com/users/elitwin/followers", + "following_url": "https://api.github.com/users/elitwin/following{/other_user}", + "gists_url": "https://api.github.com/users/elitwin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/elitwin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/elitwin/subscriptions", + "organizations_url": "https://api.github.com/users/elitwin/orgs", + "repos_url": "https://api.github.com/users/elitwin/repos", + "events_url": "https://api.github.com/users/elitwin/events{/privacy}", + "received_events_url": "https://api.github.com/users/elitwin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/elitwin/nand2tetris", + "description": "Nand2Tetris code", + "fork": false, + "url": "https://api.github.com/repos/elitwin/nand2tetris", + "forks_url": "https://api.github.com/repos/elitwin/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/elitwin/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/elitwin/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/elitwin/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/elitwin/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/elitwin/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/elitwin/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/elitwin/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/elitwin/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/elitwin/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/elitwin/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/elitwin/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/elitwin/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/elitwin/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/elitwin/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/elitwin/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/elitwin/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/elitwin/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/elitwin/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/elitwin/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/elitwin/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/elitwin/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/elitwin/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/elitwin/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/elitwin/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/elitwin/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/elitwin/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/elitwin/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/elitwin/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/elitwin/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/elitwin/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/elitwin/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/elitwin/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/elitwin/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/elitwin/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/elitwin/nand2tetris/deployments", + "created_at": "2015-02-23T06:49:14Z", + "updated_at": "2015-03-13T19:09:19Z", + "pushed_at": "2015-03-13T19:11:32Z", + "git_url": "git://github.com/elitwin/nand2tetris.git", + "ssh_url": "git@github.com:elitwin/nand2tetris.git", + "clone_url": "https://github.com/elitwin/nand2tetris.git", + "svn_url": "https://github.com/elitwin/nand2tetris", + "homepage": null, + "size": 820, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 14589886, + "name": "nand2tetris", + "full_name": "zhengjiezxxy/nand2tetris", + "owner": { + "login": "zhengjiezxxy", + "id": 5151510, + "avatar_url": "https://avatars.githubusercontent.com/u/5151510?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/zhengjiezxxy", + "html_url": "https://github.com/zhengjiezxxy", + "followers_url": "https://api.github.com/users/zhengjiezxxy/followers", + "following_url": "https://api.github.com/users/zhengjiezxxy/following{/other_user}", + "gists_url": "https://api.github.com/users/zhengjiezxxy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zhengjiezxxy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zhengjiezxxy/subscriptions", + "organizations_url": "https://api.github.com/users/zhengjiezxxy/orgs", + "repos_url": "https://api.github.com/users/zhengjiezxxy/repos", + "events_url": "https://api.github.com/users/zhengjiezxxy/events{/privacy}", + "received_events_url": "https://api.github.com/users/zhengjiezxxy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/zhengjiezxxy/nand2tetris", + "description": "nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris", + "forks_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/zhengjiezxxy/nand2tetris/deployments", + "created_at": "2013-11-21T14:34:11Z", + "updated_at": "2014-05-30T09:07:00Z", + "pushed_at": "2014-05-30T09:07:00Z", + "git_url": "git://github.com/zhengjiezxxy/nand2tetris.git", + "ssh_url": "git@github.com:zhengjiezxxy/nand2tetris.git", + "clone_url": "https://github.com/zhengjiezxxy/nand2tetris.git", + "svn_url": "https://github.com/zhengjiezxxy/nand2tetris", + "homepage": null, + "size": 1872, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 13423112, + "name": "nand-to-tetris", + "full_name": "unblevable/nand-to-tetris", + "owner": { + "login": "unblevable", + "id": 723755, + "avatar_url": "https://avatars.githubusercontent.com/u/723755?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/unblevable", + "html_url": "https://github.com/unblevable", + "followers_url": "https://api.github.com/users/unblevable/followers", + "following_url": "https://api.github.com/users/unblevable/following{/other_user}", + "gists_url": "https://api.github.com/users/unblevable/gists{/gist_id}", + "starred_url": "https://api.github.com/users/unblevable/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/unblevable/subscriptions", + "organizations_url": "https://api.github.com/users/unblevable/orgs", + "repos_url": "https://api.github.com/users/unblevable/repos", + "events_url": "https://api.github.com/users/unblevable/events{/privacy}", + "received_events_url": "https://api.github.com/users/unblevable/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/unblevable/nand-to-tetris", + "description": "a simple computer emulated from scratch", + "fork": false, + "url": "https://api.github.com/repos/unblevable/nand-to-tetris", + "forks_url": "https://api.github.com/repos/unblevable/nand-to-tetris/forks", + "keys_url": "https://api.github.com/repos/unblevable/nand-to-tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/unblevable/nand-to-tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/unblevable/nand-to-tetris/teams", + "hooks_url": "https://api.github.com/repos/unblevable/nand-to-tetris/hooks", + "issue_events_url": "https://api.github.com/repos/unblevable/nand-to-tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/unblevable/nand-to-tetris/events", + "assignees_url": "https://api.github.com/repos/unblevable/nand-to-tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/unblevable/nand-to-tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/unblevable/nand-to-tetris/tags", + "blobs_url": "https://api.github.com/repos/unblevable/nand-to-tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/unblevable/nand-to-tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/unblevable/nand-to-tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/unblevable/nand-to-tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/unblevable/nand-to-tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/unblevable/nand-to-tetris/languages", + "stargazers_url": "https://api.github.com/repos/unblevable/nand-to-tetris/stargazers", + "contributors_url": "https://api.github.com/repos/unblevable/nand-to-tetris/contributors", + "subscribers_url": "https://api.github.com/repos/unblevable/nand-to-tetris/subscribers", + "subscription_url": "https://api.github.com/repos/unblevable/nand-to-tetris/subscription", + "commits_url": "https://api.github.com/repos/unblevable/nand-to-tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/unblevable/nand-to-tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/unblevable/nand-to-tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/unblevable/nand-to-tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/unblevable/nand-to-tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/unblevable/nand-to-tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/unblevable/nand-to-tetris/merges", + "archive_url": "https://api.github.com/repos/unblevable/nand-to-tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/unblevable/nand-to-tetris/downloads", + "issues_url": "https://api.github.com/repos/unblevable/nand-to-tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/unblevable/nand-to-tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/unblevable/nand-to-tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/unblevable/nand-to-tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/unblevable/nand-to-tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/unblevable/nand-to-tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/unblevable/nand-to-tetris/deployments", + "created_at": "2013-10-08T19:17:06Z", + "updated_at": "2013-11-07T03:11:46Z", + "pushed_at": "2013-10-21T21:41:45Z", + "git_url": "git://github.com/unblevable/nand-to-tetris.git", + "ssh_url": "git@github.com:unblevable/nand-to-tetris.git", + "clone_url": "https://github.com/unblevable/nand-to-tetris.git", + "svn_url": "https://github.com/unblevable/nand-to-tetris", + "homepage": "", + "size": 196, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 13483873, + "name": "nand2tetris", + "full_name": "jakestambaugh/nand2tetris", + "owner": { + "login": "jakestambaugh", + "id": 1499738, + "avatar_url": "https://avatars.githubusercontent.com/u/1499738?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jakestambaugh", + "html_url": "https://github.com/jakestambaugh", + "followers_url": "https://api.github.com/users/jakestambaugh/followers", + "following_url": "https://api.github.com/users/jakestambaugh/following{/other_user}", + "gists_url": "https://api.github.com/users/jakestambaugh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jakestambaugh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jakestambaugh/subscriptions", + "organizations_url": "https://api.github.com/users/jakestambaugh/orgs", + "repos_url": "https://api.github.com/users/jakestambaugh/repos", + "events_url": "https://api.github.com/users/jakestambaugh/events{/privacy}", + "received_events_url": "https://api.github.com/users/jakestambaugh/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jakestambaugh/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/jakestambaugh/nand2tetris", + "forks_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jakestambaugh/nand2tetris/deployments", + "created_at": "2013-10-10T21:50:54Z", + "updated_at": "2013-10-10T21:52:33Z", + "pushed_at": "2013-10-10T21:52:29Z", + "git_url": "git://github.com/jakestambaugh/nand2tetris.git", + "ssh_url": "git@github.com:jakestambaugh/nand2tetris.git", + "clone_url": "https://github.com/jakestambaugh/nand2tetris.git", + "svn_url": "https://github.com/jakestambaugh/nand2tetris", + "homepage": null, + "size": 292, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 16288044, + "name": "nand2tetris", + "full_name": "byteofprash/nand2tetris", + "owner": { + "login": "byteofprash", + "id": 2134689, + "avatar_url": "https://avatars.githubusercontent.com/u/2134689?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/byteofprash", + "html_url": "https://github.com/byteofprash", + "followers_url": "https://api.github.com/users/byteofprash/followers", + "following_url": "https://api.github.com/users/byteofprash/following{/other_user}", + "gists_url": "https://api.github.com/users/byteofprash/gists{/gist_id}", + "starred_url": "https://api.github.com/users/byteofprash/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/byteofprash/subscriptions", + "organizations_url": "https://api.github.com/users/byteofprash/orgs", + "repos_url": "https://api.github.com/users/byteofprash/repos", + "events_url": "https://api.github.com/users/byteofprash/events{/privacy}", + "received_events_url": "https://api.github.com/users/byteofprash/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/byteofprash/nand2tetris", + "description": "My code files based on the book \"The elements of Computing systems\"", + "fork": false, + "url": "https://api.github.com/repos/byteofprash/nand2tetris", + "forks_url": "https://api.github.com/repos/byteofprash/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/byteofprash/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/byteofprash/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/byteofprash/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/byteofprash/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/byteofprash/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/byteofprash/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/byteofprash/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/byteofprash/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/byteofprash/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/byteofprash/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/byteofprash/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/byteofprash/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/byteofprash/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/byteofprash/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/byteofprash/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/byteofprash/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/byteofprash/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/byteofprash/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/byteofprash/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/byteofprash/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/byteofprash/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/byteofprash/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/byteofprash/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/byteofprash/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/byteofprash/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/byteofprash/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/byteofprash/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/byteofprash/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/byteofprash/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/byteofprash/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/byteofprash/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/byteofprash/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/byteofprash/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/byteofprash/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/byteofprash/nand2tetris/deployments", + "created_at": "2014-01-27T18:23:39Z", + "updated_at": "2014-01-27T18:30:08Z", + "pushed_at": "2014-01-27T18:30:04Z", + "git_url": "git://github.com/byteofprash/nand2tetris.git", + "ssh_url": "git@github.com:byteofprash/nand2tetris.git", + "clone_url": "https://github.com/byteofprash/nand2tetris.git", + "svn_url": "https://github.com/byteofprash/nand2tetris", + "homepage": null, + "size": 660, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 9406051, + "name": "nand2tetris", + "full_name": "ankushgoyal/nand2tetris", + "owner": { + "login": "ankushgoyal", + "id": 467655, + "avatar_url": "https://avatars.githubusercontent.com/u/467655?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ankushgoyal", + "html_url": "https://github.com/ankushgoyal", + "followers_url": "https://api.github.com/users/ankushgoyal/followers", + "following_url": "https://api.github.com/users/ankushgoyal/following{/other_user}", + "gists_url": "https://api.github.com/users/ankushgoyal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ankushgoyal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ankushgoyal/subscriptions", + "organizations_url": "https://api.github.com/users/ankushgoyal/orgs", + "repos_url": "https://api.github.com/users/ankushgoyal/repos", + "events_url": "https://api.github.com/users/ankushgoyal/events{/privacy}", + "received_events_url": "https://api.github.com/users/ankushgoyal/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ankushgoyal/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/ankushgoyal/nand2tetris", + "forks_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ankushgoyal/nand2tetris/deployments", + "created_at": "2013-04-12T23:57:20Z", + "updated_at": "2013-10-02T15:46:53Z", + "pushed_at": "2013-04-13T06:50:08Z", + "git_url": "git://github.com/ankushgoyal/nand2tetris.git", + "ssh_url": "git@github.com:ankushgoyal/nand2tetris.git", + "clone_url": "https://github.com/ankushgoyal/nand2tetris.git", + "svn_url": "https://github.com/ankushgoyal/nand2tetris", + "homepage": null, + "size": 600, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 9618948, + "name": "nand2tetris", + "full_name": "bleach/nand2tetris", + "owner": { + "login": "bleach", + "id": 693486, + "avatar_url": "https://avatars.githubusercontent.com/u/693486?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bleach", + "html_url": "https://github.com/bleach", + "followers_url": "https://api.github.com/users/bleach/followers", + "following_url": "https://api.github.com/users/bleach/following{/other_user}", + "gists_url": "https://api.github.com/users/bleach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bleach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bleach/subscriptions", + "organizations_url": "https://api.github.com/users/bleach/orgs", + "repos_url": "https://api.github.com/users/bleach/repos", + "events_url": "https://api.github.com/users/bleach/events{/privacy}", + "received_events_url": "https://api.github.com/users/bleach/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bleach/nand2tetris", + "description": "Projects from the Elements of Computing Systems: http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/bleach/nand2tetris", + "forks_url": "https://api.github.com/repos/bleach/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bleach/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bleach/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bleach/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bleach/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bleach/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bleach/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bleach/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bleach/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bleach/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bleach/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bleach/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bleach/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bleach/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bleach/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bleach/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bleach/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bleach/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bleach/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bleach/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bleach/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bleach/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bleach/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bleach/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bleach/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bleach/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bleach/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bleach/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bleach/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bleach/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bleach/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bleach/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bleach/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bleach/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bleach/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bleach/nand2tetris/deployments", + "created_at": "2013-04-23T08:51:31Z", + "updated_at": "2014-01-23T10:39:24Z", + "pushed_at": "2013-04-30T11:50:53Z", + "git_url": "git://github.com/bleach/nand2tetris.git", + "ssh_url": "git@github.com:bleach/nand2tetris.git", + "clone_url": "https://github.com/bleach/nand2tetris.git", + "svn_url": "https://github.com/bleach/nand2tetris", + "homepage": null, + "size": 628, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 9916479, + "name": "nand2tetris", + "full_name": "beppenmk/nand2tetris", + "owner": { + "login": "beppenmk", + "id": 4367213, + "avatar_url": "https://avatars.githubusercontent.com/u/4367213?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/beppenmk", + "html_url": "https://github.com/beppenmk", + "followers_url": "https://api.github.com/users/beppenmk/followers", + "following_url": "https://api.github.com/users/beppenmk/following{/other_user}", + "gists_url": "https://api.github.com/users/beppenmk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/beppenmk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/beppenmk/subscriptions", + "organizations_url": "https://api.github.com/users/beppenmk/orgs", + "repos_url": "https://api.github.com/users/beppenmk/repos", + "events_url": "https://api.github.com/users/beppenmk/events{/privacy}", + "received_events_url": "https://api.github.com/users/beppenmk/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/beppenmk/nand2tetris", + "description": "nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/beppenmk/nand2tetris", + "forks_url": "https://api.github.com/repos/beppenmk/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/beppenmk/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/beppenmk/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/beppenmk/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/beppenmk/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/beppenmk/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/beppenmk/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/beppenmk/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/beppenmk/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/beppenmk/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/beppenmk/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/beppenmk/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/beppenmk/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/beppenmk/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/beppenmk/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/beppenmk/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/beppenmk/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/beppenmk/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/beppenmk/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/beppenmk/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/beppenmk/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/beppenmk/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/beppenmk/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/beppenmk/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/beppenmk/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/beppenmk/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/beppenmk/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/beppenmk/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/beppenmk/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/beppenmk/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/beppenmk/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/beppenmk/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/beppenmk/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/beppenmk/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/beppenmk/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/beppenmk/nand2tetris/deployments", + "created_at": "2013-05-07T16:32:38Z", + "updated_at": "2013-12-26T03:29:48Z", + "pushed_at": "2013-05-21T07:14:30Z", + "git_url": "git://github.com/beppenmk/nand2tetris.git", + "ssh_url": "git@github.com:beppenmk/nand2tetris.git", + "clone_url": "https://github.com/beppenmk/nand2tetris.git", + "svn_url": "https://github.com/beppenmk/nand2tetris", + "homepage": null, + "size": 1404, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 7711117, + "name": "Nand2tetris", + "full_name": "LittleMy/Nand2tetris", + "owner": { + "login": "LittleMy", + "id": 3317927, + "avatar_url": "https://avatars.githubusercontent.com/u/3317927?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/LittleMy", + "html_url": "https://github.com/LittleMy", + "followers_url": "https://api.github.com/users/LittleMy/followers", + "following_url": "https://api.github.com/users/LittleMy/following{/other_user}", + "gists_url": "https://api.github.com/users/LittleMy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/LittleMy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/LittleMy/subscriptions", + "organizations_url": "https://api.github.com/users/LittleMy/orgs", + "repos_url": "https://api.github.com/users/LittleMy/repos", + "events_url": "https://api.github.com/users/LittleMy/events{/privacy}", + "received_events_url": "https://api.github.com/users/LittleMy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/LittleMy/Nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/LittleMy/Nand2tetris", + "forks_url": "https://api.github.com/repos/LittleMy/Nand2tetris/forks", + "keys_url": "https://api.github.com/repos/LittleMy/Nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/LittleMy/Nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/LittleMy/Nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/LittleMy/Nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/LittleMy/Nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/LittleMy/Nand2tetris/events", + "assignees_url": "https://api.github.com/repos/LittleMy/Nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/LittleMy/Nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/LittleMy/Nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/LittleMy/Nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/LittleMy/Nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/LittleMy/Nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/LittleMy/Nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/LittleMy/Nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/LittleMy/Nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/LittleMy/Nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/LittleMy/Nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/LittleMy/Nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/LittleMy/Nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/LittleMy/Nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/LittleMy/Nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/LittleMy/Nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/LittleMy/Nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/LittleMy/Nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/LittleMy/Nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/LittleMy/Nand2tetris/merges", + "archive_url": "https://api.github.com/repos/LittleMy/Nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/LittleMy/Nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/LittleMy/Nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/LittleMy/Nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/LittleMy/Nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/LittleMy/Nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/LittleMy/Nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/LittleMy/Nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/LittleMy/Nand2tetris/deployments", + "created_at": "2013-01-20T01:00:33Z", + "updated_at": "2013-11-26T16:57:48Z", + "pushed_at": "2013-08-19T00:56:29Z", + "git_url": "git://github.com/LittleMy/Nand2tetris.git", + "ssh_url": "git@github.com:LittleMy/Nand2tetris.git", + "clone_url": "https://github.com/LittleMy/Nand2tetris.git", + "svn_url": "https://github.com/LittleMy/Nand2tetris", + "homepage": null, + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 6961973, + "name": "nand2tetris", + "full_name": "nickcadams/nand2tetris", + "owner": { + "login": "nickcadams", + "id": 1253510, + "avatar_url": "https://avatars.githubusercontent.com/u/1253510?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nickcadams", + "html_url": "https://github.com/nickcadams", + "followers_url": "https://api.github.com/users/nickcadams/followers", + "following_url": "https://api.github.com/users/nickcadams/following{/other_user}", + "gists_url": "https://api.github.com/users/nickcadams/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nickcadams/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nickcadams/subscriptions", + "organizations_url": "https://api.github.com/users/nickcadams/orgs", + "repos_url": "https://api.github.com/users/nickcadams/repos", + "events_url": "https://api.github.com/users/nickcadams/events{/privacy}", + "received_events_url": "https://api.github.com/users/nickcadams/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nickcadams/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/nickcadams/nand2tetris", + "forks_url": "https://api.github.com/repos/nickcadams/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/nickcadams/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nickcadams/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nickcadams/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/nickcadams/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/nickcadams/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/nickcadams/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/nickcadams/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/nickcadams/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/nickcadams/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/nickcadams/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nickcadams/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nickcadams/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nickcadams/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nickcadams/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nickcadams/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/nickcadams/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/nickcadams/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/nickcadams/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/nickcadams/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/nickcadams/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nickcadams/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nickcadams/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nickcadams/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nickcadams/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/nickcadams/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nickcadams/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/nickcadams/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nickcadams/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/nickcadams/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/nickcadams/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nickcadams/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nickcadams/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nickcadams/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/nickcadams/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/nickcadams/nand2tetris/deployments", + "created_at": "2012-12-02T01:30:10Z", + "updated_at": "2013-12-09T05:26:35Z", + "pushed_at": "2013-02-09T19:03:03Z", + "git_url": "git://github.com/nickcadams/nand2tetris.git", + "ssh_url": "git@github.com:nickcadams/nand2tetris.git", + "clone_url": "https://github.com/nickcadams/nand2tetris.git", + "svn_url": "https://github.com/nickcadams/nand2tetris", + "homepage": null, + "size": 1308, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 7817680, + "name": "nand2tetris", + "full_name": "krolft/nand2tetris", + "owner": { + "login": "krolft", + "id": 1170229, + "avatar_url": "https://avatars.githubusercontent.com/u/1170229?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/krolft", + "html_url": "https://github.com/krolft", + "followers_url": "https://api.github.com/users/krolft/followers", + "following_url": "https://api.github.com/users/krolft/following{/other_user}", + "gists_url": "https://api.github.com/users/krolft/gists{/gist_id}", + "starred_url": "https://api.github.com/users/krolft/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/krolft/subscriptions", + "organizations_url": "https://api.github.com/users/krolft/orgs", + "repos_url": "https://api.github.com/users/krolft/repos", + "events_url": "https://api.github.com/users/krolft/events{/privacy}", + "received_events_url": "https://api.github.com/users/krolft/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/krolft/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/krolft/nand2tetris", + "forks_url": "https://api.github.com/repos/krolft/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/krolft/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/krolft/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/krolft/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/krolft/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/krolft/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/krolft/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/krolft/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/krolft/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/krolft/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/krolft/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/krolft/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/krolft/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/krolft/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/krolft/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/krolft/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/krolft/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/krolft/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/krolft/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/krolft/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/krolft/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/krolft/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/krolft/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/krolft/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/krolft/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/krolft/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/krolft/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/krolft/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/krolft/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/krolft/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/krolft/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/krolft/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/krolft/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/krolft/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/krolft/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/krolft/nand2tetris/deployments", + "created_at": "2013-01-25T09:55:27Z", + "updated_at": "2013-12-07T18:37:58Z", + "pushed_at": "2013-01-27T21:15:05Z", + "git_url": "git://github.com/krolft/nand2tetris.git", + "ssh_url": "git@github.com:krolft/nand2tetris.git", + "clone_url": "https://github.com/krolft/nand2tetris.git", + "svn_url": "https://github.com/krolft/nand2tetris", + "homepage": null, + "size": 2132, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 18025032, + "name": "nand2tetris", + "full_name": "ixv/nand2tetris", + "owner": { + "login": "ixv", + "id": 4741759, + "avatar_url": "https://avatars.githubusercontent.com/u/4741759?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ixv", + "html_url": "https://github.com/ixv", + "followers_url": "https://api.github.com/users/ixv/followers", + "following_url": "https://api.github.com/users/ixv/following{/other_user}", + "gists_url": "https://api.github.com/users/ixv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ixv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ixv/subscriptions", + "organizations_url": "https://api.github.com/users/ixv/orgs", + "repos_url": "https://api.github.com/users/ixv/repos", + "events_url": "https://api.github.com/users/ixv/events{/privacy}", + "received_events_url": "https://api.github.com/users/ixv/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ixv/nand2tetris", + "description": "my solutions to the nand2tetris course", + "fork": false, + "url": "https://api.github.com/repos/ixv/nand2tetris", + "forks_url": "https://api.github.com/repos/ixv/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ixv/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ixv/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ixv/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ixv/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ixv/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ixv/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ixv/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ixv/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ixv/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ixv/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ixv/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ixv/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ixv/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ixv/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ixv/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ixv/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ixv/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ixv/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ixv/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ixv/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ixv/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ixv/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ixv/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ixv/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ixv/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ixv/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ixv/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ixv/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ixv/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ixv/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ixv/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ixv/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ixv/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ixv/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ixv/nand2tetris/deployments", + "created_at": "2014-03-23T02:40:08Z", + "updated_at": "2014-07-06T00:12:26Z", + "pushed_at": "2014-07-07T03:23:45Z", + "git_url": "git://github.com/ixv/nand2tetris.git", + "ssh_url": "git@github.com:ixv/nand2tetris.git", + "clone_url": "https://github.com/ixv/nand2tetris.git", + "svn_url": "https://github.com/ixv/nand2tetris", + "homepage": null, + "size": 176, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 37437889, + "name": "Nand-to-tetris-project", + "full_name": "codybraun/Nand-to-tetris-project", + "owner": { + "login": "codybraun", + "id": 7637436, + "avatar_url": "https://avatars.githubusercontent.com/u/7637436?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/codybraun", + "html_url": "https://github.com/codybraun", + "followers_url": "https://api.github.com/users/codybraun/followers", + "following_url": "https://api.github.com/users/codybraun/following{/other_user}", + "gists_url": "https://api.github.com/users/codybraun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/codybraun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/codybraun/subscriptions", + "organizations_url": "https://api.github.com/users/codybraun/orgs", + "repos_url": "https://api.github.com/users/codybraun/repos", + "events_url": "https://api.github.com/users/codybraun/events{/privacy}", + "received_events_url": "https://api.github.com/users/codybraun/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/codybraun/Nand-to-tetris-project", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project", + "forks_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/forks", + "keys_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/teams", + "hooks_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/hooks", + "issue_events_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/issues/events{/number}", + "events_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/events", + "assignees_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/assignees{/user}", + "branches_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/branches{/branch}", + "tags_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/tags", + "blobs_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/statuses/{sha}", + "languages_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/languages", + "stargazers_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/stargazers", + "contributors_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/contributors", + "subscribers_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/subscribers", + "subscription_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/subscription", + "commits_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/contents/{+path}", + "compare_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/merges", + "archive_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/downloads", + "issues_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/issues{/number}", + "pulls_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/pulls{/number}", + "milestones_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/milestones{/number}", + "notifications_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/labels{/name}", + "releases_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/releases{/id}", + "deployments_url": "https://api.github.com/repos/codybraun/Nand-to-tetris-project/deployments", + "created_at": "2015-06-15T01:51:54Z", + "updated_at": "2015-06-15T01:54:31Z", + "pushed_at": "2015-06-15T01:54:29Z", + "git_url": "git://github.com/codybraun/Nand-to-tetris-project.git", + "ssh_url": "git@github.com:codybraun/Nand-to-tetris-project.git", + "clone_url": "https://github.com/codybraun/Nand-to-tetris-project.git", + "svn_url": "https://github.com/codybraun/Nand-to-tetris-project", + "homepage": null, + "size": 8672, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 38372774, + "name": "nand2tetris", + "full_name": "ccdwyer/nand2tetris", + "owner": { + "login": "ccdwyer", + "id": 1327868, + "avatar_url": "https://avatars.githubusercontent.com/u/1327868?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ccdwyer", + "html_url": "https://github.com/ccdwyer", + "followers_url": "https://api.github.com/users/ccdwyer/followers", + "following_url": "https://api.github.com/users/ccdwyer/following{/other_user}", + "gists_url": "https://api.github.com/users/ccdwyer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ccdwyer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ccdwyer/subscriptions", + "organizations_url": "https://api.github.com/users/ccdwyer/orgs", + "repos_url": "https://api.github.com/users/ccdwyer/repos", + "events_url": "https://api.github.com/users/ccdwyer/events{/privacy}", + "received_events_url": "https://api.github.com/users/ccdwyer/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ccdwyer/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/ccdwyer/nand2tetris", + "forks_url": "https://api.github.com/repos/ccdwyer/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ccdwyer/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ccdwyer/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ccdwyer/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ccdwyer/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ccdwyer/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ccdwyer/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ccdwyer/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ccdwyer/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ccdwyer/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ccdwyer/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ccdwyer/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ccdwyer/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ccdwyer/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ccdwyer/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ccdwyer/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ccdwyer/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ccdwyer/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ccdwyer/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ccdwyer/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ccdwyer/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ccdwyer/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ccdwyer/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ccdwyer/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ccdwyer/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ccdwyer/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ccdwyer/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ccdwyer/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ccdwyer/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ccdwyer/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ccdwyer/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ccdwyer/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ccdwyer/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ccdwyer/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ccdwyer/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ccdwyer/nand2tetris/deployments", + "created_at": "2015-07-01T13:32:12Z", + "updated_at": "2015-07-01T13:32:36Z", + "pushed_at": "2015-07-01T18:39:37Z", + "git_url": "git://github.com/ccdwyer/nand2tetris.git", + "ssh_url": "git@github.com:ccdwyer/nand2tetris.git", + "clone_url": "https://github.com/ccdwyer/nand2tetris.git", + "svn_url": "https://github.com/ccdwyer/nand2tetris", + "homepage": null, + "size": 312, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 38515120, + "name": "Nand2Tetris", + "full_name": "robertpd/Nand2Tetris", + "owner": { + "login": "robertpd", + "id": 921456, + "avatar_url": "https://avatars.githubusercontent.com/u/921456?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/robertpd", + "html_url": "https://github.com/robertpd", + "followers_url": "https://api.github.com/users/robertpd/followers", + "following_url": "https://api.github.com/users/robertpd/following{/other_user}", + "gists_url": "https://api.github.com/users/robertpd/gists{/gist_id}", + "starred_url": "https://api.github.com/users/robertpd/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/robertpd/subscriptions", + "organizations_url": "https://api.github.com/users/robertpd/orgs", + "repos_url": "https://api.github.com/users/robertpd/repos", + "events_url": "https://api.github.com/users/robertpd/events{/privacy}", + "received_events_url": "https://api.github.com/users/robertpd/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/robertpd/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/robertpd/Nand2Tetris", + "forks_url": "https://api.github.com/repos/robertpd/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/robertpd/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/robertpd/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/robertpd/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/robertpd/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/robertpd/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/robertpd/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/robertpd/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/robertpd/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/robertpd/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/robertpd/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/robertpd/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/robertpd/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/robertpd/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/robertpd/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/robertpd/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/robertpd/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/robertpd/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/robertpd/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/robertpd/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/robertpd/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/robertpd/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/robertpd/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/robertpd/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/robertpd/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/robertpd/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/robertpd/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/robertpd/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/robertpd/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/robertpd/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/robertpd/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/robertpd/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/robertpd/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/robertpd/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/robertpd/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/robertpd/Nand2Tetris/deployments", + "created_at": "2015-07-04T00:06:36Z", + "updated_at": "2015-07-04T00:35:51Z", + "pushed_at": "2015-07-10T23:37:30Z", + "git_url": "git://github.com/robertpd/Nand2Tetris.git", + "ssh_url": "git@github.com:robertpd/Nand2Tetris.git", + "clone_url": "https://github.com/robertpd/Nand2Tetris.git", + "svn_url": "https://github.com/robertpd/Nand2Tetris", + "homepage": null, + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 38585772, + "name": "nand2tetris", + "full_name": "jgopel/nand2tetris", + "owner": { + "login": "jgopel", + "id": 1779681, + "avatar_url": "https://avatars.githubusercontent.com/u/1779681?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jgopel", + "html_url": "https://github.com/jgopel", + "followers_url": "https://api.github.com/users/jgopel/followers", + "following_url": "https://api.github.com/users/jgopel/following{/other_user}", + "gists_url": "https://api.github.com/users/jgopel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jgopel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jgopel/subscriptions", + "organizations_url": "https://api.github.com/users/jgopel/orgs", + "repos_url": "https://api.github.com/users/jgopel/repos", + "events_url": "https://api.github.com/users/jgopel/events{/privacy}", + "received_events_url": "https://api.github.com/users/jgopel/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jgopel/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jgopel/nand2tetris", + "forks_url": "https://api.github.com/repos/jgopel/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jgopel/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jgopel/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jgopel/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jgopel/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jgopel/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jgopel/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jgopel/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jgopel/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jgopel/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jgopel/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jgopel/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jgopel/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jgopel/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jgopel/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jgopel/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jgopel/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jgopel/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jgopel/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jgopel/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jgopel/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jgopel/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jgopel/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jgopel/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jgopel/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jgopel/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jgopel/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jgopel/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jgopel/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jgopel/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jgopel/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jgopel/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jgopel/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jgopel/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jgopel/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jgopel/nand2tetris/deployments", + "created_at": "2015-07-05T22:02:17Z", + "updated_at": "2015-07-05T22:08:45Z", + "pushed_at": "2015-07-27T19:26:31Z", + "git_url": "git://github.com/jgopel/nand2tetris.git", + "ssh_url": "git@github.com:jgopel/nand2tetris.git", + "clone_url": "https://github.com/jgopel/nand2tetris.git", + "svn_url": "https://github.com/jgopel/nand2tetris", + "homepage": null, + "size": 444, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 36733775, + "name": "nand2tetris", + "full_name": "kaishuu0123/nand2tetris", + "owner": { + "login": "kaishuu0123", + "id": 1567423, + "avatar_url": "https://avatars.githubusercontent.com/u/1567423?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kaishuu0123", + "html_url": "https://github.com/kaishuu0123", + "followers_url": "https://api.github.com/users/kaishuu0123/followers", + "following_url": "https://api.github.com/users/kaishuu0123/following{/other_user}", + "gists_url": "https://api.github.com/users/kaishuu0123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kaishuu0123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kaishuu0123/subscriptions", + "organizations_url": "https://api.github.com/users/kaishuu0123/orgs", + "repos_url": "https://api.github.com/users/kaishuu0123/repos", + "events_url": "https://api.github.com/users/kaishuu0123/events{/privacy}", + "received_events_url": "https://api.github.com/users/kaishuu0123/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kaishuu0123/nand2tetris", + "description": "Computer implementation as described in \"The Elements of Computing Systems\"", + "fork": false, + "url": "https://api.github.com/repos/kaishuu0123/nand2tetris", + "forks_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kaishuu0123/nand2tetris/deployments", + "created_at": "2015-06-02T13:08:08Z", + "updated_at": "2015-06-02T13:10:17Z", + "pushed_at": "2015-06-18T14:22:45Z", + "git_url": "git://github.com/kaishuu0123/nand2tetris.git", + "ssh_url": "git@github.com:kaishuu0123/nand2tetris.git", + "clone_url": "https://github.com/kaishuu0123/nand2tetris.git", + "svn_url": "https://github.com/kaishuu0123/nand2tetris", + "homepage": null, + "size": 324, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 35976465, + "name": "Nand2Tetris", + "full_name": "skfarhat/Nand2Tetris", + "owner": { + "login": "skfarhat", + "id": 3952243, + "avatar_url": "https://avatars.githubusercontent.com/u/3952243?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/skfarhat", + "html_url": "https://github.com/skfarhat", + "followers_url": "https://api.github.com/users/skfarhat/followers", + "following_url": "https://api.github.com/users/skfarhat/following{/other_user}", + "gists_url": "https://api.github.com/users/skfarhat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skfarhat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skfarhat/subscriptions", + "organizations_url": "https://api.github.com/users/skfarhat/orgs", + "repos_url": "https://api.github.com/users/skfarhat/repos", + "events_url": "https://api.github.com/users/skfarhat/events{/privacy}", + "received_events_url": "https://api.github.com/users/skfarhat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/skfarhat/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/skfarhat/Nand2Tetris", + "forks_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/skfarhat/Nand2Tetris/deployments", + "created_at": "2015-05-20T21:59:24Z", + "updated_at": "2015-05-20T22:23:02Z", + "pushed_at": "2015-05-20T22:22:54Z", + "git_url": "git://github.com/skfarhat/Nand2Tetris.git", + "ssh_url": "git@github.com:skfarhat/Nand2Tetris.git", + "clone_url": "https://github.com/skfarhat/Nand2Tetris.git", + "svn_url": "https://github.com/skfarhat/Nand2Tetris", + "homepage": null, + "size": 232, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34077620, + "name": "Nand2Tetris", + "full_name": "ashumeow/Nand2Tetris", + "owner": { + "login": "ashumeow", + "id": 5597047, + "avatar_url": "https://avatars.githubusercontent.com/u/5597047?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ashumeow", + "html_url": "https://github.com/ashumeow", + "followers_url": "https://api.github.com/users/ashumeow/followers", + "following_url": "https://api.github.com/users/ashumeow/following{/other_user}", + "gists_url": "https://api.github.com/users/ashumeow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ashumeow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ashumeow/subscriptions", + "organizations_url": "https://api.github.com/users/ashumeow/orgs", + "repos_url": "https://api.github.com/users/ashumeow/repos", + "events_url": "https://api.github.com/users/ashumeow/events{/privacy}", + "received_events_url": "https://api.github.com/users/ashumeow/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ashumeow/Nand2Tetris", + "description": "Building hardware modules on a computer using Hardware Description Language (HDL) with the help of Hardware Simulator, CPU Emulator and Assembler. A 7-week course journey in Coursera provided by The Hebrew University of Jerusalem.", + "fork": false, + "url": "https://api.github.com/repos/ashumeow/Nand2Tetris", + "forks_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ashumeow/Nand2Tetris/deployments", + "created_at": "2015-04-16T20:02:05Z", + "updated_at": "2015-06-05T06:59:27Z", + "pushed_at": "2015-06-09T14:47:06Z", + "git_url": "git://github.com/ashumeow/Nand2Tetris.git", + "ssh_url": "git@github.com:ashumeow/Nand2Tetris.git", + "clone_url": "https://github.com/ashumeow/Nand2Tetris.git", + "svn_url": "https://github.com/ashumeow/Nand2Tetris", + "homepage": null, + "size": 711, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34045171, + "name": "nand2tetris", + "full_name": "hgye/nand2tetris", + "owner": { + "login": "hgye", + "id": 497873, + "avatar_url": "https://avatars.githubusercontent.com/u/497873?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hgye", + "html_url": "https://github.com/hgye", + "followers_url": "https://api.github.com/users/hgye/followers", + "following_url": "https://api.github.com/users/hgye/following{/other_user}", + "gists_url": "https://api.github.com/users/hgye/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hgye/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hgye/subscriptions", + "organizations_url": "https://api.github.com/users/hgye/orgs", + "repos_url": "https://api.github.com/users/hgye/repos", + "events_url": "https://api.github.com/users/hgye/events{/privacy}", + "received_events_url": "https://api.github.com/users/hgye/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hgye/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/hgye/nand2tetris", + "forks_url": "https://api.github.com/repos/hgye/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/hgye/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hgye/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hgye/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/hgye/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/hgye/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/hgye/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/hgye/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/hgye/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/hgye/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/hgye/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hgye/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hgye/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hgye/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hgye/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hgye/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/hgye/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/hgye/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/hgye/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/hgye/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/hgye/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hgye/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hgye/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hgye/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hgye/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/hgye/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hgye/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/hgye/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hgye/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/hgye/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/hgye/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hgye/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hgye/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hgye/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/hgye/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/hgye/nand2tetris/deployments", + "created_at": "2015-04-16T08:58:16Z", + "updated_at": "2015-05-08T09:33:28Z", + "pushed_at": "2015-06-28T12:19:28Z", + "git_url": "git://github.com/hgye/nand2tetris.git", + "ssh_url": "git@github.com:hgye/nand2tetris.git", + "clone_url": "https://github.com/hgye/nand2tetris.git", + "svn_url": "https://github.com/hgye/nand2tetris", + "homepage": null, + "size": 692, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34185965, + "name": "nand2tetris", + "full_name": "sanp/nand2tetris", + "owner": { + "login": "sanp", + "id": 2717548, + "avatar_url": "https://avatars.githubusercontent.com/u/2717548?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sanp", + "html_url": "https://github.com/sanp", + "followers_url": "https://api.github.com/users/sanp/followers", + "following_url": "https://api.github.com/users/sanp/following{/other_user}", + "gists_url": "https://api.github.com/users/sanp/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sanp/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sanp/subscriptions", + "organizations_url": "https://api.github.com/users/sanp/orgs", + "repos_url": "https://api.github.com/users/sanp/repos", + "events_url": "https://api.github.com/users/sanp/events{/privacy}", + "received_events_url": "https://api.github.com/users/sanp/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sanp/nand2tetris", + "description": "Problem sets for nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/sanp/nand2tetris", + "forks_url": "https://api.github.com/repos/sanp/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/sanp/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sanp/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sanp/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/sanp/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/sanp/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/sanp/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/sanp/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/sanp/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/sanp/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/sanp/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sanp/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sanp/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sanp/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sanp/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sanp/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/sanp/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/sanp/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/sanp/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/sanp/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/sanp/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sanp/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sanp/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sanp/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sanp/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/sanp/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sanp/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/sanp/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sanp/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/sanp/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/sanp/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sanp/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sanp/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sanp/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/sanp/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/sanp/nand2tetris/deployments", + "created_at": "2015-04-18T22:56:16Z", + "updated_at": "2015-05-04T15:50:45Z", + "pushed_at": "2015-05-04T15:50:44Z", + "git_url": "git://github.com/sanp/nand2tetris.git", + "ssh_url": "git@github.com:sanp/nand2tetris.git", + "clone_url": "https://github.com/sanp/nand2tetris.git", + "svn_url": "https://github.com/sanp/nand2tetris", + "homepage": null, + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34227223, + "name": "nand2tetris", + "full_name": "ecxr/nand2tetris", + "owner": { + "login": "ecxr", + "id": 2193686, + "avatar_url": "https://avatars.githubusercontent.com/u/2193686?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ecxr", + "html_url": "https://github.com/ecxr", + "followers_url": "https://api.github.com/users/ecxr/followers", + "following_url": "https://api.github.com/users/ecxr/following{/other_user}", + "gists_url": "https://api.github.com/users/ecxr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ecxr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ecxr/subscriptions", + "organizations_url": "https://api.github.com/users/ecxr/orgs", + "repos_url": "https://api.github.com/users/ecxr/repos", + "events_url": "https://api.github.com/users/ecxr/events{/privacy}", + "received_events_url": "https://api.github.com/users/ecxr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ecxr/nand2tetris", + "description": "Coursera nand2tetris Spring 2015", + "fork": false, + "url": "https://api.github.com/repos/ecxr/nand2tetris", + "forks_url": "https://api.github.com/repos/ecxr/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ecxr/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ecxr/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ecxr/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ecxr/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ecxr/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ecxr/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ecxr/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ecxr/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ecxr/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ecxr/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ecxr/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ecxr/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ecxr/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ecxr/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ecxr/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ecxr/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ecxr/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ecxr/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ecxr/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ecxr/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ecxr/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ecxr/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ecxr/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ecxr/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ecxr/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ecxr/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ecxr/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ecxr/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ecxr/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ecxr/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ecxr/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ecxr/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ecxr/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ecxr/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ecxr/nand2tetris/deployments", + "created_at": "2015-04-19T22:42:32Z", + "updated_at": "2015-04-20T15:33:42Z", + "pushed_at": "2015-05-31T18:17:19Z", + "git_url": "git://github.com/ecxr/nand2tetris.git", + "ssh_url": "git@github.com:ecxr/nand2tetris.git", + "clone_url": "https://github.com/ecxr/nand2tetris.git", + "svn_url": "https://github.com/ecxr/nand2tetris", + "homepage": null, + "size": 356, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34174226, + "name": "nand2tetris", + "full_name": "Olical/nand2tetris", + "owner": { + "login": "Olical", + "id": 315229, + "avatar_url": "https://avatars.githubusercontent.com/u/315229?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Olical", + "html_url": "https://github.com/Olical", + "followers_url": "https://api.github.com/users/Olical/followers", + "following_url": "https://api.github.com/users/Olical/following{/other_user}", + "gists_url": "https://api.github.com/users/Olical/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Olical/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Olical/subscriptions", + "organizations_url": "https://api.github.com/users/Olical/orgs", + "repos_url": "https://api.github.com/users/Olical/repos", + "events_url": "https://api.github.com/users/Olical/events{/privacy}", + "received_events_url": "https://api.github.com/users/Olical/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Olical/nand2tetris", + "description": "My workings for book / project. Don't copy them for the Coursera course!", + "fork": false, + "url": "https://api.github.com/repos/Olical/nand2tetris", + "forks_url": "https://api.github.com/repos/Olical/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Olical/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Olical/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Olical/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Olical/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Olical/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Olical/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Olical/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Olical/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Olical/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Olical/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Olical/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Olical/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Olical/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Olical/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Olical/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Olical/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Olical/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Olical/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Olical/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Olical/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Olical/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Olical/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Olical/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Olical/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Olical/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Olical/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Olical/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Olical/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Olical/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Olical/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Olical/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Olical/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Olical/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Olical/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Olical/nand2tetris/deployments", + "created_at": "2015-04-18T16:55:44Z", + "updated_at": "2015-05-18T21:42:59Z", + "pushed_at": "2015-05-18T23:31:57Z", + "git_url": "git://github.com/Olical/nand2tetris.git", + "ssh_url": "git@github.com:Olical/nand2tetris.git", + "clone_url": "https://github.com/Olical/nand2tetris.git", + "svn_url": "https://github.com/Olical/nand2tetris", + "homepage": "http://nand2tetris.org/", + "size": 348, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34325471, + "name": "nand2tetris", + "full_name": "koba-z33/nand2tetris", + "owner": { + "login": "koba-z33", + "id": 11753466, + "avatar_url": "https://avatars.githubusercontent.com/u/11753466?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/koba-z33", + "html_url": "https://github.com/koba-z33", + "followers_url": "https://api.github.com/users/koba-z33/followers", + "following_url": "https://api.github.com/users/koba-z33/following{/other_user}", + "gists_url": "https://api.github.com/users/koba-z33/gists{/gist_id}", + "starred_url": "https://api.github.com/users/koba-z33/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/koba-z33/subscriptions", + "organizations_url": "https://api.github.com/users/koba-z33/orgs", + "repos_url": "https://api.github.com/users/koba-z33/repos", + "events_url": "https://api.github.com/users/koba-z33/events{/privacy}", + "received_events_url": "https://api.github.com/users/koba-z33/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/koba-z33/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/koba-z33/nand2tetris", + "forks_url": "https://api.github.com/repos/koba-z33/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/koba-z33/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/koba-z33/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/koba-z33/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/koba-z33/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/koba-z33/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/koba-z33/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/koba-z33/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/koba-z33/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/koba-z33/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/koba-z33/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/koba-z33/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/koba-z33/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/koba-z33/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/koba-z33/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/koba-z33/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/koba-z33/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/koba-z33/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/koba-z33/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/koba-z33/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/koba-z33/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/koba-z33/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/koba-z33/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/koba-z33/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/koba-z33/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/koba-z33/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/koba-z33/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/koba-z33/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/koba-z33/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/koba-z33/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/koba-z33/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/koba-z33/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/koba-z33/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/koba-z33/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/koba-z33/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/koba-z33/nand2tetris/deployments", + "created_at": "2015-04-21T12:26:42Z", + "updated_at": "2015-04-30T08:14:48Z", + "pushed_at": "2015-04-30T08:14:47Z", + "git_url": "git://github.com/koba-z33/nand2tetris.git", + "ssh_url": "git@github.com:koba-z33/nand2tetris.git", + "clone_url": "https://github.com/koba-z33/nand2tetris.git", + "svn_url": "https://github.com/koba-z33/nand2tetris", + "homepage": null, + "size": 684, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34415691, + "name": "nand2tetris", + "full_name": "boris-okun/nand2tetris", + "owner": { + "login": "boris-okun", + "id": 5842733, + "avatar_url": "https://avatars.githubusercontent.com/u/5842733?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/boris-okun", + "html_url": "https://github.com/boris-okun", + "followers_url": "https://api.github.com/users/boris-okun/followers", + "following_url": "https://api.github.com/users/boris-okun/following{/other_user}", + "gists_url": "https://api.github.com/users/boris-okun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/boris-okun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/boris-okun/subscriptions", + "organizations_url": "https://api.github.com/users/boris-okun/orgs", + "repos_url": "https://api.github.com/users/boris-okun/repos", + "events_url": "https://api.github.com/users/boris-okun/events{/privacy}", + "received_events_url": "https://api.github.com/users/boris-okun/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/boris-okun/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/boris-okun/nand2tetris", + "forks_url": "https://api.github.com/repos/boris-okun/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/boris-okun/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/boris-okun/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/boris-okun/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/boris-okun/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/boris-okun/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/boris-okun/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/boris-okun/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/boris-okun/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/boris-okun/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/boris-okun/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/boris-okun/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/boris-okun/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/boris-okun/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/boris-okun/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/boris-okun/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/boris-okun/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/boris-okun/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/boris-okun/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/boris-okun/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/boris-okun/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/boris-okun/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/boris-okun/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/boris-okun/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/boris-okun/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/boris-okun/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/boris-okun/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/boris-okun/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/boris-okun/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/boris-okun/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/boris-okun/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/boris-okun/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/boris-okun/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/boris-okun/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/boris-okun/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/boris-okun/nand2tetris/deployments", + "created_at": "2015-04-22T21:01:23Z", + "updated_at": "2015-04-24T17:05:26Z", + "pushed_at": "2015-05-31T10:11:36Z", + "git_url": "git://github.com/boris-okun/nand2tetris.git", + "ssh_url": "git@github.com:boris-okun/nand2tetris.git", + "clone_url": "https://github.com/boris-okun/nand2tetris.git", + "svn_url": "https://github.com/boris-okun/nand2tetris", + "homepage": null, + "size": 700, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34621678, + "name": "nand2tetris", + "full_name": "mymoocs/nand2tetris", + "owner": { + "login": "mymoocs", + "id": 10682384, + "avatar_url": "https://avatars.githubusercontent.com/u/10682384?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mymoocs", + "html_url": "https://github.com/mymoocs", + "followers_url": "https://api.github.com/users/mymoocs/followers", + "following_url": "https://api.github.com/users/mymoocs/following{/other_user}", + "gists_url": "https://api.github.com/users/mymoocs/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mymoocs/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mymoocs/subscriptions", + "organizations_url": "https://api.github.com/users/mymoocs/orgs", + "repos_url": "https://api.github.com/users/mymoocs/repos", + "events_url": "https://api.github.com/users/mymoocs/events{/privacy}", + "received_events_url": "https://api.github.com/users/mymoocs/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mymoocs/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/mymoocs/nand2tetris", + "forks_url": "https://api.github.com/repos/mymoocs/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mymoocs/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mymoocs/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mymoocs/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mymoocs/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mymoocs/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mymoocs/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mymoocs/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mymoocs/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mymoocs/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mymoocs/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mymoocs/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mymoocs/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mymoocs/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mymoocs/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mymoocs/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mymoocs/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mymoocs/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mymoocs/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mymoocs/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mymoocs/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mymoocs/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mymoocs/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mymoocs/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mymoocs/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mymoocs/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mymoocs/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mymoocs/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mymoocs/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mymoocs/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mymoocs/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mymoocs/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mymoocs/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mymoocs/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mymoocs/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mymoocs/nand2tetris/deployments", + "created_at": "2015-04-26T17:04:44Z", + "updated_at": "2015-05-08T17:07:06Z", + "pushed_at": "2015-05-08T17:07:06Z", + "git_url": "git://github.com/mymoocs/nand2tetris.git", + "ssh_url": "git@github.com:mymoocs/nand2tetris.git", + "clone_url": "https://github.com/mymoocs/nand2tetris.git", + "svn_url": "https://github.com/mymoocs/nand2tetris", + "homepage": null, + "size": 792, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34955667, + "name": "nand2tetris", + "full_name": "radavis/nand2tetris", + "owner": { + "login": "radavis", + "id": 1299034, + "avatar_url": "https://avatars.githubusercontent.com/u/1299034?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/radavis", + "html_url": "https://github.com/radavis", + "followers_url": "https://api.github.com/users/radavis/followers", + "following_url": "https://api.github.com/users/radavis/following{/other_user}", + "gists_url": "https://api.github.com/users/radavis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/radavis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/radavis/subscriptions", + "organizations_url": "https://api.github.com/users/radavis/orgs", + "repos_url": "https://api.github.com/users/radavis/repos", + "events_url": "https://api.github.com/users/radavis/events{/privacy}", + "received_events_url": "https://api.github.com/users/radavis/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/radavis/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/radavis/nand2tetris", + "forks_url": "https://api.github.com/repos/radavis/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/radavis/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/radavis/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/radavis/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/radavis/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/radavis/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/radavis/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/radavis/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/radavis/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/radavis/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/radavis/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/radavis/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/radavis/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/radavis/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/radavis/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/radavis/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/radavis/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/radavis/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/radavis/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/radavis/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/radavis/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/radavis/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/radavis/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/radavis/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/radavis/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/radavis/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/radavis/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/radavis/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/radavis/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/radavis/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/radavis/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/radavis/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/radavis/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/radavis/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/radavis/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/radavis/nand2tetris/deployments", + "created_at": "2015-05-02T16:50:34Z", + "updated_at": "2015-05-04T17:01:23Z", + "pushed_at": "2015-05-16T19:13:35Z", + "git_url": "git://github.com/radavis/nand2tetris.git", + "ssh_url": "git@github.com:radavis/nand2tetris.git", + "clone_url": "https://github.com/radavis/nand2tetris.git", + "svn_url": "https://github.com/radavis/nand2tetris", + "homepage": null, + "size": 1740, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 35306785, + "name": "nand2tetris", + "full_name": "leonelfreire/nand2tetris", + "owner": { + "login": "leonelfreire", + "id": 14333, + "avatar_url": "https://avatars.githubusercontent.com/u/14333?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/leonelfreire", + "html_url": "https://github.com/leonelfreire", + "followers_url": "https://api.github.com/users/leonelfreire/followers", + "following_url": "https://api.github.com/users/leonelfreire/following{/other_user}", + "gists_url": "https://api.github.com/users/leonelfreire/gists{/gist_id}", + "starred_url": "https://api.github.com/users/leonelfreire/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/leonelfreire/subscriptions", + "organizations_url": "https://api.github.com/users/leonelfreire/orgs", + "repos_url": "https://api.github.com/users/leonelfreire/repos", + "events_url": "https://api.github.com/users/leonelfreire/events{/privacy}", + "received_events_url": "https://api.github.com/users/leonelfreire/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/leonelfreire/nand2tetris", + "description": "Solutions for projects found in the course: http://nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/leonelfreire/nand2tetris", + "forks_url": "https://api.github.com/repos/leonelfreire/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/leonelfreire/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/leonelfreire/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/leonelfreire/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/leonelfreire/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/leonelfreire/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/leonelfreire/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/leonelfreire/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/leonelfreire/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/leonelfreire/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/leonelfreire/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/leonelfreire/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/leonelfreire/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/leonelfreire/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/leonelfreire/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/leonelfreire/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/leonelfreire/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/leonelfreire/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/leonelfreire/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/leonelfreire/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/leonelfreire/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/leonelfreire/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/leonelfreire/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/leonelfreire/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/leonelfreire/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/leonelfreire/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/leonelfreire/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/leonelfreire/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/leonelfreire/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/leonelfreire/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/leonelfreire/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/leonelfreire/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/leonelfreire/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/leonelfreire/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/leonelfreire/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/leonelfreire/nand2tetris/deployments", + "created_at": "2015-05-08T23:28:55Z", + "updated_at": "2015-05-29T23:38:28Z", + "pushed_at": "2015-05-29T23:40:15Z", + "git_url": "git://github.com/leonelfreire/nand2tetris.git", + "ssh_url": "git@github.com:leonelfreire/nand2tetris.git", + "clone_url": "https://github.com/leonelfreire/nand2tetris.git", + "svn_url": "https://github.com/leonelfreire/nand2tetris", + "homepage": "", + "size": 236, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 33475896, + "name": "nand2tetris", + "full_name": "yamanetoshi/nand2tetris", + "owner": { + "login": "yamanetoshi", + "id": 10039, + "avatar_url": "https://avatars.githubusercontent.com/u/10039?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yamanetoshi", + "html_url": "https://github.com/yamanetoshi", + "followers_url": "https://api.github.com/users/yamanetoshi/followers", + "following_url": "https://api.github.com/users/yamanetoshi/following{/other_user}", + "gists_url": "https://api.github.com/users/yamanetoshi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yamanetoshi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yamanetoshi/subscriptions", + "organizations_url": "https://api.github.com/users/yamanetoshi/orgs", + "repos_url": "https://api.github.com/users/yamanetoshi/repos", + "events_url": "https://api.github.com/users/yamanetoshi/events{/privacy}", + "received_events_url": "https://api.github.com/users/yamanetoshi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yamanetoshi/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/yamanetoshi/nand2tetris", + "forks_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yamanetoshi/nand2tetris/deployments", + "created_at": "2015-04-06T09:54:40Z", + "updated_at": "2015-04-09T12:33:37Z", + "pushed_at": "2015-04-09T12:33:35Z", + "git_url": "git://github.com/yamanetoshi/nand2tetris.git", + "ssh_url": "git@github.com:yamanetoshi/nand2tetris.git", + "clone_url": "https://github.com/yamanetoshi/nand2tetris.git", + "svn_url": "https://github.com/yamanetoshi/nand2tetris", + "homepage": null, + "size": 312, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 33715271, + "name": "nand2tetris", + "full_name": "mishelle123/nand2tetris", + "owner": { + "login": "mishelle123", + "id": 11874650, + "avatar_url": "https://avatars.githubusercontent.com/u/11874650?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mishelle123", + "html_url": "https://github.com/mishelle123", + "followers_url": "https://api.github.com/users/mishelle123/followers", + "following_url": "https://api.github.com/users/mishelle123/following{/other_user}", + "gists_url": "https://api.github.com/users/mishelle123/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mishelle123/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mishelle123/subscriptions", + "organizations_url": "https://api.github.com/users/mishelle123/orgs", + "repos_url": "https://api.github.com/users/mishelle123/repos", + "events_url": "https://api.github.com/users/mishelle123/events{/privacy}", + "received_events_url": "https://api.github.com/users/mishelle123/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mishelle123/nand2tetris", + "description": "written in hdl, asm, python", + "fork": false, + "url": "https://api.github.com/repos/mishelle123/nand2tetris", + "forks_url": "https://api.github.com/repos/mishelle123/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mishelle123/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mishelle123/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mishelle123/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mishelle123/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mishelle123/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mishelle123/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mishelle123/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mishelle123/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mishelle123/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mishelle123/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mishelle123/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mishelle123/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mishelle123/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mishelle123/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mishelle123/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mishelle123/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mishelle123/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mishelle123/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mishelle123/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mishelle123/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mishelle123/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mishelle123/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mishelle123/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mishelle123/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mishelle123/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mishelle123/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mishelle123/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mishelle123/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mishelle123/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mishelle123/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mishelle123/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mishelle123/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mishelle123/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mishelle123/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mishelle123/nand2tetris/deployments", + "created_at": "2015-04-10T07:39:43Z", + "updated_at": "2015-04-21T16:47:36Z", + "pushed_at": "2015-04-21T16:47:35Z", + "git_url": "git://github.com/mishelle123/nand2tetris.git", + "ssh_url": "git@github.com:mishelle123/nand2tetris.git", + "clone_url": "https://github.com/mishelle123/nand2tetris.git", + "svn_url": "https://github.com/mishelle123/nand2tetris", + "homepage": null, + "size": 720, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 33796230, + "name": "Nand2Tetris", + "full_name": "wuzixiao/Nand2Tetris", + "owner": { + "login": "wuzixiao", + "id": 802238, + "avatar_url": "https://avatars.githubusercontent.com/u/802238?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wuzixiao", + "html_url": "https://github.com/wuzixiao", + "followers_url": "https://api.github.com/users/wuzixiao/followers", + "following_url": "https://api.github.com/users/wuzixiao/following{/other_user}", + "gists_url": "https://api.github.com/users/wuzixiao/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wuzixiao/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wuzixiao/subscriptions", + "organizations_url": "https://api.github.com/users/wuzixiao/orgs", + "repos_url": "https://api.github.com/users/wuzixiao/repos", + "events_url": "https://api.github.com/users/wuzixiao/events{/privacy}", + "received_events_url": "https://api.github.com/users/wuzixiao/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wuzixiao/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/wuzixiao/Nand2Tetris", + "forks_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/wuzixiao/Nand2Tetris/deployments", + "created_at": "2015-04-11T23:26:39Z", + "updated_at": "2015-05-03T09:55:04Z", + "pushed_at": "2015-05-03T09:55:03Z", + "git_url": "git://github.com/wuzixiao/Nand2Tetris.git", + "ssh_url": "git@github.com:wuzixiao/Nand2Tetris.git", + "clone_url": "https://github.com/wuzixiao/Nand2Tetris.git", + "svn_url": "https://github.com/wuzixiao/Nand2Tetris", + "homepage": null, + "size": 444, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 29904036, + "name": "nand2tetris", + "full_name": "vboginskey/nand2tetris", + "owner": { + "login": "vboginskey", + "id": 6887135, + "avatar_url": "https://avatars.githubusercontent.com/u/6887135?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vboginskey", + "html_url": "https://github.com/vboginskey", + "followers_url": "https://api.github.com/users/vboginskey/followers", + "following_url": "https://api.github.com/users/vboginskey/following{/other_user}", + "gists_url": "https://api.github.com/users/vboginskey/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vboginskey/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vboginskey/subscriptions", + "organizations_url": "https://api.github.com/users/vboginskey/orgs", + "repos_url": "https://api.github.com/users/vboginskey/repos", + "events_url": "https://api.github.com/users/vboginskey/events{/privacy}", + "received_events_url": "https://api.github.com/users/vboginskey/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/vboginskey/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/vboginskey/nand2tetris", + "forks_url": "https://api.github.com/repos/vboginskey/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/vboginskey/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vboginskey/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vboginskey/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/vboginskey/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/vboginskey/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/vboginskey/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/vboginskey/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/vboginskey/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/vboginskey/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/vboginskey/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vboginskey/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vboginskey/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vboginskey/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vboginskey/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vboginskey/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/vboginskey/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/vboginskey/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/vboginskey/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/vboginskey/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/vboginskey/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vboginskey/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vboginskey/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vboginskey/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vboginskey/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/vboginskey/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vboginskey/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/vboginskey/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vboginskey/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/vboginskey/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/vboginskey/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vboginskey/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vboginskey/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vboginskey/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/vboginskey/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/vboginskey/nand2tetris/deployments", + "created_at": "2015-01-27T08:12:08Z", + "updated_at": "2015-02-19T21:59:43Z", + "pushed_at": "2015-02-19T21:59:42Z", + "git_url": "git://github.com/vboginskey/nand2tetris.git", + "ssh_url": "git@github.com:vboginskey/nand2tetris.git", + "clone_url": "https://github.com/vboginskey/nand2tetris.git", + "svn_url": "https://github.com/vboginskey/nand2tetris", + "homepage": null, + "size": 308, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 43568012, + "name": "nand2tetris", + "full_name": "slackboxster/nand2tetris", + "owner": { + "login": "slackboxster", + "id": 1282780, + "avatar_url": "https://avatars.githubusercontent.com/u/1282780?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/slackboxster", + "html_url": "https://github.com/slackboxster", + "followers_url": "https://api.github.com/users/slackboxster/followers", + "following_url": "https://api.github.com/users/slackboxster/following{/other_user}", + "gists_url": "https://api.github.com/users/slackboxster/gists{/gist_id}", + "starred_url": "https://api.github.com/users/slackboxster/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/slackboxster/subscriptions", + "organizations_url": "https://api.github.com/users/slackboxster/orgs", + "repos_url": "https://api.github.com/users/slackboxster/repos", + "events_url": "https://api.github.com/users/slackboxster/events{/privacy}", + "received_events_url": "https://api.github.com/users/slackboxster/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/slackboxster/nand2tetris", + "description": "My work on the nand2tetris project", + "fork": false, + "url": "https://api.github.com/repos/slackboxster/nand2tetris", + "forks_url": "https://api.github.com/repos/slackboxster/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/slackboxster/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/slackboxster/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/slackboxster/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/slackboxster/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/slackboxster/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/slackboxster/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/slackboxster/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/slackboxster/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/slackboxster/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/slackboxster/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/slackboxster/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/slackboxster/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/slackboxster/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/slackboxster/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/slackboxster/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/slackboxster/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/slackboxster/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/slackboxster/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/slackboxster/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/slackboxster/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/slackboxster/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/slackboxster/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/slackboxster/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/slackboxster/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/slackboxster/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/slackboxster/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/slackboxster/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/slackboxster/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/slackboxster/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/slackboxster/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/slackboxster/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/slackboxster/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/slackboxster/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/slackboxster/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/slackboxster/nand2tetris/deployments", + "created_at": "2015-10-02T18:00:56Z", + "updated_at": "2015-10-02T18:01:25Z", + "pushed_at": "2015-10-02T20:24:03Z", + "git_url": "git://github.com/slackboxster/nand2tetris.git", + "ssh_url": "git@github.com:slackboxster/nand2tetris.git", + "clone_url": "https://github.com/slackboxster/nand2tetris.git", + "svn_url": "https://github.com/slackboxster/nand2tetris", + "homepage": null, + "size": 332, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 42061569, + "name": "nand2tetris", + "full_name": "cristianiorga/nand2tetris", + "owner": { + "login": "cristianiorga", + "id": 9863741, + "avatar_url": "https://avatars.githubusercontent.com/u/9863741?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cristianiorga", + "html_url": "https://github.com/cristianiorga", + "followers_url": "https://api.github.com/users/cristianiorga/followers", + "following_url": "https://api.github.com/users/cristianiorga/following{/other_user}", + "gists_url": "https://api.github.com/users/cristianiorga/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cristianiorga/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cristianiorga/subscriptions", + "organizations_url": "https://api.github.com/users/cristianiorga/orgs", + "repos_url": "https://api.github.com/users/cristianiorga/repos", + "events_url": "https://api.github.com/users/cristianiorga/events{/privacy}", + "received_events_url": "https://api.github.com/users/cristianiorga/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cristianiorga/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/cristianiorga/nand2tetris", + "forks_url": "https://api.github.com/repos/cristianiorga/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/cristianiorga/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cristianiorga/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cristianiorga/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/cristianiorga/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/cristianiorga/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/cristianiorga/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/cristianiorga/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/cristianiorga/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/cristianiorga/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/cristianiorga/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cristianiorga/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cristianiorga/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cristianiorga/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cristianiorga/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cristianiorga/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/cristianiorga/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/cristianiorga/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/cristianiorga/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/cristianiorga/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/cristianiorga/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cristianiorga/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cristianiorga/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cristianiorga/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cristianiorga/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/cristianiorga/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cristianiorga/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/cristianiorga/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cristianiorga/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/cristianiorga/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/cristianiorga/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cristianiorga/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cristianiorga/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cristianiorga/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/cristianiorga/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/cristianiorga/nand2tetris/deployments", + "created_at": "2015-09-07T15:49:02Z", + "updated_at": "2015-09-07T16:00:10Z", + "pushed_at": "2015-09-10T20:31:19Z", + "git_url": "git://github.com/cristianiorga/nand2tetris.git", + "ssh_url": "git@github.com:cristianiorga/nand2tetris.git", + "clone_url": "https://github.com/cristianiorga/nand2tetris.git", + "svn_url": "https://github.com/cristianiorga/nand2tetris", + "homepage": null, + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 50258720, + "name": "nand2tetris", + "full_name": "pcarlisle/nand2tetris", + "owner": { + "login": "pcarlisle", + "id": 1234752, + "avatar_url": "https://avatars.githubusercontent.com/u/1234752?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pcarlisle", + "html_url": "https://github.com/pcarlisle", + "followers_url": "https://api.github.com/users/pcarlisle/followers", + "following_url": "https://api.github.com/users/pcarlisle/following{/other_user}", + "gists_url": "https://api.github.com/users/pcarlisle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pcarlisle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pcarlisle/subscriptions", + "organizations_url": "https://api.github.com/users/pcarlisle/orgs", + "repos_url": "https://api.github.com/users/pcarlisle/repos", + "events_url": "https://api.github.com/users/pcarlisle/events{/privacy}", + "received_events_url": "https://api.github.com/users/pcarlisle/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/pcarlisle/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/pcarlisle/nand2tetris", + "forks_url": "https://api.github.com/repos/pcarlisle/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/pcarlisle/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pcarlisle/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pcarlisle/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/pcarlisle/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/pcarlisle/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/pcarlisle/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/pcarlisle/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/pcarlisle/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/pcarlisle/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/pcarlisle/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pcarlisle/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pcarlisle/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pcarlisle/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pcarlisle/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pcarlisle/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/pcarlisle/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/pcarlisle/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/pcarlisle/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/pcarlisle/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/pcarlisle/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pcarlisle/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pcarlisle/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pcarlisle/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pcarlisle/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/pcarlisle/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pcarlisle/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/pcarlisle/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pcarlisle/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/pcarlisle/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/pcarlisle/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pcarlisle/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pcarlisle/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pcarlisle/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/pcarlisle/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/pcarlisle/nand2tetris/deployments", + "created_at": "2016-01-23T21:12:31Z", + "updated_at": "2016-01-23T21:12:49Z", + "pushed_at": "2016-01-23T23:52:18Z", + "git_url": "git://github.com/pcarlisle/nand2tetris.git", + "ssh_url": "git@github.com:pcarlisle/nand2tetris.git", + "clone_url": "https://github.com/pcarlisle/nand2tetris.git", + "svn_url": "https://github.com/pcarlisle/nand2tetris", + "homepage": null, + "size": 156, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 50887638, + "name": "nand2tetris", + "full_name": "uiureo/nand2tetris", + "owner": { + "login": "uiureo", + "id": 116057, + "avatar_url": "https://avatars.githubusercontent.com/u/116057?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/uiureo", + "html_url": "https://github.com/uiureo", + "followers_url": "https://api.github.com/users/uiureo/followers", + "following_url": "https://api.github.com/users/uiureo/following{/other_user}", + "gists_url": "https://api.github.com/users/uiureo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/uiureo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/uiureo/subscriptions", + "organizations_url": "https://api.github.com/users/uiureo/orgs", + "repos_url": "https://api.github.com/users/uiureo/repos", + "events_url": "https://api.github.com/users/uiureo/events{/privacy}", + "received_events_url": "https://api.github.com/users/uiureo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/uiureo/nand2tetris", + "description": "My code for nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/uiureo/nand2tetris", + "forks_url": "https://api.github.com/repos/uiureo/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/uiureo/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/uiureo/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/uiureo/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/uiureo/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/uiureo/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/uiureo/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/uiureo/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/uiureo/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/uiureo/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/uiureo/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/uiureo/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/uiureo/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/uiureo/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/uiureo/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/uiureo/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/uiureo/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/uiureo/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/uiureo/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/uiureo/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/uiureo/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/uiureo/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/uiureo/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/uiureo/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/uiureo/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/uiureo/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/uiureo/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/uiureo/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/uiureo/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/uiureo/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/uiureo/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/uiureo/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/uiureo/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/uiureo/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/uiureo/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/uiureo/nand2tetris/deployments", + "created_at": "2016-02-02T02:20:46Z", + "updated_at": "2016-02-07T13:14:25Z", + "pushed_at": "2016-02-17T01:33:58Z", + "git_url": "git://github.com/uiureo/nand2tetris.git", + "ssh_url": "git@github.com:uiureo/nand2tetris.git", + "clone_url": "https://github.com/uiureo/nand2tetris.git", + "svn_url": "https://github.com/uiureo/nand2tetris", + "homepage": "", + "size": 15, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 51442346, + "name": "nand2tetris", + "full_name": "mauriciv/nand2tetris", + "owner": { + "login": "mauriciv", + "id": 12043163, + "avatar_url": "https://avatars.githubusercontent.com/u/12043163?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mauriciv", + "html_url": "https://github.com/mauriciv", + "followers_url": "https://api.github.com/users/mauriciv/followers", + "following_url": "https://api.github.com/users/mauriciv/following{/other_user}", + "gists_url": "https://api.github.com/users/mauriciv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mauriciv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mauriciv/subscriptions", + "organizations_url": "https://api.github.com/users/mauriciv/orgs", + "repos_url": "https://api.github.com/users/mauriciv/repos", + "events_url": "https://api.github.com/users/mauriciv/events{/privacy}", + "received_events_url": "https://api.github.com/users/mauriciv/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mauriciv/nand2tetris", + "description": "Mi implementacion de el curso nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/mauriciv/nand2tetris", + "forks_url": "https://api.github.com/repos/mauriciv/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mauriciv/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mauriciv/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mauriciv/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mauriciv/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mauriciv/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mauriciv/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mauriciv/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mauriciv/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mauriciv/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mauriciv/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mauriciv/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mauriciv/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mauriciv/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mauriciv/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mauriciv/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mauriciv/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mauriciv/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mauriciv/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mauriciv/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mauriciv/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mauriciv/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mauriciv/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mauriciv/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mauriciv/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mauriciv/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mauriciv/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mauriciv/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mauriciv/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mauriciv/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mauriciv/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mauriciv/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mauriciv/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mauriciv/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mauriciv/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mauriciv/nand2tetris/deployments", + "created_at": "2016-02-10T13:23:08Z", + "updated_at": "2016-02-10T13:32:02Z", + "pushed_at": "2016-02-17T02:07:08Z", + "git_url": "git://github.com/mauriciv/nand2tetris.git", + "ssh_url": "git@github.com:mauriciv/nand2tetris.git", + "clone_url": "https://github.com/mauriciv/nand2tetris.git", + "svn_url": "https://github.com/mauriciv/nand2tetris", + "homepage": null, + "size": 537, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 46690211, + "name": "nand_to_tetris", + "full_name": "kokrange/nand_to_tetris", + "owner": { + "login": "kokrange", + "id": 4329893, + "avatar_url": "https://avatars.githubusercontent.com/u/4329893?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kokrange", + "html_url": "https://github.com/kokrange", + "followers_url": "https://api.github.com/users/kokrange/followers", + "following_url": "https://api.github.com/users/kokrange/following{/other_user}", + "gists_url": "https://api.github.com/users/kokrange/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kokrange/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kokrange/subscriptions", + "organizations_url": "https://api.github.com/users/kokrange/orgs", + "repos_url": "https://api.github.com/users/kokrange/repos", + "events_url": "https://api.github.com/users/kokrange/events{/privacy}", + "received_events_url": "https://api.github.com/users/kokrange/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kokrange/nand_to_tetris", + "description": "build a computer step by step from level zero", + "fork": false, + "url": "https://api.github.com/repos/kokrange/nand_to_tetris", + "forks_url": "https://api.github.com/repos/kokrange/nand_to_tetris/forks", + "keys_url": "https://api.github.com/repos/kokrange/nand_to_tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kokrange/nand_to_tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kokrange/nand_to_tetris/teams", + "hooks_url": "https://api.github.com/repos/kokrange/nand_to_tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kokrange/nand_to_tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kokrange/nand_to_tetris/events", + "assignees_url": "https://api.github.com/repos/kokrange/nand_to_tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kokrange/nand_to_tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kokrange/nand_to_tetris/tags", + "blobs_url": "https://api.github.com/repos/kokrange/nand_to_tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kokrange/nand_to_tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kokrange/nand_to_tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kokrange/nand_to_tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kokrange/nand_to_tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kokrange/nand_to_tetris/languages", + "stargazers_url": "https://api.github.com/repos/kokrange/nand_to_tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kokrange/nand_to_tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kokrange/nand_to_tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kokrange/nand_to_tetris/subscription", + "commits_url": "https://api.github.com/repos/kokrange/nand_to_tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kokrange/nand_to_tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kokrange/nand_to_tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kokrange/nand_to_tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kokrange/nand_to_tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kokrange/nand_to_tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kokrange/nand_to_tetris/merges", + "archive_url": "https://api.github.com/repos/kokrange/nand_to_tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kokrange/nand_to_tetris/downloads", + "issues_url": "https://api.github.com/repos/kokrange/nand_to_tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kokrange/nand_to_tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kokrange/nand_to_tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kokrange/nand_to_tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kokrange/nand_to_tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kokrange/nand_to_tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kokrange/nand_to_tetris/deployments", + "created_at": "2015-11-23T01:45:23Z", + "updated_at": "2015-11-23T01:51:37Z", + "pushed_at": "2015-11-23T01:51:33Z", + "git_url": "git://github.com/kokrange/nand_to_tetris.git", + "ssh_url": "git@github.com:kokrange/nand_to_tetris.git", + "clone_url": "https://github.com/kokrange/nand_to_tetris.git", + "svn_url": "https://github.com/kokrange/nand_to_tetris", + "homepage": null, + "size": 10851, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 33786820, + "name": "Nand2Tetris", + "full_name": "jth0mass0n/Nand2Tetris", + "owner": { + "login": "jth0mass0n", + "id": 200477, + "avatar_url": "https://avatars.githubusercontent.com/u/200477?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jth0mass0n", + "html_url": "https://github.com/jth0mass0n", + "followers_url": "https://api.github.com/users/jth0mass0n/followers", + "following_url": "https://api.github.com/users/jth0mass0n/following{/other_user}", + "gists_url": "https://api.github.com/users/jth0mass0n/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jth0mass0n/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jth0mass0n/subscriptions", + "organizations_url": "https://api.github.com/users/jth0mass0n/orgs", + "repos_url": "https://api.github.com/users/jth0mass0n/repos", + "events_url": "https://api.github.com/users/jth0mass0n/events{/privacy}", + "received_events_url": "https://api.github.com/users/jth0mass0n/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jth0mass0n/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris", + "forks_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jth0mass0n/Nand2Tetris/deployments", + "created_at": "2015-04-11T18:16:00Z", + "updated_at": "2015-04-11T18:16:28Z", + "pushed_at": "2015-12-05T22:42:53Z", + "git_url": "git://github.com/jth0mass0n/Nand2Tetris.git", + "ssh_url": "git@github.com:jth0mass0n/Nand2Tetris.git", + "clone_url": "https://github.com/jth0mass0n/Nand2Tetris.git", + "svn_url": "https://github.com/jth0mass0n/Nand2Tetris", + "homepage": null, + "size": 548, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 48705377, + "name": "Nand2Tetris", + "full_name": "ltsimps/Nand2Tetris", + "owner": { + "login": "ltsimps", + "id": 5578953, + "avatar_url": "https://avatars.githubusercontent.com/u/5578953?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ltsimps", + "html_url": "https://github.com/ltsimps", + "followers_url": "https://api.github.com/users/ltsimps/followers", + "following_url": "https://api.github.com/users/ltsimps/following{/other_user}", + "gists_url": "https://api.github.com/users/ltsimps/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ltsimps/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ltsimps/subscriptions", + "organizations_url": "https://api.github.com/users/ltsimps/orgs", + "repos_url": "https://api.github.com/users/ltsimps/repos", + "events_url": "https://api.github.com/users/ltsimps/events{/privacy}", + "received_events_url": "https://api.github.com/users/ltsimps/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ltsimps/Nand2Tetris", + "description": "Mooc Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/ltsimps/Nand2Tetris", + "forks_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ltsimps/Nand2Tetris/deployments", + "created_at": "2015-12-28T18:02:03Z", + "updated_at": "2015-12-28T18:40:38Z", + "pushed_at": "2015-12-28T18:44:15Z", + "git_url": "git://github.com/ltsimps/Nand2Tetris.git", + "ssh_url": "git@github.com:ltsimps/Nand2Tetris.git", + "clone_url": "https://github.com/ltsimps/Nand2Tetris.git", + "svn_url": "https://github.com/ltsimps/Nand2Tetris", + "homepage": null, + "size": 505, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 34175504, + "name": "nand2tetris", + "full_name": "netskink/nand2tetris", + "owner": { + "login": "netskink", + "id": 4422172, + "avatar_url": "https://avatars.githubusercontent.com/u/4422172?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/netskink", + "html_url": "https://github.com/netskink", + "followers_url": "https://api.github.com/users/netskink/followers", + "following_url": "https://api.github.com/users/netskink/following{/other_user}", + "gists_url": "https://api.github.com/users/netskink/gists{/gist_id}", + "starred_url": "https://api.github.com/users/netskink/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/netskink/subscriptions", + "organizations_url": "https://api.github.com/users/netskink/orgs", + "repos_url": "https://api.github.com/users/netskink/repos", + "events_url": "https://api.github.com/users/netskink/events{/privacy}", + "received_events_url": "https://api.github.com/users/netskink/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/netskink/nand2tetris", + "description": "My code for the coursera class", + "fork": false, + "url": "https://api.github.com/repos/netskink/nand2tetris", + "forks_url": "https://api.github.com/repos/netskink/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/netskink/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/netskink/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/netskink/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/netskink/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/netskink/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/netskink/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/netskink/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/netskink/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/netskink/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/netskink/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/netskink/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/netskink/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/netskink/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/netskink/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/netskink/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/netskink/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/netskink/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/netskink/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/netskink/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/netskink/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/netskink/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/netskink/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/netskink/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/netskink/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/netskink/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/netskink/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/netskink/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/netskink/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/netskink/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/netskink/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/netskink/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/netskink/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/netskink/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/netskink/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/netskink/nand2tetris/deployments", + "created_at": "2015-04-18T17:31:32Z", + "updated_at": "2016-02-02T15:06:58Z", + "pushed_at": "2015-05-10T01:10:12Z", + "git_url": "git://github.com/netskink/nand2tetris.git", + "ssh_url": "git@github.com:netskink/nand2tetris.git", + "clone_url": "https://github.com/netskink/nand2tetris.git", + "svn_url": "https://github.com/netskink/nand2tetris", + "homepage": null, + "size": 328, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 45062116, + "name": "nand2tetris", + "full_name": "ryanvaneck/nand2tetris", + "owner": { + "login": "ryanvaneck", + "id": 4763985, + "avatar_url": "https://avatars.githubusercontent.com/u/4763985?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ryanvaneck", + "html_url": "https://github.com/ryanvaneck", + "followers_url": "https://api.github.com/users/ryanvaneck/followers", + "following_url": "https://api.github.com/users/ryanvaneck/following{/other_user}", + "gists_url": "https://api.github.com/users/ryanvaneck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ryanvaneck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ryanvaneck/subscriptions", + "organizations_url": "https://api.github.com/users/ryanvaneck/orgs", + "repos_url": "https://api.github.com/users/ryanvaneck/repos", + "events_url": "https://api.github.com/users/ryanvaneck/events{/privacy}", + "received_events_url": "https://api.github.com/users/ryanvaneck/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ryanvaneck/nand2tetris", + "description": "I am working through the book \"The Elements of Computing Systems, Building a Modern Computer from First Principles\" aka nand2tetris. From logic gates to boolean logic to machine language, assembly, a virtual machine, a high-level language and compiler, and an operating system. ", + "fork": false, + "url": "https://api.github.com/repos/ryanvaneck/nand2tetris", + "forks_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ryanvaneck/nand2tetris/deployments", + "created_at": "2015-10-27T18:40:23Z", + "updated_at": "2016-02-05T15:04:35Z", + "pushed_at": "2015-12-18T21:59:46Z", + "git_url": "git://github.com/ryanvaneck/nand2tetris.git", + "ssh_url": "git@github.com:ryanvaneck/nand2tetris.git", + "clone_url": "https://github.com/ryanvaneck/nand2tetris.git", + "svn_url": "https://github.com/ryanvaneck/nand2tetris", + "homepage": "", + "size": 206, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 39622339, + "name": "nand2tetris", + "full_name": "zhuyoujun/nand2tetris", + "owner": { + "login": "zhuyoujun", + "id": 9513362, + "avatar_url": "https://avatars.githubusercontent.com/u/9513362?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/zhuyoujun", + "html_url": "https://github.com/zhuyoujun", + "followers_url": "https://api.github.com/users/zhuyoujun/followers", + "following_url": "https://api.github.com/users/zhuyoujun/following{/other_user}", + "gists_url": "https://api.github.com/users/zhuyoujun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zhuyoujun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zhuyoujun/subscriptions", + "organizations_url": "https://api.github.com/users/zhuyoujun/orgs", + "repos_url": "https://api.github.com/users/zhuyoujun/repos", + "events_url": "https://api.github.com/users/zhuyoujun/events{/privacy}", + "received_events_url": "https://api.github.com/users/zhuyoujun/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/zhuyoujun/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/zhuyoujun/nand2tetris", + "forks_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/zhuyoujun/nand2tetris/deployments", + "created_at": "2015-07-24T09:04:30Z", + "updated_at": "2016-02-03T05:57:56Z", + "pushed_at": "2016-02-03T05:57:55Z", + "git_url": "git://github.com/zhuyoujun/nand2tetris.git", + "ssh_url": "git@github.com:zhuyoujun/nand2tetris.git", + "clone_url": "https://github.com/zhuyoujun/nand2tetris.git", + "svn_url": "https://github.com/zhuyoujun/nand2tetris", + "homepage": null, + "size": 517, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 52140575, + "name": "NAND2TETRIS", + "full_name": "Jiang333/NAND2TETRIS", + "owner": { + "login": "Jiang333", + "id": 8582186, + "avatar_url": "https://avatars.githubusercontent.com/u/8582186?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Jiang333", + "html_url": "https://github.com/Jiang333", + "followers_url": "https://api.github.com/users/Jiang333/followers", + "following_url": "https://api.github.com/users/Jiang333/following{/other_user}", + "gists_url": "https://api.github.com/users/Jiang333/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Jiang333/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Jiang333/subscriptions", + "organizations_url": "https://api.github.com/users/Jiang333/orgs", + "repos_url": "https://api.github.com/users/Jiang333/repos", + "events_url": "https://api.github.com/users/Jiang333/events{/privacy}", + "received_events_url": "https://api.github.com/users/Jiang333/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Jiang333/NAND2TETRIS", + "description": "Work done on Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/Jiang333/NAND2TETRIS", + "forks_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/forks", + "keys_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/teams", + "hooks_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/hooks", + "issue_events_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/issues/events{/number}", + "events_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/events", + "assignees_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/assignees{/user}", + "branches_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/branches{/branch}", + "tags_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/tags", + "blobs_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/languages", + "stargazers_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/stargazers", + "contributors_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/contributors", + "subscribers_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/subscribers", + "subscription_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/subscription", + "commits_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/contents/{+path}", + "compare_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/merges", + "archive_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/downloads", + "issues_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/issues{/number}", + "pulls_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/labels{/name}", + "releases_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/releases{/id}", + "deployments_url": "https://api.github.com/repos/Jiang333/NAND2TETRIS/deployments", + "created_at": "2016-02-20T06:38:29Z", + "updated_at": "2016-02-20T06:49:38Z", + "pushed_at": "2016-02-20T06:51:29Z", + "git_url": "git://github.com/Jiang333/NAND2TETRIS.git", + "ssh_url": "git@github.com:Jiang333/NAND2TETRIS.git", + "clone_url": "https://github.com/Jiang333/NAND2TETRIS.git", + "svn_url": "https://github.com/Jiang333/NAND2TETRIS", + "homepage": null, + "size": 541, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 38657992, + "name": "Nand2Tetris", + "full_name": "Korinek/Nand2Tetris", + "owner": { + "login": "Korinek", + "id": 1657649, + "avatar_url": "https://avatars.githubusercontent.com/u/1657649?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Korinek", + "html_url": "https://github.com/Korinek", + "followers_url": "https://api.github.com/users/Korinek/followers", + "following_url": "https://api.github.com/users/Korinek/following{/other_user}", + "gists_url": "https://api.github.com/users/Korinek/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Korinek/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Korinek/subscriptions", + "organizations_url": "https://api.github.com/users/Korinek/orgs", + "repos_url": "https://api.github.com/users/Korinek/repos", + "events_url": "https://api.github.com/users/Korinek/events{/privacy}", + "received_events_url": "https://api.github.com/users/Korinek/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Korinek/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Korinek/Nand2Tetris", + "forks_url": "https://api.github.com/repos/Korinek/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/Korinek/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Korinek/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Korinek/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/Korinek/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Korinek/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Korinek/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/Korinek/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Korinek/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Korinek/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/Korinek/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Korinek/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Korinek/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Korinek/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Korinek/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Korinek/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Korinek/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Korinek/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Korinek/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Korinek/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/Korinek/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Korinek/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Korinek/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Korinek/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Korinek/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Korinek/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Korinek/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/Korinek/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Korinek/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/Korinek/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Korinek/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Korinek/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Korinek/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Korinek/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Korinek/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Korinek/Nand2Tetris/deployments", + "created_at": "2015-07-07T02:08:30Z", + "updated_at": "2016-02-28T18:03:54Z", + "pushed_at": "2016-02-28T18:03:52Z", + "git_url": "git://github.com/Korinek/Nand2Tetris.git", + "ssh_url": "git@github.com:Korinek/Nand2Tetris.git", + "clone_url": "https://github.com/Korinek/Nand2Tetris.git", + "svn_url": "https://github.com/Korinek/Nand2Tetris", + "homepage": null, + "size": 1916, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 53259984, + "name": "Nand2Tetris", + "full_name": "ofer515/Nand2Tetris", + "owner": { + "login": "ofer515", + "id": 15180555, + "avatar_url": "https://avatars.githubusercontent.com/u/15180555?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ofer515", + "html_url": "https://github.com/ofer515", + "followers_url": "https://api.github.com/users/ofer515/followers", + "following_url": "https://api.github.com/users/ofer515/following{/other_user}", + "gists_url": "https://api.github.com/users/ofer515/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ofer515/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ofer515/subscriptions", + "organizations_url": "https://api.github.com/users/ofer515/orgs", + "repos_url": "https://api.github.com/users/ofer515/repos", + "events_url": "https://api.github.com/users/ofer515/events{/privacy}", + "received_events_url": "https://api.github.com/users/ofer515/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ofer515/Nand2Tetris", + "description": "Project", + "fork": false, + "url": "https://api.github.com/repos/ofer515/Nand2Tetris", + "forks_url": "https://api.github.com/repos/ofer515/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/ofer515/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ofer515/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ofer515/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/ofer515/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ofer515/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ofer515/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/ofer515/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ofer515/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ofer515/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/ofer515/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ofer515/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ofer515/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ofer515/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ofer515/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ofer515/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/ofer515/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ofer515/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ofer515/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ofer515/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/ofer515/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ofer515/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ofer515/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ofer515/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ofer515/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ofer515/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ofer515/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/ofer515/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ofer515/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/ofer515/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ofer515/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ofer515/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ofer515/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ofer515/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ofer515/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ofer515/Nand2Tetris/deployments", + "created_at": "2016-03-06T14:52:32Z", + "updated_at": "2016-03-06T14:52:52Z", + "pushed_at": "2016-03-06T14:52:51Z", + "git_url": "git://github.com/ofer515/Nand2Tetris.git", + "ssh_url": "git@github.com:ofer515/Nand2Tetris.git", + "clone_url": "https://github.com/ofer515/Nand2Tetris.git", + "svn_url": "https://github.com/ofer515/Nand2Tetris", + "homepage": null, + "size": 502, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 47869618, + "name": "nand2tetris", + "full_name": "tetsuroh/nand2tetris", + "owner": { + "login": "tetsuroh", + "id": 1198438, + "avatar_url": "https://avatars.githubusercontent.com/u/1198438?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tetsuroh", + "html_url": "https://github.com/tetsuroh", + "followers_url": "https://api.github.com/users/tetsuroh/followers", + "following_url": "https://api.github.com/users/tetsuroh/following{/other_user}", + "gists_url": "https://api.github.com/users/tetsuroh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tetsuroh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tetsuroh/subscriptions", + "organizations_url": "https://api.github.com/users/tetsuroh/orgs", + "repos_url": "https://api.github.com/users/tetsuroh/repos", + "events_url": "https://api.github.com/users/tetsuroh/events{/privacy}", + "received_events_url": "https://api.github.com/users/tetsuroh/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tetsuroh/nand2tetris", + "description": "コンピュータシステムの理論と実装のやつ", + "fork": false, + "url": "https://api.github.com/repos/tetsuroh/nand2tetris", + "forks_url": "https://api.github.com/repos/tetsuroh/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tetsuroh/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tetsuroh/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tetsuroh/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tetsuroh/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tetsuroh/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tetsuroh/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tetsuroh/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tetsuroh/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tetsuroh/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tetsuroh/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tetsuroh/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tetsuroh/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tetsuroh/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tetsuroh/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tetsuroh/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tetsuroh/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tetsuroh/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tetsuroh/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tetsuroh/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tetsuroh/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tetsuroh/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tetsuroh/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tetsuroh/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tetsuroh/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tetsuroh/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tetsuroh/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tetsuroh/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tetsuroh/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tetsuroh/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tetsuroh/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tetsuroh/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tetsuroh/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tetsuroh/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tetsuroh/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tetsuroh/nand2tetris/deployments", + "created_at": "2015-12-12T07:51:36Z", + "updated_at": "2015-12-12T07:53:33Z", + "pushed_at": "2015-12-12T08:05:30Z", + "git_url": "git://github.com/tetsuroh/nand2tetris.git", + "ssh_url": "git@github.com:tetsuroh/nand2tetris.git", + "clone_url": "https://github.com/tetsuroh/nand2tetris.git", + "svn_url": "https://github.com/tetsuroh/nand2tetris", + "homepage": null, + "size": 186, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 49497035, + "name": "nand2tetris", + "full_name": "foxish/nand2tetris", + "owner": { + "login": "foxish", + "id": 906471, + "avatar_url": "https://avatars.githubusercontent.com/u/906471?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/foxish", + "html_url": "https://github.com/foxish", + "followers_url": "https://api.github.com/users/foxish/followers", + "following_url": "https://api.github.com/users/foxish/following{/other_user}", + "gists_url": "https://api.github.com/users/foxish/gists{/gist_id}", + "starred_url": "https://api.github.com/users/foxish/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/foxish/subscriptions", + "organizations_url": "https://api.github.com/users/foxish/orgs", + "repos_url": "https://api.github.com/users/foxish/repos", + "events_url": "https://api.github.com/users/foxish/events{/privacy}", + "received_events_url": "https://api.github.com/users/foxish/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/foxish/nand2tetris", + "description": "The book which builds a computer from first principles", + "fork": false, + "url": "https://api.github.com/repos/foxish/nand2tetris", + "forks_url": "https://api.github.com/repos/foxish/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/foxish/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/foxish/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/foxish/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/foxish/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/foxish/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/foxish/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/foxish/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/foxish/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/foxish/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/foxish/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/foxish/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/foxish/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/foxish/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/foxish/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/foxish/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/foxish/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/foxish/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/foxish/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/foxish/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/foxish/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/foxish/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/foxish/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/foxish/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/foxish/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/foxish/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/foxish/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/foxish/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/foxish/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/foxish/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/foxish/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/foxish/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/foxish/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/foxish/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/foxish/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/foxish/nand2tetris/deployments", + "created_at": "2016-01-12T11:52:41Z", + "updated_at": "2016-01-12T11:56:09Z", + "pushed_at": "2016-01-16T12:10:11Z", + "git_url": "git://github.com/foxish/nand2tetris.git", + "ssh_url": "git@github.com:foxish/nand2tetris.git", + "clone_url": "https://github.com/foxish/nand2tetris.git", + "svn_url": "https://github.com/foxish/nand2tetris", + "homepage": null, + "size": 516, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 49245265, + "name": "Nand2Tetris", + "full_name": "Ra-Sedg/Nand2Tetris", + "owner": { + "login": "Ra-Sedg", + "id": 10386425, + "avatar_url": "https://avatars.githubusercontent.com/u/10386425?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Ra-Sedg", + "html_url": "https://github.com/Ra-Sedg", + "followers_url": "https://api.github.com/users/Ra-Sedg/followers", + "following_url": "https://api.github.com/users/Ra-Sedg/following{/other_user}", + "gists_url": "https://api.github.com/users/Ra-Sedg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Ra-Sedg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Ra-Sedg/subscriptions", + "organizations_url": "https://api.github.com/users/Ra-Sedg/orgs", + "repos_url": "https://api.github.com/users/Ra-Sedg/repos", + "events_url": "https://api.github.com/users/Ra-Sedg/events{/privacy}", + "received_events_url": "https://api.github.com/users/Ra-Sedg/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Ra-Sedg/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris", + "forks_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Ra-Sedg/Nand2Tetris/deployments", + "created_at": "2016-01-08T02:53:26Z", + "updated_at": "2016-01-08T03:02:01Z", + "pushed_at": "2016-01-08T03:01:59Z", + "git_url": "git://github.com/Ra-Sedg/Nand2Tetris.git", + "ssh_url": "git@github.com:Ra-Sedg/Nand2Tetris.git", + "clone_url": "https://github.com/Ra-Sedg/Nand2Tetris.git", + "svn_url": "https://github.com/Ra-Sedg/Nand2Tetris", + "homepage": null, + "size": 4761, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 39862500, + "name": "nand2tetris", + "full_name": "santigl/nand2tetris", + "owner": { + "login": "santigl", + "id": 11447309, + "avatar_url": "https://avatars.githubusercontent.com/u/11447309?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/santigl", + "html_url": "https://github.com/santigl", + "followers_url": "https://api.github.com/users/santigl/followers", + "following_url": "https://api.github.com/users/santigl/following{/other_user}", + "gists_url": "https://api.github.com/users/santigl/gists{/gist_id}", + "starred_url": "https://api.github.com/users/santigl/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/santigl/subscriptions", + "organizations_url": "https://api.github.com/users/santigl/orgs", + "repos_url": "https://api.github.com/users/santigl/repos", + "events_url": "https://api.github.com/users/santigl/events{/privacy}", + "received_events_url": "https://api.github.com/users/santigl/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/santigl/nand2tetris", + "description": "My implementation of the project", + "fork": false, + "url": "https://api.github.com/repos/santigl/nand2tetris", + "forks_url": "https://api.github.com/repos/santigl/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/santigl/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/santigl/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/santigl/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/santigl/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/santigl/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/santigl/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/santigl/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/santigl/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/santigl/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/santigl/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/santigl/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/santigl/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/santigl/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/santigl/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/santigl/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/santigl/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/santigl/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/santigl/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/santigl/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/santigl/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/santigl/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/santigl/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/santigl/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/santigl/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/santigl/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/santigl/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/santigl/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/santigl/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/santigl/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/santigl/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/santigl/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/santigl/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/santigl/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/santigl/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/santigl/nand2tetris/deployments", + "created_at": "2015-07-28T23:21:48Z", + "updated_at": "2016-01-12T17:00:40Z", + "pushed_at": "2016-01-12T20:04:27Z", + "git_url": "git://github.com/santigl/nand2tetris.git", + "ssh_url": "git@github.com:santigl/nand2tetris.git", + "clone_url": "https://github.com/santigl/nand2tetris.git", + "svn_url": "https://github.com/santigl/nand2tetris", + "homepage": null, + "size": 226, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 54052764, + "name": "Nand2Tetris", + "full_name": "mzolkiewski/Nand2Tetris", + "owner": { + "login": "mzolkiewski", + "id": 17296893, + "avatar_url": "https://avatars.githubusercontent.com/u/17296893?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mzolkiewski", + "html_url": "https://github.com/mzolkiewski", + "followers_url": "https://api.github.com/users/mzolkiewski/followers", + "following_url": "https://api.github.com/users/mzolkiewski/following{/other_user}", + "gists_url": "https://api.github.com/users/mzolkiewski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mzolkiewski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mzolkiewski/subscriptions", + "organizations_url": "https://api.github.com/users/mzolkiewski/orgs", + "repos_url": "https://api.github.com/users/mzolkiewski/repos", + "events_url": "https://api.github.com/users/mzolkiewski/events{/privacy}", + "received_events_url": "https://api.github.com/users/mzolkiewski/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mzolkiewski/Nand2Tetris", + "description": "My solutions to problems in the Nand2Tetris MIT course", + "fork": false, + "url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris", + "forks_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mzolkiewski/Nand2Tetris/deployments", + "created_at": "2016-03-16T17:29:42Z", + "updated_at": "2016-03-16T17:33:46Z", + "pushed_at": "2016-03-16T17:33:45Z", + "git_url": "git://github.com/mzolkiewski/Nand2Tetris.git", + "ssh_url": "git@github.com:mzolkiewski/Nand2Tetris.git", + "clone_url": "https://github.com/mzolkiewski/Nand2Tetris.git", + "svn_url": "https://github.com/mzolkiewski/Nand2Tetris", + "homepage": null, + "size": 55, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 51406179, + "name": "nand2tetris", + "full_name": "dantzlerwolfe/nand2tetris", + "owner": { + "login": "dantzlerwolfe", + "id": 4689816, + "avatar_url": "https://avatars.githubusercontent.com/u/4689816?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dantzlerwolfe", + "html_url": "https://github.com/dantzlerwolfe", + "followers_url": "https://api.github.com/users/dantzlerwolfe/followers", + "following_url": "https://api.github.com/users/dantzlerwolfe/following{/other_user}", + "gists_url": "https://api.github.com/users/dantzlerwolfe/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dantzlerwolfe/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dantzlerwolfe/subscriptions", + "organizations_url": "https://api.github.com/users/dantzlerwolfe/orgs", + "repos_url": "https://api.github.com/users/dantzlerwolfe/repos", + "events_url": "https://api.github.com/users/dantzlerwolfe/events{/privacy}", + "received_events_url": "https://api.github.com/users/dantzlerwolfe/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dantzlerwolfe/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris", + "forks_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dantzlerwolfe/nand2tetris/deployments", + "created_at": "2016-02-09T22:44:08Z", + "updated_at": "2016-02-09T22:45:10Z", + "pushed_at": "2016-03-23T18:25:52Z", + "git_url": "git://github.com/dantzlerwolfe/nand2tetris.git", + "ssh_url": "git@github.com:dantzlerwolfe/nand2tetris.git", + "clone_url": "https://github.com/dantzlerwolfe/nand2tetris.git", + "svn_url": "https://github.com/dantzlerwolfe/nand2tetris", + "homepage": null, + "size": 133, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 37025701, + "name": "FromNandToTetris", + "full_name": "TaoZang/FromNandToTetris", + "owner": { + "login": "TaoZang", + "id": 929823, + "avatar_url": "https://avatars.githubusercontent.com/u/929823?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/TaoZang", + "html_url": "https://github.com/TaoZang", + "followers_url": "https://api.github.com/users/TaoZang/followers", + "following_url": "https://api.github.com/users/TaoZang/following{/other_user}", + "gists_url": "https://api.github.com/users/TaoZang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TaoZang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TaoZang/subscriptions", + "organizations_url": "https://api.github.com/users/TaoZang/orgs", + "repos_url": "https://api.github.com/users/TaoZang/repos", + "events_url": "https://api.github.com/users/TaoZang/events{/privacy}", + "received_events_url": "https://api.github.com/users/TaoZang/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/TaoZang/FromNandToTetris", + "description": "Implements of a bottom-up computer architecture", + "fork": false, + "url": "https://api.github.com/repos/TaoZang/FromNandToTetris", + "forks_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/forks", + "keys_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/teams", + "hooks_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/hooks", + "issue_events_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/events", + "assignees_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/tags", + "blobs_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/languages", + "stargazers_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/stargazers", + "contributors_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/contributors", + "subscribers_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/subscribers", + "subscription_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/subscription", + "commits_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/merges", + "archive_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/downloads", + "issues_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/TaoZang/FromNandToTetris/deployments", + "created_at": "2015-06-07T17:37:13Z", + "updated_at": "2016-03-03T06:57:01Z", + "pushed_at": "2016-03-24T10:29:10Z", + "git_url": "git://github.com/TaoZang/FromNandToTetris.git", + "ssh_url": "git@github.com:TaoZang/FromNandToTetris.git", + "clone_url": "https://github.com/TaoZang/FromNandToTetris.git", + "svn_url": "https://github.com/TaoZang/FromNandToTetris", + "homepage": "", + "size": 279, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 55118544, + "name": "nand2tetris_coursera", + "full_name": "LittleStupid/nand2tetris_coursera", + "owner": { + "login": "LittleStupid", + "id": 15071167, + "avatar_url": "https://avatars.githubusercontent.com/u/15071167?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/LittleStupid", + "html_url": "https://github.com/LittleStupid", + "followers_url": "https://api.github.com/users/LittleStupid/followers", + "following_url": "https://api.github.com/users/LittleStupid/following{/other_user}", + "gists_url": "https://api.github.com/users/LittleStupid/gists{/gist_id}", + "starred_url": "https://api.github.com/users/LittleStupid/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/LittleStupid/subscriptions", + "organizations_url": "https://api.github.com/users/LittleStupid/orgs", + "repos_url": "https://api.github.com/users/LittleStupid/repos", + "events_url": "https://api.github.com/users/LittleStupid/events{/privacy}", + "received_events_url": "https://api.github.com/users/LittleStupid/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/LittleStupid/nand2tetris_coursera", + "description": "Coursera Lesson", + "fork": false, + "url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera", + "forks_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/forks", + "keys_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/teams", + "hooks_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/hooks", + "issue_events_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/issues/events{/number}", + "events_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/events", + "assignees_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/assignees{/user}", + "branches_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/branches{/branch}", + "tags_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/tags", + "blobs_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/statuses/{sha}", + "languages_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/languages", + "stargazers_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/stargazers", + "contributors_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/contributors", + "subscribers_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/subscribers", + "subscription_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/subscription", + "commits_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/contents/{+path}", + "compare_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/merges", + "archive_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/downloads", + "issues_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/issues{/number}", + "pulls_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/pulls{/number}", + "milestones_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/milestones{/number}", + "notifications_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/labels{/name}", + "releases_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/releases{/id}", + "deployments_url": "https://api.github.com/repos/LittleStupid/nand2tetris_coursera/deployments", + "created_at": "2016-03-31T03:49:06Z", + "updated_at": "2016-03-31T04:16:04Z", + "pushed_at": "2016-04-03T08:46:53Z", + "git_url": "git://github.com/LittleStupid/nand2tetris_coursera.git", + "ssh_url": "git@github.com:LittleStupid/nand2tetris_coursera.git", + "clone_url": "https://github.com/LittleStupid/nand2tetris_coursera.git", + "svn_url": "https://github.com/LittleStupid/nand2tetris_coursera", + "homepage": null, + "size": 596, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 55919907, + "name": "Nand2tetris", + "full_name": "songty11/Nand2tetris", + "owner": { + "login": "songty11", + "id": 16549015, + "avatar_url": "https://avatars.githubusercontent.com/u/16549015?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/songty11", + "html_url": "https://github.com/songty11", + "followers_url": "https://api.github.com/users/songty11/followers", + "following_url": "https://api.github.com/users/songty11/following{/other_user}", + "gists_url": "https://api.github.com/users/songty11/gists{/gist_id}", + "starred_url": "https://api.github.com/users/songty11/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/songty11/subscriptions", + "organizations_url": "https://api.github.com/users/songty11/orgs", + "repos_url": "https://api.github.com/users/songty11/repos", + "events_url": "https://api.github.com/users/songty11/events{/privacy}", + "received_events_url": "https://api.github.com/users/songty11/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/songty11/Nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/songty11/Nand2tetris", + "forks_url": "https://api.github.com/repos/songty11/Nand2tetris/forks", + "keys_url": "https://api.github.com/repos/songty11/Nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/songty11/Nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/songty11/Nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/songty11/Nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/songty11/Nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/songty11/Nand2tetris/events", + "assignees_url": "https://api.github.com/repos/songty11/Nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/songty11/Nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/songty11/Nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/songty11/Nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/songty11/Nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/songty11/Nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/songty11/Nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/songty11/Nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/songty11/Nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/songty11/Nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/songty11/Nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/songty11/Nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/songty11/Nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/songty11/Nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/songty11/Nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/songty11/Nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/songty11/Nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/songty11/Nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/songty11/Nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/songty11/Nand2tetris/merges", + "archive_url": "https://api.github.com/repos/songty11/Nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/songty11/Nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/songty11/Nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/songty11/Nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/songty11/Nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/songty11/Nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/songty11/Nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/songty11/Nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/songty11/Nand2tetris/deployments", + "created_at": "2016-04-10T20:05:18Z", + "updated_at": "2016-04-10T20:05:56Z", + "pushed_at": "2016-04-13T17:14:12Z", + "git_url": "git://github.com/songty11/Nand2tetris.git", + "ssh_url": "git@github.com:songty11/Nand2tetris.git", + "clone_url": "https://github.com/songty11/Nand2tetris.git", + "svn_url": "https://github.com/songty11/Nand2tetris", + "homepage": null, + "size": 1119, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 56127435, + "name": "Nand2Tetris-solutions", + "full_name": "weezybusy/Nand2Tetris-solutions", + "owner": { + "login": "weezybusy", + "id": 9881220, + "avatar_url": "https://avatars.githubusercontent.com/u/9881220?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/weezybusy", + "html_url": "https://github.com/weezybusy", + "followers_url": "https://api.github.com/users/weezybusy/followers", + "following_url": "https://api.github.com/users/weezybusy/following{/other_user}", + "gists_url": "https://api.github.com/users/weezybusy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/weezybusy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/weezybusy/subscriptions", + "organizations_url": "https://api.github.com/users/weezybusy/orgs", + "repos_url": "https://api.github.com/users/weezybusy/repos", + "events_url": "https://api.github.com/users/weezybusy/events{/privacy}", + "received_events_url": "https://api.github.com/users/weezybusy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/weezybusy/Nand2Tetris-solutions", + "description": "Solutions to exercises from \"Nand2Tetris\" by Noam Nisan and Shimon Schocken", + "fork": false, + "url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions", + "forks_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/forks", + "keys_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/teams", + "hooks_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/hooks", + "issue_events_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/issues/events{/number}", + "events_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/events", + "assignees_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/assignees{/user}", + "branches_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/branches{/branch}", + "tags_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/tags", + "blobs_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/statuses/{sha}", + "languages_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/languages", + "stargazers_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/stargazers", + "contributors_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/contributors", + "subscribers_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/subscribers", + "subscription_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/subscription", + "commits_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/contents/{+path}", + "compare_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/merges", + "archive_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/downloads", + "issues_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/issues{/number}", + "pulls_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/pulls{/number}", + "milestones_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/milestones{/number}", + "notifications_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/labels{/name}", + "releases_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/releases{/id}", + "deployments_url": "https://api.github.com/repos/weezybusy/Nand2Tetris-solutions/deployments", + "created_at": "2016-04-13T06:39:22Z", + "updated_at": "2016-04-23T15:40:57Z", + "pushed_at": "2016-05-04T05:26:24Z", + "git_url": "git://github.com/weezybusy/Nand2Tetris-solutions.git", + "ssh_url": "git@github.com:weezybusy/Nand2Tetris-solutions.git", + "clone_url": "https://github.com/weezybusy/Nand2Tetris-solutions.git", + "svn_url": "https://github.com/weezybusy/Nand2Tetris-solutions", + "homepage": null, + "size": 14, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 59401806, + "name": "nand2tetris", + "full_name": "themindis/nand2tetris", + "owner": { + "login": "themindis", + "id": 16673007, + "avatar_url": "https://avatars.githubusercontent.com/u/16673007?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/themindis", + "html_url": "https://github.com/themindis", + "followers_url": "https://api.github.com/users/themindis/followers", + "following_url": "https://api.github.com/users/themindis/following{/other_user}", + "gists_url": "https://api.github.com/users/themindis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/themindis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/themindis/subscriptions", + "organizations_url": "https://api.github.com/users/themindis/orgs", + "repos_url": "https://api.github.com/users/themindis/repos", + "events_url": "https://api.github.com/users/themindis/events{/privacy}", + "received_events_url": "https://api.github.com/users/themindis/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/themindis/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/themindis/nand2tetris", + "forks_url": "https://api.github.com/repos/themindis/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/themindis/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/themindis/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/themindis/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/themindis/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/themindis/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/themindis/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/themindis/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/themindis/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/themindis/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/themindis/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/themindis/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/themindis/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/themindis/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/themindis/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/themindis/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/themindis/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/themindis/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/themindis/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/themindis/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/themindis/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/themindis/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/themindis/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/themindis/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/themindis/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/themindis/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/themindis/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/themindis/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/themindis/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/themindis/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/themindis/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/themindis/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/themindis/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/themindis/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/themindis/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/themindis/nand2tetris/deployments", + "created_at": "2016-05-22T08:14:49Z", + "updated_at": "2016-05-22T08:15:28Z", + "pushed_at": "2016-05-22T08:15:27Z", + "git_url": "git://github.com/themindis/nand2tetris.git", + "ssh_url": "git@github.com:themindis/nand2tetris.git", + "clone_url": "https://github.com/themindis/nand2tetris.git", + "svn_url": "https://github.com/themindis/nand2tetris", + "homepage": null, + "size": 155, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 55179792, + "name": "nand2tetris", + "full_name": "joeldudley/nand2tetris", + "owner": { + "login": "joeldudley", + "id": 8593927, + "avatar_url": "https://avatars.githubusercontent.com/u/8593927?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/joeldudley", + "html_url": "https://github.com/joeldudley", + "followers_url": "https://api.github.com/users/joeldudley/followers", + "following_url": "https://api.github.com/users/joeldudley/following{/other_user}", + "gists_url": "https://api.github.com/users/joeldudley/gists{/gist_id}", + "starred_url": "https://api.github.com/users/joeldudley/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/joeldudley/subscriptions", + "organizations_url": "https://api.github.com/users/joeldudley/orgs", + "repos_url": "https://api.github.com/users/joeldudley/repos", + "events_url": "https://api.github.com/users/joeldudley/events{/privacy}", + "received_events_url": "https://api.github.com/users/joeldudley/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/joeldudley/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/joeldudley/nand2tetris", + "forks_url": "https://api.github.com/repos/joeldudley/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/joeldudley/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/joeldudley/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/joeldudley/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/joeldudley/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/joeldudley/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/joeldudley/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/joeldudley/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/joeldudley/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/joeldudley/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/joeldudley/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/joeldudley/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/joeldudley/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/joeldudley/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/joeldudley/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/joeldudley/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/joeldudley/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/joeldudley/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/joeldudley/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/joeldudley/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/joeldudley/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/joeldudley/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/joeldudley/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/joeldudley/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/joeldudley/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/joeldudley/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/joeldudley/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/joeldudley/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/joeldudley/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/joeldudley/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/joeldudley/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/joeldudley/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/joeldudley/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/joeldudley/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/joeldudley/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/joeldudley/nand2tetris/deployments", + "created_at": "2016-03-31T20:11:06Z", + "updated_at": "2016-03-31T20:11:41Z", + "pushed_at": "2016-05-22T09:44:52Z", + "git_url": "git://github.com/joeldudley/nand2tetris.git", + "ssh_url": "git@github.com:joeldudley/nand2tetris.git", + "clone_url": "https://github.com/joeldudley/nand2tetris.git", + "svn_url": "https://github.com/joeldudley/nand2tetris", + "homepage": null, + "size": 548, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 59315967, + "name": "nand2tetris", + "full_name": "alidaka/nand2tetris", + "owner": { + "login": "alidaka", + "id": 12162158, + "avatar_url": "https://avatars.githubusercontent.com/u/12162158?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/alidaka", + "html_url": "https://github.com/alidaka", + "followers_url": "https://api.github.com/users/alidaka/followers", + "following_url": "https://api.github.com/users/alidaka/following{/other_user}", + "gists_url": "https://api.github.com/users/alidaka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alidaka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alidaka/subscriptions", + "organizations_url": "https://api.github.com/users/alidaka/orgs", + "repos_url": "https://api.github.com/users/alidaka/repos", + "events_url": "https://api.github.com/users/alidaka/events{/privacy}", + "received_events_url": "https://api.github.com/users/alidaka/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/alidaka/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/alidaka/nand2tetris", + "forks_url": "https://api.github.com/repos/alidaka/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/alidaka/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/alidaka/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/alidaka/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/alidaka/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/alidaka/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/alidaka/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/alidaka/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/alidaka/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/alidaka/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/alidaka/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/alidaka/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/alidaka/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/alidaka/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/alidaka/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/alidaka/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/alidaka/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/alidaka/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/alidaka/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/alidaka/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/alidaka/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/alidaka/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/alidaka/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/alidaka/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/alidaka/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/alidaka/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/alidaka/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/alidaka/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/alidaka/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/alidaka/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/alidaka/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/alidaka/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/alidaka/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/alidaka/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/alidaka/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/alidaka/nand2tetris/deployments", + "created_at": "2016-05-20T18:09:12Z", + "updated_at": "2016-05-20T18:32:30Z", + "pushed_at": "2016-05-20T19:17:50Z", + "git_url": "git://github.com/alidaka/nand2tetris.git", + "ssh_url": "git@github.com:alidaka/nand2tetris.git", + "clone_url": "https://github.com/alidaka/nand2tetris.git", + "svn_url": "https://github.com/alidaka/nand2tetris", + "homepage": null, + "size": 154, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 52871787, + "name": "nand2Tetris", + "full_name": "WIZARD-CXY/nand2Tetris", + "owner": { + "login": "WIZARD-CXY", + "id": 2142864, + "avatar_url": "https://avatars.githubusercontent.com/u/2142864?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/WIZARD-CXY", + "html_url": "https://github.com/WIZARD-CXY", + "followers_url": "https://api.github.com/users/WIZARD-CXY/followers", + "following_url": "https://api.github.com/users/WIZARD-CXY/following{/other_user}", + "gists_url": "https://api.github.com/users/WIZARD-CXY/gists{/gist_id}", + "starred_url": "https://api.github.com/users/WIZARD-CXY/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/WIZARD-CXY/subscriptions", + "organizations_url": "https://api.github.com/users/WIZARD-CXY/orgs", + "repos_url": "https://api.github.com/users/WIZARD-CXY/repos", + "events_url": "https://api.github.com/users/WIZARD-CXY/events{/privacy}", + "received_events_url": "https://api.github.com/users/WIZARD-CXY/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/WIZARD-CXY/nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris", + "forks_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/WIZARD-CXY/nand2Tetris/deployments", + "created_at": "2016-03-01T11:26:30Z", + "updated_at": "2016-03-01T11:28:00Z", + "pushed_at": "2016-05-14T04:00:46Z", + "git_url": "git://github.com/WIZARD-CXY/nand2Tetris.git", + "ssh_url": "git@github.com:WIZARD-CXY/nand2Tetris.git", + "clone_url": "https://github.com/WIZARD-CXY/nand2Tetris.git", + "svn_url": "https://github.com/WIZARD-CXY/nand2Tetris", + "homepage": null, + "size": 1253, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 58726410, + "name": "Nand2Tetris-homeworks", + "full_name": "TrungACZNE/Nand2Tetris-homeworks", + "owner": { + "login": "TrungACZNE", + "id": 1381629, + "avatar_url": "https://avatars.githubusercontent.com/u/1381629?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/TrungACZNE", + "html_url": "https://github.com/TrungACZNE", + "followers_url": "https://api.github.com/users/TrungACZNE/followers", + "following_url": "https://api.github.com/users/TrungACZNE/following{/other_user}", + "gists_url": "https://api.github.com/users/TrungACZNE/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TrungACZNE/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TrungACZNE/subscriptions", + "organizations_url": "https://api.github.com/users/TrungACZNE/orgs", + "repos_url": "https://api.github.com/users/TrungACZNE/repos", + "events_url": "https://api.github.com/users/TrungACZNE/events{/privacy}", + "received_events_url": "https://api.github.com/users/TrungACZNE/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/TrungACZNE/Nand2Tetris-homeworks", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks", + "forks_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/forks", + "keys_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/teams", + "hooks_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/hooks", + "issue_events_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/issues/events{/number}", + "events_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/events", + "assignees_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/assignees{/user}", + "branches_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/branches{/branch}", + "tags_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/tags", + "blobs_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/statuses/{sha}", + "languages_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/languages", + "stargazers_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/stargazers", + "contributors_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/contributors", + "subscribers_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/subscribers", + "subscription_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/subscription", + "commits_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/contents/{+path}", + "compare_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/merges", + "archive_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/downloads", + "issues_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/issues{/number}", + "pulls_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/pulls{/number}", + "milestones_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/milestones{/number}", + "notifications_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/labels{/name}", + "releases_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/releases{/id}", + "deployments_url": "https://api.github.com/repos/TrungACZNE/Nand2Tetris-homeworks/deployments", + "created_at": "2016-05-13T09:56:18Z", + "updated_at": "2016-05-16T15:28:52Z", + "pushed_at": "2016-06-10T15:34:35Z", + "git_url": "git://github.com/TrungACZNE/Nand2Tetris-homeworks.git", + "ssh_url": "git@github.com:TrungACZNE/Nand2Tetris-homeworks.git", + "clone_url": "https://github.com/TrungACZNE/Nand2Tetris-homeworks.git", + "svn_url": "https://github.com/TrungACZNE/Nand2Tetris-homeworks", + "homepage": null, + "size": 20, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 60934654, + "name": "Nand2Tetris", + "full_name": "antonydeepak/Nand2Tetris", + "owner": { + "login": "antonydeepak", + "id": 1146580, + "avatar_url": "https://avatars.githubusercontent.com/u/1146580?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/antonydeepak", + "html_url": "https://github.com/antonydeepak", + "followers_url": "https://api.github.com/users/antonydeepak/followers", + "following_url": "https://api.github.com/users/antonydeepak/following{/other_user}", + "gists_url": "https://api.github.com/users/antonydeepak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/antonydeepak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/antonydeepak/subscriptions", + "organizations_url": "https://api.github.com/users/antonydeepak/orgs", + "repos_url": "https://api.github.com/users/antonydeepak/repos", + "events_url": "https://api.github.com/users/antonydeepak/events{/privacy}", + "received_events_url": "https://api.github.com/users/antonydeepak/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/antonydeepak/Nand2Tetris", + "description": "Reference project implementation for the course at nand2tetris.org ", + "fork": false, + "url": "https://api.github.com/repos/antonydeepak/Nand2Tetris", + "forks_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/antonydeepak/Nand2Tetris/deployments", + "created_at": "2016-06-12T01:04:39Z", + "updated_at": "2016-06-12T01:29:51Z", + "pushed_at": "2016-06-12T01:29:49Z", + "git_url": "git://github.com/antonydeepak/Nand2Tetris.git", + "ssh_url": "git@github.com:antonydeepak/Nand2Tetris.git", + "clone_url": "https://github.com/antonydeepak/Nand2Tetris.git", + "svn_url": "https://github.com/antonydeepak/Nand2Tetris", + "homepage": null, + "size": 198, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 49381381, + "name": "nand2tetris", + "full_name": "MC-Winkler/nand2tetris", + "owner": { + "login": "MC-Winkler", + "id": 6421129, + "avatar_url": "https://avatars.githubusercontent.com/u/6421129?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MC-Winkler", + "html_url": "https://github.com/MC-Winkler", + "followers_url": "https://api.github.com/users/MC-Winkler/followers", + "following_url": "https://api.github.com/users/MC-Winkler/following{/other_user}", + "gists_url": "https://api.github.com/users/MC-Winkler/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MC-Winkler/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MC-Winkler/subscriptions", + "organizations_url": "https://api.github.com/users/MC-Winkler/orgs", + "repos_url": "https://api.github.com/users/MC-Winkler/repos", + "events_url": "https://api.github.com/users/MC-Winkler/events{/privacy}", + "received_events_url": "https://api.github.com/users/MC-Winkler/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/MC-Winkler/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/MC-Winkler/nand2tetris", + "forks_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/MC-Winkler/nand2tetris/deployments", + "created_at": "2016-01-10T19:18:08Z", + "updated_at": "2016-01-12T16:56:37Z", + "pushed_at": "2016-06-21T01:14:35Z", + "git_url": "git://github.com/MC-Winkler/nand2tetris.git", + "ssh_url": "git@github.com:MC-Winkler/nand2tetris.git", + "clone_url": "https://github.com/MC-Winkler/nand2tetris.git", + "svn_url": "https://github.com/MC-Winkler/nand2tetris", + "homepage": null, + "size": 1959, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 61630687, + "name": "nand2tetris", + "full_name": "weilu/nand2tetris", + "owner": { + "login": "weilu", + "id": 412533, + "avatar_url": "https://avatars.githubusercontent.com/u/412533?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/weilu", + "html_url": "https://github.com/weilu", + "followers_url": "https://api.github.com/users/weilu/followers", + "following_url": "https://api.github.com/users/weilu/following{/other_user}", + "gists_url": "https://api.github.com/users/weilu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/weilu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/weilu/subscriptions", + "organizations_url": "https://api.github.com/users/weilu/orgs", + "repos_url": "https://api.github.com/users/weilu/repos", + "events_url": "https://api.github.com/users/weilu/events{/privacy}", + "received_events_url": "https://api.github.com/users/weilu/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/weilu/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/weilu/nand2tetris", + "forks_url": "https://api.github.com/repos/weilu/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/weilu/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/weilu/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/weilu/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/weilu/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/weilu/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/weilu/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/weilu/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/weilu/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/weilu/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/weilu/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/weilu/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/weilu/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/weilu/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/weilu/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/weilu/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/weilu/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/weilu/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/weilu/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/weilu/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/weilu/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/weilu/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/weilu/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/weilu/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/weilu/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/weilu/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/weilu/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/weilu/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/weilu/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/weilu/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/weilu/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/weilu/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/weilu/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/weilu/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/weilu/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/weilu/nand2tetris/deployments", + "created_at": "2016-06-21T12:04:47Z", + "updated_at": "2016-06-21T12:05:09Z", + "pushed_at": "2016-06-21T12:05:07Z", + "git_url": "git://github.com/weilu/nand2tetris.git", + "ssh_url": "git@github.com:weilu/nand2tetris.git", + "clone_url": "https://github.com/weilu/nand2tetris.git", + "svn_url": "https://github.com/weilu/nand2tetris", + "homepage": null, + "size": 160, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 60439308, + "name": "nand2tetris", + "full_name": "k0sk/nand2tetris", + "owner": { + "login": "k0sk", + "id": 3438060, + "avatar_url": "https://avatars.githubusercontent.com/u/3438060?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/k0sk", + "html_url": "https://github.com/k0sk", + "followers_url": "https://api.github.com/users/k0sk/followers", + "following_url": "https://api.github.com/users/k0sk/following{/other_user}", + "gists_url": "https://api.github.com/users/k0sk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/k0sk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/k0sk/subscriptions", + "organizations_url": "https://api.github.com/users/k0sk/orgs", + "repos_url": "https://api.github.com/users/k0sk/repos", + "events_url": "https://api.github.com/users/k0sk/events{/privacy}", + "received_events_url": "https://api.github.com/users/k0sk/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/k0sk/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/k0sk/nand2tetris", + "forks_url": "https://api.github.com/repos/k0sk/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/k0sk/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/k0sk/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/k0sk/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/k0sk/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/k0sk/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/k0sk/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/k0sk/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/k0sk/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/k0sk/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/k0sk/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/k0sk/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/k0sk/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/k0sk/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/k0sk/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/k0sk/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/k0sk/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/k0sk/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/k0sk/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/k0sk/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/k0sk/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/k0sk/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/k0sk/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/k0sk/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/k0sk/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/k0sk/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/k0sk/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/k0sk/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/k0sk/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/k0sk/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/k0sk/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/k0sk/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/k0sk/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/k0sk/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/k0sk/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/k0sk/nand2tetris/deployments", + "created_at": "2016-06-05T02:19:07Z", + "updated_at": "2016-06-17T13:17:35Z", + "pushed_at": "2016-06-12T09:22:28Z", + "git_url": "git://github.com/k0sk/nand2tetris.git", + "ssh_url": "git@github.com:k0sk/nand2tetris.git", + "clone_url": "https://github.com/k0sk/nand2tetris.git", + "svn_url": "https://github.com/k0sk/nand2tetris", + "homepage": null, + "size": 512, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 61415691, + "name": "Nand2Tetris", + "full_name": "GuillermoLopezJr/Nand2Tetris", + "owner": { + "login": "GuillermoLopezJr", + "id": 14910362, + "avatar_url": "https://avatars.githubusercontent.com/u/14910362?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/GuillermoLopezJr", + "html_url": "https://github.com/GuillermoLopezJr", + "followers_url": "https://api.github.com/users/GuillermoLopezJr/followers", + "following_url": "https://api.github.com/users/GuillermoLopezJr/following{/other_user}", + "gists_url": "https://api.github.com/users/GuillermoLopezJr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GuillermoLopezJr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GuillermoLopezJr/subscriptions", + "organizations_url": "https://api.github.com/users/GuillermoLopezJr/orgs", + "repos_url": "https://api.github.com/users/GuillermoLopezJr/repos", + "events_url": "https://api.github.com/users/GuillermoLopezJr/events{/privacy}", + "received_events_url": "https://api.github.com/users/GuillermoLopezJr/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/GuillermoLopezJr/Nand2Tetris", + "description": "Projects for Nand2Tetris website", + "fork": false, + "url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris", + "forks_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/GuillermoLopezJr/Nand2Tetris/deployments", + "created_at": "2016-06-18T03:48:18Z", + "updated_at": "2016-06-21T18:13:32Z", + "pushed_at": "2016-06-21T18:16:28Z", + "git_url": "git://github.com/GuillermoLopezJr/Nand2Tetris.git", + "ssh_url": "git@github.com:GuillermoLopezJr/Nand2Tetris.git", + "clone_url": "https://github.com/GuillermoLopezJr/Nand2Tetris.git", + "svn_url": "https://github.com/GuillermoLopezJr/Nand2Tetris", + "homepage": null, + "size": 18, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 61677901, + "name": "nand2Tetris", + "full_name": "jsutterfield/nand2Tetris", + "owner": { + "login": "jsutterfield", + "id": 1657792, + "avatar_url": "https://avatars.githubusercontent.com/u/1657792?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jsutterfield", + "html_url": "https://github.com/jsutterfield", + "followers_url": "https://api.github.com/users/jsutterfield/followers", + "following_url": "https://api.github.com/users/jsutterfield/following{/other_user}", + "gists_url": "https://api.github.com/users/jsutterfield/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jsutterfield/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jsutterfield/subscriptions", + "organizations_url": "https://api.github.com/users/jsutterfield/orgs", + "repos_url": "https://api.github.com/users/jsutterfield/repos", + "events_url": "https://api.github.com/users/jsutterfield/events{/privacy}", + "received_events_url": "https://api.github.com/users/jsutterfield/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jsutterfield/nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jsutterfield/nand2Tetris", + "forks_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jsutterfield/nand2Tetris/deployments", + "created_at": "2016-06-22T01:03:02Z", + "updated_at": "2016-06-22T01:04:45Z", + "pushed_at": "2016-06-22T01:04:43Z", + "git_url": "git://github.com/jsutterfield/nand2Tetris.git", + "ssh_url": "git@github.com:jsutterfield/nand2Tetris.git", + "clone_url": "https://github.com/jsutterfield/nand2Tetris.git", + "svn_url": "https://github.com/jsutterfield/nand2Tetris", + "homepage": null, + "size": 521, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2323122 + }, + { + "id": 8134533, + "name": "nand2tetris", + "full_name": "hubbazoot/nand2tetris", + "owner": { + "login": "hubbazoot", + "id": 2689544, + "avatar_url": "https://avatars.githubusercontent.com/u/2689544?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hubbazoot", + "html_url": "https://github.com/hubbazoot", + "followers_url": "https://api.github.com/users/hubbazoot/followers", + "following_url": "https://api.github.com/users/hubbazoot/following{/other_user}", + "gists_url": "https://api.github.com/users/hubbazoot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hubbazoot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hubbazoot/subscriptions", + "organizations_url": "https://api.github.com/users/hubbazoot/orgs", + "repos_url": "https://api.github.com/users/hubbazoot/repos", + "events_url": "https://api.github.com/users/hubbazoot/events{/privacy}", + "received_events_url": "https://api.github.com/users/hubbazoot/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hubbazoot/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/hubbazoot/nand2tetris", + "forks_url": "https://api.github.com/repos/hubbazoot/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/hubbazoot/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hubbazoot/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hubbazoot/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/hubbazoot/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/hubbazoot/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/hubbazoot/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/hubbazoot/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/hubbazoot/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/hubbazoot/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/hubbazoot/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hubbazoot/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hubbazoot/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hubbazoot/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hubbazoot/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hubbazoot/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/hubbazoot/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/hubbazoot/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/hubbazoot/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/hubbazoot/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/hubbazoot/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hubbazoot/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hubbazoot/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hubbazoot/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hubbazoot/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/hubbazoot/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hubbazoot/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/hubbazoot/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hubbazoot/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/hubbazoot/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/hubbazoot/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hubbazoot/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hubbazoot/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hubbazoot/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/hubbazoot/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/hubbazoot/nand2tetris/deployments", + "created_at": "2013-02-11T08:08:09Z", + "updated_at": "2014-05-22T07:44:45Z", + "pushed_at": "2013-02-11T09:30:53Z", + "git_url": "git://github.com/hubbazoot/nand2tetris.git", + "ssh_url": "git@github.com:hubbazoot/nand2tetris.git", + "clone_url": "https://github.com/hubbazoot/nand2tetris.git", + "svn_url": "https://github.com/hubbazoot/nand2tetris", + "homepage": null, + "size": 656, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 11039175, + "name": "nand2tetris", + "full_name": "GreenOlvi/nand2tetris", + "owner": { + "login": "GreenOlvi", + "id": 1195763, + "avatar_url": "https://avatars.githubusercontent.com/u/1195763?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/GreenOlvi", + "html_url": "https://github.com/GreenOlvi", + "followers_url": "https://api.github.com/users/GreenOlvi/followers", + "following_url": "https://api.github.com/users/GreenOlvi/following{/other_user}", + "gists_url": "https://api.github.com/users/GreenOlvi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GreenOlvi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GreenOlvi/subscriptions", + "organizations_url": "https://api.github.com/users/GreenOlvi/orgs", + "repos_url": "https://api.github.com/users/GreenOlvi/repos", + "events_url": "https://api.github.com/users/GreenOlvi/events{/privacy}", + "received_events_url": "https://api.github.com/users/GreenOlvi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/GreenOlvi/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/GreenOlvi/nand2tetris", + "forks_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/GreenOlvi/nand2tetris/deployments", + "created_at": "2013-06-28T21:57:00Z", + "updated_at": "2013-11-03T13:39:58Z", + "pushed_at": "2013-11-03T13:39:53Z", + "git_url": "git://github.com/GreenOlvi/nand2tetris.git", + "ssh_url": "git@github.com:GreenOlvi/nand2tetris.git", + "clone_url": "https://github.com/GreenOlvi/nand2tetris.git", + "svn_url": "https://github.com/GreenOlvi/nand2tetris", + "homepage": null, + "size": 348, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 11878639, + "name": "nand-2-tetris", + "full_name": "pmenon/nand-2-tetris", + "owner": { + "login": "pmenon", + "id": 243434, + "avatar_url": "https://avatars.githubusercontent.com/u/243434?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pmenon", + "html_url": "https://github.com/pmenon", + "followers_url": "https://api.github.com/users/pmenon/followers", + "following_url": "https://api.github.com/users/pmenon/following{/other_user}", + "gists_url": "https://api.github.com/users/pmenon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pmenon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pmenon/subscriptions", + "organizations_url": "https://api.github.com/users/pmenon/orgs", + "repos_url": "https://api.github.com/users/pmenon/repos", + "events_url": "https://api.github.com/users/pmenon/events{/privacy}", + "received_events_url": "https://api.github.com/users/pmenon/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/pmenon/nand-2-tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/pmenon/nand-2-tetris", + "forks_url": "https://api.github.com/repos/pmenon/nand-2-tetris/forks", + "keys_url": "https://api.github.com/repos/pmenon/nand-2-tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/pmenon/nand-2-tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/pmenon/nand-2-tetris/teams", + "hooks_url": "https://api.github.com/repos/pmenon/nand-2-tetris/hooks", + "issue_events_url": "https://api.github.com/repos/pmenon/nand-2-tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/pmenon/nand-2-tetris/events", + "assignees_url": "https://api.github.com/repos/pmenon/nand-2-tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/pmenon/nand-2-tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/pmenon/nand-2-tetris/tags", + "blobs_url": "https://api.github.com/repos/pmenon/nand-2-tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/pmenon/nand-2-tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/pmenon/nand-2-tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/pmenon/nand-2-tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/pmenon/nand-2-tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/pmenon/nand-2-tetris/languages", + "stargazers_url": "https://api.github.com/repos/pmenon/nand-2-tetris/stargazers", + "contributors_url": "https://api.github.com/repos/pmenon/nand-2-tetris/contributors", + "subscribers_url": "https://api.github.com/repos/pmenon/nand-2-tetris/subscribers", + "subscription_url": "https://api.github.com/repos/pmenon/nand-2-tetris/subscription", + "commits_url": "https://api.github.com/repos/pmenon/nand-2-tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/pmenon/nand-2-tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/pmenon/nand-2-tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/pmenon/nand-2-tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/pmenon/nand-2-tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/pmenon/nand-2-tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/pmenon/nand-2-tetris/merges", + "archive_url": "https://api.github.com/repos/pmenon/nand-2-tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/pmenon/nand-2-tetris/downloads", + "issues_url": "https://api.github.com/repos/pmenon/nand-2-tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/pmenon/nand-2-tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/pmenon/nand-2-tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/pmenon/nand-2-tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/pmenon/nand-2-tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/pmenon/nand-2-tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/pmenon/nand-2-tetris/deployments", + "created_at": "2013-08-04T13:00:17Z", + "updated_at": "2014-02-28T23:47:24Z", + "pushed_at": "2013-08-29T02:41:02Z", + "git_url": "git://github.com/pmenon/nand-2-tetris.git", + "ssh_url": "git@github.com:pmenon/nand-2-tetris.git", + "clone_url": "https://github.com/pmenon/nand-2-tetris.git", + "svn_url": "https://github.com/pmenon/nand-2-tetris", + "homepage": null, + "size": 664, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 12645423, + "name": "nand2tetris", + "full_name": "thomcom/nand2tetris", + "owner": { + "login": "thomcom", + "id": 410931, + "avatar_url": "https://avatars.githubusercontent.com/u/410931?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/thomcom", + "html_url": "https://github.com/thomcom", + "followers_url": "https://api.github.com/users/thomcom/followers", + "following_url": "https://api.github.com/users/thomcom/following{/other_user}", + "gists_url": "https://api.github.com/users/thomcom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thomcom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thomcom/subscriptions", + "organizations_url": "https://api.github.com/users/thomcom/orgs", + "repos_url": "https://api.github.com/users/thomcom/repos", + "events_url": "https://api.github.com/users/thomcom/events{/privacy}", + "received_events_url": "https://api.github.com/users/thomcom/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/thomcom/nand2tetris", + "description": "Coursework for nand2tetris Elements of Computing Systems book", + "fork": false, + "url": "https://api.github.com/repos/thomcom/nand2tetris", + "forks_url": "https://api.github.com/repos/thomcom/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/thomcom/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/thomcom/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/thomcom/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/thomcom/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/thomcom/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/thomcom/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/thomcom/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/thomcom/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/thomcom/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/thomcom/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/thomcom/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/thomcom/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/thomcom/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/thomcom/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/thomcom/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/thomcom/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/thomcom/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/thomcom/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/thomcom/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/thomcom/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/thomcom/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/thomcom/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/thomcom/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/thomcom/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/thomcom/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/thomcom/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/thomcom/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/thomcom/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/thomcom/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/thomcom/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/thomcom/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/thomcom/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/thomcom/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/thomcom/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/thomcom/nand2tetris/deployments", + "created_at": "2013-09-06T14:01:49Z", + "updated_at": "2013-10-10T17:38:07Z", + "pushed_at": "2013-10-10T17:38:04Z", + "git_url": "git://github.com/thomcom/nand2tetris.git", + "ssh_url": "git@github.com:thomcom/nand2tetris.git", + "clone_url": "https://github.com/thomcom/nand2tetris.git", + "svn_url": "https://github.com/thomcom/nand2tetris", + "homepage": null, + "size": 292, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 13973583, + "name": "nand2tetris", + "full_name": "DArtagan/nand2tetris", + "owner": { + "login": "DArtagan", + "id": 69908, + "avatar_url": "https://avatars.githubusercontent.com/u/69908?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/DArtagan", + "html_url": "https://github.com/DArtagan", + "followers_url": "https://api.github.com/users/DArtagan/followers", + "following_url": "https://api.github.com/users/DArtagan/following{/other_user}", + "gists_url": "https://api.github.com/users/DArtagan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/DArtagan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/DArtagan/subscriptions", + "organizations_url": "https://api.github.com/users/DArtagan/orgs", + "repos_url": "https://api.github.com/users/DArtagan/repos", + "events_url": "https://api.github.com/users/DArtagan/events{/privacy}", + "received_events_url": "https://api.github.com/users/DArtagan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/DArtagan/nand2tetris", + "description": "nand2tetris projcects for Elements of Computing class", + "fork": false, + "url": "https://api.github.com/repos/DArtagan/nand2tetris", + "forks_url": "https://api.github.com/repos/DArtagan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/DArtagan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/DArtagan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/DArtagan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/DArtagan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/DArtagan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/DArtagan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/DArtagan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/DArtagan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/DArtagan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/DArtagan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/DArtagan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/DArtagan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/DArtagan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/DArtagan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/DArtagan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/DArtagan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/DArtagan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/DArtagan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/DArtagan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/DArtagan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/DArtagan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/DArtagan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/DArtagan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/DArtagan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/DArtagan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/DArtagan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/DArtagan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/DArtagan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/DArtagan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/DArtagan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/DArtagan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/DArtagan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/DArtagan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/DArtagan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/DArtagan/nand2tetris/deployments", + "created_at": "2013-10-30T01:14:11Z", + "updated_at": "2013-12-02T08:10:27Z", + "pushed_at": "2013-12-02T08:10:24Z", + "git_url": "git://github.com/DArtagan/nand2tetris.git", + "ssh_url": "git@github.com:DArtagan/nand2tetris.git", + "clone_url": "https://github.com/DArtagan/nand2tetris.git", + "svn_url": "https://github.com/DArtagan/nand2tetris", + "homepage": null, + "size": 1056, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 16328982, + "name": "nand2tetris", + "full_name": "arxprimoris/nand2tetris", + "owner": { + "login": "arxprimoris", + "id": 2523174, + "avatar_url": "https://avatars.githubusercontent.com/u/2523174?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/arxprimoris", + "html_url": "https://github.com/arxprimoris", + "followers_url": "https://api.github.com/users/arxprimoris/followers", + "following_url": "https://api.github.com/users/arxprimoris/following{/other_user}", + "gists_url": "https://api.github.com/users/arxprimoris/gists{/gist_id}", + "starred_url": "https://api.github.com/users/arxprimoris/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/arxprimoris/subscriptions", + "organizations_url": "https://api.github.com/users/arxprimoris/orgs", + "repos_url": "https://api.github.com/users/arxprimoris/repos", + "events_url": "https://api.github.com/users/arxprimoris/events{/privacy}", + "received_events_url": "https://api.github.com/users/arxprimoris/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/arxprimoris/nand2tetris", + "description": "nand2tetris Project", + "fork": false, + "url": "https://api.github.com/repos/arxprimoris/nand2tetris", + "forks_url": "https://api.github.com/repos/arxprimoris/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/arxprimoris/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/arxprimoris/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/arxprimoris/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/arxprimoris/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/arxprimoris/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/arxprimoris/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/arxprimoris/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/arxprimoris/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/arxprimoris/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/arxprimoris/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/arxprimoris/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/arxprimoris/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/arxprimoris/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/arxprimoris/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/arxprimoris/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/arxprimoris/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/arxprimoris/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/arxprimoris/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/arxprimoris/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/arxprimoris/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/arxprimoris/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/arxprimoris/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/arxprimoris/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/arxprimoris/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/arxprimoris/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/arxprimoris/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/arxprimoris/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/arxprimoris/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/arxprimoris/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/arxprimoris/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/arxprimoris/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/arxprimoris/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/arxprimoris/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/arxprimoris/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/arxprimoris/nand2tetris/deployments", + "created_at": "2014-01-28T22:56:47Z", + "updated_at": "2014-01-28T23:05:16Z", + "pushed_at": "2014-01-28T23:05:16Z", + "git_url": "git://github.com/arxprimoris/nand2tetris.git", + "ssh_url": "git@github.com:arxprimoris/nand2tetris.git", + "clone_url": "https://github.com/arxprimoris/nand2tetris.git", + "svn_url": "https://github.com/arxprimoris/nand2tetris", + "homepage": null, + "size": 152, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 14638634, + "name": "nand2tetris", + "full_name": "bananahammmock/nand2tetris", + "owner": { + "login": "bananahammmock", + "id": 4556177, + "avatar_url": "https://avatars.githubusercontent.com/u/4556177?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bananahammmock", + "html_url": "https://github.com/bananahammmock", + "followers_url": "https://api.github.com/users/bananahammmock/followers", + "following_url": "https://api.github.com/users/bananahammmock/following{/other_user}", + "gists_url": "https://api.github.com/users/bananahammmock/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bananahammmock/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bananahammmock/subscriptions", + "organizations_url": "https://api.github.com/users/bananahammmock/orgs", + "repos_url": "https://api.github.com/users/bananahammmock/repos", + "events_url": "https://api.github.com/users/bananahammmock/events{/privacy}", + "received_events_url": "https://api.github.com/users/bananahammmock/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bananahammmock/nand2tetris", + "description": "projects for nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/bananahammmock/nand2tetris", + "forks_url": "https://api.github.com/repos/bananahammmock/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bananahammmock/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bananahammmock/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bananahammmock/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bananahammmock/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bananahammmock/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bananahammmock/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bananahammmock/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bananahammmock/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bananahammmock/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bananahammmock/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bananahammmock/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bananahammmock/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bananahammmock/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bananahammmock/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bananahammmock/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bananahammmock/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bananahammmock/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bananahammmock/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bananahammmock/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bananahammmock/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bananahammmock/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bananahammmock/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bananahammmock/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bananahammmock/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bananahammmock/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bananahammmock/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bananahammmock/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bananahammmock/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bananahammmock/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bananahammmock/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bananahammmock/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bananahammmock/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bananahammmock/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bananahammmock/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bananahammmock/nand2tetris/deployments", + "created_at": "2013-11-23T07:48:59Z", + "updated_at": "2013-11-23T10:02:07Z", + "pushed_at": "2013-11-23T10:02:04Z", + "git_url": "git://github.com/bananahammmock/nand2tetris.git", + "ssh_url": "git@github.com:bananahammmock/nand2tetris.git", + "clone_url": "https://github.com/bananahammmock/nand2tetris.git", + "svn_url": "https://github.com/bananahammmock/nand2tetris", + "homepage": null, + "size": 264, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 16639077, + "name": "nand2tetris", + "full_name": "matklad/nand2tetris", + "owner": { + "login": "matklad", + "id": 1711539, + "avatar_url": "https://avatars.githubusercontent.com/u/1711539?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/matklad", + "html_url": "https://github.com/matklad", + "followers_url": "https://api.github.com/users/matklad/followers", + "following_url": "https://api.github.com/users/matklad/following{/other_user}", + "gists_url": "https://api.github.com/users/matklad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/matklad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/matklad/subscriptions", + "organizations_url": "https://api.github.com/users/matklad/orgs", + "repos_url": "https://api.github.com/users/matklad/repos", + "events_url": "https://api.github.com/users/matklad/events{/privacy}", + "received_events_url": "https://api.github.com/users/matklad/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/matklad/nand2tetris", + "description": "Enjoying nand2tetris(http://www.nand2tetris.org/) course", + "fork": false, + "url": "https://api.github.com/repos/matklad/nand2tetris", + "forks_url": "https://api.github.com/repos/matklad/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/matklad/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/matklad/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/matklad/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/matklad/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/matklad/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/matklad/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/matklad/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/matklad/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/matklad/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/matklad/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/matklad/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/matklad/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/matklad/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/matklad/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/matklad/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/matklad/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/matklad/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/matklad/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/matklad/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/matklad/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/matklad/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/matklad/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/matklad/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/matklad/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/matklad/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/matklad/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/matklad/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/matklad/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/matklad/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/matklad/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/matklad/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/matklad/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/matklad/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/matklad/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/matklad/nand2tetris/deployments", + "created_at": "2014-02-08T08:14:44Z", + "updated_at": "2014-02-08T14:59:28Z", + "pushed_at": "2014-02-08T14:59:28Z", + "git_url": "git://github.com/matklad/nand2tetris.git", + "ssh_url": "git@github.com:matklad/nand2tetris.git", + "clone_url": "https://github.com/matklad/nand2tetris.git", + "svn_url": "https://github.com/matklad/nand2tetris", + "homepage": null, + "size": 656, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 17370144, + "name": "nand2tetris", + "full_name": "orensam/nand2tetris", + "owner": { + "login": "orensam", + "id": 2693737, + "avatar_url": "https://avatars.githubusercontent.com/u/2693737?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/orensam", + "html_url": "https://github.com/orensam", + "followers_url": "https://api.github.com/users/orensam/followers", + "following_url": "https://api.github.com/users/orensam/following{/other_user}", + "gists_url": "https://api.github.com/users/orensam/gists{/gist_id}", + "starred_url": "https://api.github.com/users/orensam/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/orensam/subscriptions", + "organizations_url": "https://api.github.com/users/orensam/orgs", + "repos_url": "https://api.github.com/users/orensam/repos", + "events_url": "https://api.github.com/users/orensam/events{/privacy}", + "received_events_url": "https://api.github.com/users/orensam/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/orensam/nand2tetris", + "description": "nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/orensam/nand2tetris", + "forks_url": "https://api.github.com/repos/orensam/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/orensam/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/orensam/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/orensam/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/orensam/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/orensam/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/orensam/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/orensam/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/orensam/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/orensam/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/orensam/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/orensam/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/orensam/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/orensam/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/orensam/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/orensam/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/orensam/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/orensam/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/orensam/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/orensam/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/orensam/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/orensam/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/orensam/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/orensam/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/orensam/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/orensam/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/orensam/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/orensam/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/orensam/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/orensam/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/orensam/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/orensam/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/orensam/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/orensam/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/orensam/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/orensam/nand2tetris/deployments", + "created_at": "2014-03-03T15:27:08Z", + "updated_at": "2014-10-28T10:20:38Z", + "pushed_at": "2014-10-28T10:20:37Z", + "git_url": "git://github.com/orensam/nand2tetris.git", + "ssh_url": "git@github.com:orensam/nand2tetris.git", + "clone_url": "https://github.com/orensam/nand2tetris.git", + "svn_url": "https://github.com/orensam/nand2tetris", + "homepage": null, + "size": 1852, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 18173012, + "name": "nand2tetris", + "full_name": "tamarl02/nand2tetris", + "owner": { + "login": "tamarl02", + "id": 6704978, + "avatar_url": "https://avatars.githubusercontent.com/u/6704978?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tamarl02", + "html_url": "https://github.com/tamarl02", + "followers_url": "https://api.github.com/users/tamarl02/followers", + "following_url": "https://api.github.com/users/tamarl02/following{/other_user}", + "gists_url": "https://api.github.com/users/tamarl02/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tamarl02/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tamarl02/subscriptions", + "organizations_url": "https://api.github.com/users/tamarl02/orgs", + "repos_url": "https://api.github.com/users/tamarl02/repos", + "events_url": "https://api.github.com/users/tamarl02/events{/privacy}", + "received_events_url": "https://api.github.com/users/tamarl02/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tamarl02/nand2tetris", + "description": "nand2tetris projects", + "fork": false, + "url": "https://api.github.com/repos/tamarl02/nand2tetris", + "forks_url": "https://api.github.com/repos/tamarl02/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tamarl02/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tamarl02/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tamarl02/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tamarl02/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tamarl02/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tamarl02/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tamarl02/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tamarl02/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tamarl02/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tamarl02/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tamarl02/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tamarl02/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tamarl02/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tamarl02/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tamarl02/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tamarl02/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tamarl02/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tamarl02/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tamarl02/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tamarl02/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tamarl02/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tamarl02/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tamarl02/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tamarl02/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tamarl02/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tamarl02/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tamarl02/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tamarl02/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tamarl02/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tamarl02/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tamarl02/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tamarl02/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tamarl02/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tamarl02/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tamarl02/nand2tetris/deployments", + "created_at": "2014-03-27T11:03:44Z", + "updated_at": "2014-03-29T17:29:13Z", + "pushed_at": "2014-03-29T17:29:13Z", + "git_url": "git://github.com/tamarl02/nand2tetris.git", + "ssh_url": "git@github.com:tamarl02/nand2tetris.git", + "clone_url": "https://github.com/tamarl02/nand2tetris.git", + "svn_url": "https://github.com/tamarl02/nand2tetris", + "homepage": null, + "size": 488, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 18129819, + "name": "nand2tetris", + "full_name": "stug/nand2tetris", + "owner": { + "login": "stug", + "id": 3210321, + "avatar_url": "https://avatars.githubusercontent.com/u/3210321?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/stug", + "html_url": "https://github.com/stug", + "followers_url": "https://api.github.com/users/stug/followers", + "following_url": "https://api.github.com/users/stug/following{/other_user}", + "gists_url": "https://api.github.com/users/stug/gists{/gist_id}", + "starred_url": "https://api.github.com/users/stug/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/stug/subscriptions", + "organizations_url": "https://api.github.com/users/stug/orgs", + "repos_url": "https://api.github.com/users/stug/repos", + "events_url": "https://api.github.com/users/stug/events{/privacy}", + "received_events_url": "https://api.github.com/users/stug/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/stug/nand2tetris", + "description": "Filling in some gaps in my knowledge", + "fork": false, + "url": "https://api.github.com/repos/stug/nand2tetris", + "forks_url": "https://api.github.com/repos/stug/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/stug/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/stug/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/stug/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/stug/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/stug/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/stug/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/stug/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/stug/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/stug/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/stug/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/stug/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/stug/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/stug/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/stug/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/stug/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/stug/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/stug/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/stug/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/stug/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/stug/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/stug/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/stug/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/stug/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/stug/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/stug/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/stug/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/stug/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/stug/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/stug/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/stug/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/stug/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/stug/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/stug/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/stug/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/stug/nand2tetris/deployments", + "created_at": "2014-03-26T07:17:20Z", + "updated_at": "2014-03-30T08:25:14Z", + "pushed_at": "2014-03-30T08:25:13Z", + "git_url": "git://github.com/stug/nand2tetris.git", + "ssh_url": "git@github.com:stug/nand2tetris.git", + "clone_url": "https://github.com/stug/nand2tetris.git", + "svn_url": "https://github.com/stug/nand2tetris", + "homepage": null, + "size": 764, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 18619402, + "name": "nand2tetris", + "full_name": "mattrubin/nand2tetris", + "owner": { + "login": "mattrubin", + "id": 532638, + "avatar_url": "https://avatars.githubusercontent.com/u/532638?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mattrubin", + "html_url": "https://github.com/mattrubin", + "followers_url": "https://api.github.com/users/mattrubin/followers", + "following_url": "https://api.github.com/users/mattrubin/following{/other_user}", + "gists_url": "https://api.github.com/users/mattrubin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mattrubin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mattrubin/subscriptions", + "organizations_url": "https://api.github.com/users/mattrubin/orgs", + "repos_url": "https://api.github.com/users/mattrubin/repos", + "events_url": "https://api.github.com/users/mattrubin/events{/privacy}", + "received_events_url": "https://api.github.com/users/mattrubin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mattrubin/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/mattrubin/nand2tetris", + "forks_url": "https://api.github.com/repos/mattrubin/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mattrubin/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mattrubin/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mattrubin/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mattrubin/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mattrubin/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mattrubin/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mattrubin/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mattrubin/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mattrubin/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mattrubin/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mattrubin/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mattrubin/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mattrubin/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mattrubin/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mattrubin/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mattrubin/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mattrubin/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mattrubin/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mattrubin/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mattrubin/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mattrubin/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mattrubin/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mattrubin/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mattrubin/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mattrubin/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mattrubin/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mattrubin/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mattrubin/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mattrubin/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mattrubin/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mattrubin/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mattrubin/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mattrubin/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mattrubin/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mattrubin/nand2tetris/deployments", + "created_at": "2014-04-10T01:20:19Z", + "updated_at": "2014-04-10T03:14:04Z", + "pushed_at": "2014-04-10T03:14:06Z", + "git_url": "git://github.com/mattrubin/nand2tetris.git", + "ssh_url": "git@github.com:mattrubin/nand2tetris.git", + "clone_url": "https://github.com/mattrubin/nand2tetris.git", + "svn_url": "https://github.com/mattrubin/nand2tetris", + "homepage": null, + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 22691061, + "name": "nand2tetris", + "full_name": "danielvaughan/nand2tetris", + "owner": { + "login": "danielvaughan", + "id": 532160, + "avatar_url": "https://avatars.githubusercontent.com/u/532160?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/danielvaughan", + "html_url": "https://github.com/danielvaughan", + "followers_url": "https://api.github.com/users/danielvaughan/followers", + "following_url": "https://api.github.com/users/danielvaughan/following{/other_user}", + "gists_url": "https://api.github.com/users/danielvaughan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/danielvaughan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/danielvaughan/subscriptions", + "organizations_url": "https://api.github.com/users/danielvaughan/orgs", + "repos_url": "https://api.github.com/users/danielvaughan/repos", + "events_url": "https://api.github.com/users/danielvaughan/events{/privacy}", + "received_events_url": "https://api.github.com/users/danielvaughan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/danielvaughan/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/danielvaughan/nand2tetris", + "forks_url": "https://api.github.com/repos/danielvaughan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/danielvaughan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/danielvaughan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/danielvaughan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/danielvaughan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/danielvaughan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/danielvaughan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/danielvaughan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/danielvaughan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/danielvaughan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/danielvaughan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/danielvaughan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/danielvaughan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/danielvaughan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/danielvaughan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/danielvaughan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/danielvaughan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/danielvaughan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/danielvaughan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/danielvaughan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/danielvaughan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/danielvaughan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/danielvaughan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/danielvaughan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/danielvaughan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/danielvaughan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/danielvaughan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/danielvaughan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/danielvaughan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/danielvaughan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/danielvaughan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/danielvaughan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/danielvaughan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/danielvaughan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/danielvaughan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/danielvaughan/nand2tetris/deployments", + "created_at": "2014-08-06T17:07:37Z", + "updated_at": "2014-08-06T17:13:33Z", + "pushed_at": "2014-08-06T17:13:33Z", + "git_url": "git://github.com/danielvaughan/nand2tetris.git", + "ssh_url": "git@github.com:danielvaughan/nand2tetris.git", + "clone_url": "https://github.com/danielvaughan/nand2tetris.git", + "svn_url": "https://github.com/danielvaughan/nand2tetris", + "homepage": null, + "size": 268, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 28343991, + "name": "nand2tetris", + "full_name": "computationclub/nand2tetris", + "owner": { + "login": "computationclub", + "id": 9025889, + "avatar_url": "https://avatars.githubusercontent.com/u/9025889?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/computationclub", + "html_url": "https://github.com/computationclub", + "followers_url": "https://api.github.com/users/computationclub/followers", + "following_url": "https://api.github.com/users/computationclub/following{/other_user}", + "gists_url": "https://api.github.com/users/computationclub/gists{/gist_id}", + "starred_url": "https://api.github.com/users/computationclub/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/computationclub/subscriptions", + "organizations_url": "https://api.github.com/users/computationclub/orgs", + "repos_url": "https://api.github.com/users/computationclub/repos", + "events_url": "https://api.github.com/users/computationclub/events{/privacy}", + "received_events_url": "https://api.github.com/users/computationclub/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/computationclub/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/computationclub/nand2tetris", + "forks_url": "https://api.github.com/repos/computationclub/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/computationclub/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/computationclub/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/computationclub/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/computationclub/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/computationclub/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/computationclub/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/computationclub/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/computationclub/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/computationclub/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/computationclub/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/computationclub/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/computationclub/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/computationclub/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/computationclub/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/computationclub/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/computationclub/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/computationclub/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/computationclub/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/computationclub/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/computationclub/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/computationclub/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/computationclub/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/computationclub/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/computationclub/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/computationclub/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/computationclub/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/computationclub/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/computationclub/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/computationclub/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/computationclub/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/computationclub/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/computationclub/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/computationclub/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/computationclub/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/computationclub/nand2tetris/deployments", + "created_at": "2014-12-22T15:23:33Z", + "updated_at": "2015-02-10T20:40:40Z", + "pushed_at": "2015-02-16T13:38:55Z", + "git_url": "git://github.com/computationclub/nand2tetris.git", + "ssh_url": "git@github.com:computationclub/nand2tetris.git", + "clone_url": "https://github.com/computationclub/nand2tetris.git", + "svn_url": "https://github.com/computationclub/nand2tetris", + "homepage": null, + "size": 952, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 1, + "forks": 1, + "open_issues": 1, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 26049118, + "name": "nand2tetris", + "full_name": "jgwhite/nand2tetris", + "owner": { + "login": "jgwhite", + "id": 34030, + "avatar_url": "https://avatars.githubusercontent.com/u/34030?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jgwhite", + "html_url": "https://github.com/jgwhite", + "followers_url": "https://api.github.com/users/jgwhite/followers", + "following_url": "https://api.github.com/users/jgwhite/following{/other_user}", + "gists_url": "https://api.github.com/users/jgwhite/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jgwhite/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jgwhite/subscriptions", + "organizations_url": "https://api.github.com/users/jgwhite/orgs", + "repos_url": "https://api.github.com/users/jgwhite/repos", + "events_url": "https://api.github.com/users/jgwhite/events{/privacy}", + "received_events_url": "https://api.github.com/users/jgwhite/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jgwhite/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/jgwhite/nand2tetris", + "forks_url": "https://api.github.com/repos/jgwhite/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jgwhite/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jgwhite/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jgwhite/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jgwhite/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jgwhite/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jgwhite/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jgwhite/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jgwhite/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jgwhite/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jgwhite/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jgwhite/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jgwhite/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jgwhite/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jgwhite/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jgwhite/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jgwhite/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jgwhite/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jgwhite/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jgwhite/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jgwhite/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jgwhite/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jgwhite/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jgwhite/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jgwhite/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jgwhite/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jgwhite/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jgwhite/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jgwhite/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jgwhite/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jgwhite/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jgwhite/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jgwhite/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jgwhite/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jgwhite/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jgwhite/nand2tetris/deployments", + "created_at": "2014-11-01T11:40:41Z", + "updated_at": "2014-11-25T20:38:07Z", + "pushed_at": "2014-11-25T20:38:07Z", + "git_url": "git://github.com/jgwhite/nand2tetris.git", + "ssh_url": "git@github.com:jgwhite/nand2tetris.git", + "clone_url": "https://github.com/jgwhite/nand2tetris.git", + "svn_url": "https://github.com/jgwhite/nand2tetris", + "homepage": null, + "size": 704, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 27302041, + "name": "nand2tetris", + "full_name": "nvurgaft/nand2tetris", + "owner": { + "login": "nvurgaft", + "id": 1694752, + "avatar_url": "https://avatars.githubusercontent.com/u/1694752?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nvurgaft", + "html_url": "https://github.com/nvurgaft", + "followers_url": "https://api.github.com/users/nvurgaft/followers", + "following_url": "https://api.github.com/users/nvurgaft/following{/other_user}", + "gists_url": "https://api.github.com/users/nvurgaft/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nvurgaft/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nvurgaft/subscriptions", + "organizations_url": "https://api.github.com/users/nvurgaft/orgs", + "repos_url": "https://api.github.com/users/nvurgaft/repos", + "events_url": "https://api.github.com/users/nvurgaft/events{/privacy}", + "received_events_url": "https://api.github.com/users/nvurgaft/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nvurgaft/nand2tetris", + "description": "nand2tetris code snippets and answers", + "fork": false, + "url": "https://api.github.com/repos/nvurgaft/nand2tetris", + "forks_url": "https://api.github.com/repos/nvurgaft/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/nvurgaft/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nvurgaft/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nvurgaft/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/nvurgaft/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/nvurgaft/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/nvurgaft/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/nvurgaft/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/nvurgaft/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/nvurgaft/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/nvurgaft/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nvurgaft/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nvurgaft/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nvurgaft/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nvurgaft/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nvurgaft/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/nvurgaft/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/nvurgaft/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/nvurgaft/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/nvurgaft/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/nvurgaft/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nvurgaft/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nvurgaft/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nvurgaft/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nvurgaft/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/nvurgaft/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nvurgaft/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/nvurgaft/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nvurgaft/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/nvurgaft/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/nvurgaft/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nvurgaft/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nvurgaft/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nvurgaft/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/nvurgaft/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/nvurgaft/nand2tetris/deployments", + "created_at": "2014-11-29T12:54:06Z", + "updated_at": "2014-12-01T21:52:45Z", + "pushed_at": "2014-12-01T21:52:44Z", + "git_url": "git://github.com/nvurgaft/nand2tetris.git", + "ssh_url": "git@github.com:nvurgaft/nand2tetris.git", + "clone_url": "https://github.com/nvurgaft/nand2tetris.git", + "svn_url": "https://github.com/nvurgaft/nand2tetris", + "homepage": null, + "size": 160, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + }, + { + "id": 24871386, + "name": "nand2tetris", + "full_name": "gtw/nand2tetris", + "owner": { + "login": "gtw", + "id": 3296766, + "avatar_url": "https://avatars.githubusercontent.com/u/3296766?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gtw", + "html_url": "https://github.com/gtw", + "followers_url": "https://api.github.com/users/gtw/followers", + "following_url": "https://api.github.com/users/gtw/following{/other_user}", + "gists_url": "https://api.github.com/users/gtw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gtw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gtw/subscriptions", + "organizations_url": "https://api.github.com/users/gtw/orgs", + "repos_url": "https://api.github.com/users/gtw/repos", + "events_url": "https://api.github.com/users/gtw/events{/privacy}", + "received_events_url": "https://api.github.com/users/gtw/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/gtw/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/gtw/nand2tetris", + "forks_url": "https://api.github.com/repos/gtw/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/gtw/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gtw/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gtw/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/gtw/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/gtw/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/gtw/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/gtw/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/gtw/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/gtw/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/gtw/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gtw/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gtw/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gtw/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gtw/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gtw/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/gtw/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/gtw/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/gtw/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/gtw/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/gtw/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gtw/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gtw/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gtw/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gtw/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/gtw/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gtw/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/gtw/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gtw/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/gtw/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/gtw/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gtw/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gtw/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gtw/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/gtw/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/gtw/nand2tetris/deployments", + "created_at": "2014-10-07T00:44:07Z", + "updated_at": "2014-10-07T00:51:22Z", + "pushed_at": "2014-10-07T11:29:41Z", + "git_url": "git://github.com/gtw/nand2tetris.git", + "ssh_url": "git@github.com:gtw/nand2tetris.git", + "clone_url": "https://github.com/gtw/nand2tetris.git", + "svn_url": "https://github.com/gtw/nand2tetris", + "homepage": null, + "size": 652, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2256632 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:17 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "479713", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "27", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "link": "; rel=\"next\", ; rel=\"last\", ; rel=\"first\", ; rel=\"prev\"", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "474556b853193c38f1b14328ce2d1b7d", + "x-github-request-id": "AE1408AB:F651:91B9A01:5769F4B4" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/repositories?q=tetris+language%3Aassembly&sort=stars&order=desc&type=all&per_page=100&page=4&q=tetris+language:assembly&sort=stars&order=desc&type=all&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 473, + "incomplete_results": false, + "items": [ + { + "id": 16805911, + "name": "nand2tetris", + "full_name": "stuartsan/nand2tetris", + "owner": { + "login": "stuartsan", + "id": 1724544, + "avatar_url": "https://avatars.githubusercontent.com/u/1724544?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/stuartsan", + "html_url": "https://github.com/stuartsan", + "followers_url": "https://api.github.com/users/stuartsan/followers", + "following_url": "https://api.github.com/users/stuartsan/following{/other_user}", + "gists_url": "https://api.github.com/users/stuartsan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/stuartsan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/stuartsan/subscriptions", + "organizations_url": "https://api.github.com/users/stuartsan/orgs", + "repos_url": "https://api.github.com/users/stuartsan/repos", + "events_url": "https://api.github.com/users/stuartsan/events{/privacy}", + "received_events_url": "https://api.github.com/users/stuartsan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/stuartsan/nand2tetris", + "description": "The Elements of Computing Systems course from nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/stuartsan/nand2tetris", + "forks_url": "https://api.github.com/repos/stuartsan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/stuartsan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/stuartsan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/stuartsan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/stuartsan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/stuartsan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/stuartsan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/stuartsan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/stuartsan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/stuartsan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/stuartsan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/stuartsan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/stuartsan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/stuartsan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/stuartsan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/stuartsan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/stuartsan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/stuartsan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/stuartsan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/stuartsan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/stuartsan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/stuartsan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/stuartsan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/stuartsan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/stuartsan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/stuartsan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/stuartsan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/stuartsan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/stuartsan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/stuartsan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/stuartsan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/stuartsan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/stuartsan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/stuartsan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/stuartsan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/stuartsan/nand2tetris/deployments", + "created_at": "2014-02-13T14:49:27Z", + "updated_at": "2014-04-11T00:22:54Z", + "pushed_at": "2014-04-11T00:22:55Z", + "git_url": "git://github.com/stuartsan/nand2tetris.git", + "ssh_url": "git@github.com:stuartsan/nand2tetris.git", + "clone_url": "https://github.com/stuartsan/nand2tetris.git", + "svn_url": "https://github.com/stuartsan/nand2tetris", + "homepage": null, + "size": 804, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 26594067, + "name": "nand2tetris", + "full_name": "JoyP/nand2tetris", + "owner": { + "login": "JoyP", + "id": 5505164, + "avatar_url": "https://avatars.githubusercontent.com/u/5505164?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/JoyP", + "html_url": "https://github.com/JoyP", + "followers_url": "https://api.github.com/users/JoyP/followers", + "following_url": "https://api.github.com/users/JoyP/following{/other_user}", + "gists_url": "https://api.github.com/users/JoyP/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JoyP/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JoyP/subscriptions", + "organizations_url": "https://api.github.com/users/JoyP/orgs", + "repos_url": "https://api.github.com/users/JoyP/repos", + "events_url": "https://api.github.com/users/JoyP/events{/privacy}", + "received_events_url": "https://api.github.com/users/JoyP/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/JoyP/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/JoyP/nand2tetris", + "forks_url": "https://api.github.com/repos/JoyP/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/JoyP/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/JoyP/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/JoyP/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/JoyP/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/JoyP/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/JoyP/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/JoyP/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/JoyP/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/JoyP/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/JoyP/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/JoyP/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/JoyP/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/JoyP/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/JoyP/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/JoyP/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/JoyP/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/JoyP/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/JoyP/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/JoyP/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/JoyP/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/JoyP/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/JoyP/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/JoyP/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/JoyP/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/JoyP/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/JoyP/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/JoyP/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/JoyP/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/JoyP/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/JoyP/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/JoyP/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/JoyP/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/JoyP/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/JoyP/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/JoyP/nand2tetris/deployments", + "created_at": "2014-11-13T15:27:37Z", + "updated_at": "2014-11-13T15:29:00Z", + "pushed_at": "2014-11-13T15:29:00Z", + "git_url": "git://github.com/JoyP/nand2tetris.git", + "ssh_url": "git@github.com:JoyP/nand2tetris.git", + "clone_url": "https://github.com/JoyP/nand2tetris.git", + "svn_url": "https://github.com/JoyP/nand2tetris", + "homepage": null, + "size": 616, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 26594230, + "name": "nand2tetris", + "full_name": "shrutijalewar/nand2tetris", + "owner": { + "login": "shrutijalewar", + "id": 7443067, + "avatar_url": "https://avatars.githubusercontent.com/u/7443067?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/shrutijalewar", + "html_url": "https://github.com/shrutijalewar", + "followers_url": "https://api.github.com/users/shrutijalewar/followers", + "following_url": "https://api.github.com/users/shrutijalewar/following{/other_user}", + "gists_url": "https://api.github.com/users/shrutijalewar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/shrutijalewar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/shrutijalewar/subscriptions", + "organizations_url": "https://api.github.com/users/shrutijalewar/orgs", + "repos_url": "https://api.github.com/users/shrutijalewar/repos", + "events_url": "https://api.github.com/users/shrutijalewar/events{/privacy}", + "received_events_url": "https://api.github.com/users/shrutijalewar/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/shrutijalewar/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/shrutijalewar/nand2tetris", + "forks_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/shrutijalewar/nand2tetris/deployments", + "created_at": "2014-11-13T15:30:58Z", + "updated_at": "2014-11-13T15:32:03Z", + "pushed_at": "2014-11-13T15:32:03Z", + "git_url": "git://github.com/shrutijalewar/nand2tetris.git", + "ssh_url": "git@github.com:shrutijalewar/nand2tetris.git", + "clone_url": "https://github.com/shrutijalewar/nand2tetris.git", + "svn_url": "https://github.com/shrutijalewar/nand2tetris", + "homepage": null, + "size": 616, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 26547434, + "name": "nand2tetris", + "full_name": "jjsub/nand2tetris", + "owner": { + "login": "jjsub", + "id": 7912104, + "avatar_url": "https://avatars.githubusercontent.com/u/7912104?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jjsub", + "html_url": "https://github.com/jjsub", + "followers_url": "https://api.github.com/users/jjsub/followers", + "following_url": "https://api.github.com/users/jjsub/following{/other_user}", + "gists_url": "https://api.github.com/users/jjsub/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jjsub/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jjsub/subscriptions", + "organizations_url": "https://api.github.com/users/jjsub/orgs", + "repos_url": "https://api.github.com/users/jjsub/repos", + "events_url": "https://api.github.com/users/jjsub/events{/privacy}", + "received_events_url": "https://api.github.com/users/jjsub/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jjsub/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jjsub/nand2tetris", + "forks_url": "https://api.github.com/repos/jjsub/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jjsub/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jjsub/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jjsub/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jjsub/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jjsub/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jjsub/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jjsub/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jjsub/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jjsub/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jjsub/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jjsub/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jjsub/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jjsub/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jjsub/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jjsub/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jjsub/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jjsub/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jjsub/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jjsub/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jjsub/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jjsub/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jjsub/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jjsub/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jjsub/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jjsub/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jjsub/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jjsub/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jjsub/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jjsub/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jjsub/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jjsub/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jjsub/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jjsub/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jjsub/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jjsub/nand2tetris/deployments", + "created_at": "2014-11-12T17:27:14Z", + "updated_at": "2014-11-12T17:28:01Z", + "pushed_at": "2014-11-12T17:28:35Z", + "git_url": "git://github.com/jjsub/nand2tetris.git", + "ssh_url": "git@github.com:jjsub/nand2tetris.git", + "clone_url": "https://github.com/jjsub/nand2tetris.git", + "svn_url": "https://github.com/jjsub/nand2tetris", + "homepage": null, + "size": 640, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 30328803, + "name": "nand2tetris", + "full_name": "bpollack/nand2tetris", + "owner": { + "login": "bpollack", + "id": 14799, + "avatar_url": "https://avatars.githubusercontent.com/u/14799?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bpollack", + "html_url": "https://github.com/bpollack", + "followers_url": "https://api.github.com/users/bpollack/followers", + "following_url": "https://api.github.com/users/bpollack/following{/other_user}", + "gists_url": "https://api.github.com/users/bpollack/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bpollack/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bpollack/subscriptions", + "organizations_url": "https://api.github.com/users/bpollack/orgs", + "repos_url": "https://api.github.com/users/bpollack/repos", + "events_url": "https://api.github.com/users/bpollack/events{/privacy}", + "received_events_url": "https://api.github.com/users/bpollack/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bpollack/nand2tetris", + "description": "My efforts to work through the Elements of Computing", + "fork": false, + "url": "https://api.github.com/repos/bpollack/nand2tetris", + "forks_url": "https://api.github.com/repos/bpollack/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bpollack/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bpollack/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bpollack/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bpollack/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bpollack/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bpollack/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bpollack/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bpollack/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bpollack/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bpollack/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bpollack/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bpollack/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bpollack/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bpollack/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bpollack/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bpollack/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bpollack/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bpollack/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bpollack/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bpollack/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bpollack/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bpollack/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bpollack/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bpollack/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bpollack/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bpollack/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bpollack/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bpollack/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bpollack/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bpollack/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bpollack/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bpollack/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bpollack/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bpollack/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bpollack/nand2tetris/deployments", + "created_at": "2015-02-05T00:19:20Z", + "updated_at": "2015-02-05T00:22:44Z", + "pushed_at": "2015-02-05T00:22:07Z", + "git_url": "git://github.com/bpollack/nand2tetris.git", + "ssh_url": "git@github.com:bpollack/nand2tetris.git", + "clone_url": "https://github.com/bpollack/nand2tetris.git", + "svn_url": "https://github.com/bpollack/nand2tetris", + "homepage": "", + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 30840497, + "name": "nand2tetris", + "full_name": "wspurgin/nand2tetris", + "owner": { + "login": "wspurgin", + "id": 3472781, + "avatar_url": "https://avatars.githubusercontent.com/u/3472781?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wspurgin", + "html_url": "https://github.com/wspurgin", + "followers_url": "https://api.github.com/users/wspurgin/followers", + "following_url": "https://api.github.com/users/wspurgin/following{/other_user}", + "gists_url": "https://api.github.com/users/wspurgin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wspurgin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wspurgin/subscriptions", + "organizations_url": "https://api.github.com/users/wspurgin/orgs", + "repos_url": "https://api.github.com/users/wspurgin/repos", + "events_url": "https://api.github.com/users/wspurgin/events{/privacy}", + "received_events_url": "https://api.github.com/users/wspurgin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wspurgin/nand2tetris", + "description": "Code and examples from the popular Nand2Tetris course.", + "fork": false, + "url": "https://api.github.com/repos/wspurgin/nand2tetris", + "forks_url": "https://api.github.com/repos/wspurgin/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/wspurgin/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wspurgin/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wspurgin/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/wspurgin/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/wspurgin/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/wspurgin/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/wspurgin/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/wspurgin/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/wspurgin/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/wspurgin/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wspurgin/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wspurgin/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wspurgin/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wspurgin/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wspurgin/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/wspurgin/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/wspurgin/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/wspurgin/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/wspurgin/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/wspurgin/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wspurgin/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wspurgin/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wspurgin/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wspurgin/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/wspurgin/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wspurgin/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/wspurgin/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wspurgin/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/wspurgin/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/wspurgin/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wspurgin/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wspurgin/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wspurgin/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/wspurgin/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/wspurgin/nand2tetris/deployments", + "created_at": "2015-02-15T20:17:09Z", + "updated_at": "2015-02-15T20:20:21Z", + "pushed_at": "2015-02-15T20:20:20Z", + "git_url": "git://github.com/wspurgin/nand2tetris.git", + "ssh_url": "git@github.com:wspurgin/nand2tetris.git", + "clone_url": "https://github.com/wspurgin/nand2tetris.git", + "svn_url": "https://github.com/wspurgin/nand2tetris", + "homepage": null, + "size": 672, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 30083405, + "name": "nand2tetris", + "full_name": "lcapkovic/nand2tetris", + "owner": { + "login": "lcapkovic", + "id": 3610850, + "avatar_url": "https://avatars.githubusercontent.com/u/3610850?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lcapkovic", + "html_url": "https://github.com/lcapkovic", + "followers_url": "https://api.github.com/users/lcapkovic/followers", + "following_url": "https://api.github.com/users/lcapkovic/following{/other_user}", + "gists_url": "https://api.github.com/users/lcapkovic/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lcapkovic/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lcapkovic/subscriptions", + "organizations_url": "https://api.github.com/users/lcapkovic/orgs", + "repos_url": "https://api.github.com/users/lcapkovic/repos", + "events_url": "https://api.github.com/users/lcapkovic/events{/privacy}", + "received_events_url": "https://api.github.com/users/lcapkovic/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lcapkovic/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/lcapkovic/nand2tetris", + "forks_url": "https://api.github.com/repos/lcapkovic/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lcapkovic/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lcapkovic/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lcapkovic/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lcapkovic/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lcapkovic/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lcapkovic/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lcapkovic/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lcapkovic/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lcapkovic/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lcapkovic/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lcapkovic/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lcapkovic/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lcapkovic/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lcapkovic/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lcapkovic/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lcapkovic/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lcapkovic/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lcapkovic/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lcapkovic/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lcapkovic/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lcapkovic/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lcapkovic/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lcapkovic/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lcapkovic/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lcapkovic/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lcapkovic/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lcapkovic/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lcapkovic/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lcapkovic/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lcapkovic/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lcapkovic/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lcapkovic/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lcapkovic/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lcapkovic/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lcapkovic/nand2tetris/deployments", + "created_at": "2015-01-30T17:39:25Z", + "updated_at": "2015-02-10T01:04:54Z", + "pushed_at": "2015-02-10T01:04:54Z", + "git_url": "git://github.com/lcapkovic/nand2tetris.git", + "ssh_url": "git@github.com:lcapkovic/nand2tetris.git", + "clone_url": "https://github.com/lcapkovic/nand2tetris.git", + "svn_url": "https://github.com/lcapkovic/nand2tetris", + "homepage": null, + "size": 164, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 42319493, + "name": "NAND2TETRIS", + "full_name": "dheerajgopi/NAND2TETRIS", + "owner": { + "login": "dheerajgopi", + "id": 10149950, + "avatar_url": "https://avatars.githubusercontent.com/u/10149950?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dheerajgopi", + "html_url": "https://github.com/dheerajgopi", + "followers_url": "https://api.github.com/users/dheerajgopi/followers", + "following_url": "https://api.github.com/users/dheerajgopi/following{/other_user}", + "gists_url": "https://api.github.com/users/dheerajgopi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dheerajgopi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dheerajgopi/subscriptions", + "organizations_url": "https://api.github.com/users/dheerajgopi/orgs", + "repos_url": "https://api.github.com/users/dheerajgopi/repos", + "events_url": "https://api.github.com/users/dheerajgopi/events{/privacy}", + "received_events_url": "https://api.github.com/users/dheerajgopi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dheerajgopi/NAND2TETRIS", + "description": "HDL Codes for Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS", + "forks_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/forks", + "keys_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/teams", + "hooks_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/hooks", + "issue_events_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/issues/events{/number}", + "events_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/events", + "assignees_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/assignees{/user}", + "branches_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/branches{/branch}", + "tags_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/tags", + "blobs_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/languages", + "stargazers_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/stargazers", + "contributors_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/contributors", + "subscribers_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/subscribers", + "subscription_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/subscription", + "commits_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/contents/{+path}", + "compare_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/merges", + "archive_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/downloads", + "issues_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/issues{/number}", + "pulls_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/labels{/name}", + "releases_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/releases{/id}", + "deployments_url": "https://api.github.com/repos/dheerajgopi/NAND2TETRIS/deployments", + "created_at": "2015-09-11T16:22:16Z", + "updated_at": "2015-09-11T16:23:21Z", + "pushed_at": "2015-09-11T16:23:21Z", + "git_url": "git://github.com/dheerajgopi/NAND2TETRIS.git", + "ssh_url": "git@github.com:dheerajgopi/NAND2TETRIS.git", + "clone_url": "https://github.com/dheerajgopi/NAND2TETRIS.git", + "svn_url": "https://github.com/dheerajgopi/NAND2TETRIS", + "homepage": null, + "size": 212, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 42456730, + "name": "nand2tetris", + "full_name": "jdangerx/nand2tetris", + "owner": { + "login": "jdangerx", + "id": 2495794, + "avatar_url": "https://avatars.githubusercontent.com/u/2495794?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jdangerx", + "html_url": "https://github.com/jdangerx", + "followers_url": "https://api.github.com/users/jdangerx/followers", + "following_url": "https://api.github.com/users/jdangerx/following{/other_user}", + "gists_url": "https://api.github.com/users/jdangerx/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jdangerx/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jdangerx/subscriptions", + "organizations_url": "https://api.github.com/users/jdangerx/orgs", + "repos_url": "https://api.github.com/users/jdangerx/repos", + "events_url": "https://api.github.com/users/jdangerx/events{/privacy}", + "received_events_url": "https://api.github.com/users/jdangerx/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jdangerx/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/jdangerx/nand2tetris", + "forks_url": "https://api.github.com/repos/jdangerx/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jdangerx/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jdangerx/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jdangerx/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jdangerx/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jdangerx/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jdangerx/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jdangerx/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jdangerx/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jdangerx/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jdangerx/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jdangerx/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jdangerx/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jdangerx/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jdangerx/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jdangerx/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jdangerx/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jdangerx/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jdangerx/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jdangerx/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jdangerx/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jdangerx/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jdangerx/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jdangerx/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jdangerx/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jdangerx/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jdangerx/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jdangerx/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jdangerx/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jdangerx/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jdangerx/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jdangerx/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jdangerx/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jdangerx/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jdangerx/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jdangerx/nand2tetris/deployments", + "created_at": "2015-09-14T15:17:37Z", + "updated_at": "2015-09-14T15:18:11Z", + "pushed_at": "2015-10-01T00:09:16Z", + "git_url": "git://github.com/jdangerx/nand2tetris.git", + "ssh_url": "git@github.com:jdangerx/nand2tetris.git", + "clone_url": "https://github.com/jdangerx/nand2tetris.git", + "svn_url": "https://github.com/jdangerx/nand2tetris", + "homepage": null, + "size": 412, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 32441485, + "name": "nand2tetris", + "full_name": "kobylin/nand2tetris", + "owner": { + "login": "kobylin", + "id": 1272300, + "avatar_url": "https://avatars.githubusercontent.com/u/1272300?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kobylin", + "html_url": "https://github.com/kobylin", + "followers_url": "https://api.github.com/users/kobylin/followers", + "following_url": "https://api.github.com/users/kobylin/following{/other_user}", + "gists_url": "https://api.github.com/users/kobylin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kobylin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kobylin/subscriptions", + "organizations_url": "https://api.github.com/users/kobylin/orgs", + "repos_url": "https://api.github.com/users/kobylin/repos", + "events_url": "https://api.github.com/users/kobylin/events{/privacy}", + "received_events_url": "https://api.github.com/users/kobylin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kobylin/nand2tetris", + "description": "Implementation of projects from this course http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/kobylin/nand2tetris", + "forks_url": "https://api.github.com/repos/kobylin/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kobylin/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kobylin/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kobylin/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kobylin/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kobylin/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kobylin/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kobylin/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kobylin/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kobylin/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kobylin/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kobylin/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kobylin/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kobylin/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kobylin/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kobylin/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kobylin/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kobylin/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kobylin/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kobylin/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kobylin/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kobylin/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kobylin/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kobylin/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kobylin/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kobylin/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kobylin/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kobylin/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kobylin/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kobylin/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kobylin/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kobylin/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kobylin/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kobylin/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kobylin/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kobylin/nand2tetris/deployments", + "created_at": "2015-03-18T06:18:05Z", + "updated_at": "2015-03-18T06:36:51Z", + "pushed_at": "2015-03-18T06:36:50Z", + "git_url": "git://github.com/kobylin/nand2tetris.git", + "ssh_url": "git@github.com:kobylin/nand2tetris.git", + "clone_url": "https://github.com/kobylin/nand2tetris.git", + "svn_url": "https://github.com/kobylin/nand2tetris", + "homepage": null, + "size": 300, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 38312141, + "name": "nand2tetris", + "full_name": "tkokamo/nand2tetris", + "owner": { + "login": "tkokamo", + "id": 6091799, + "avatar_url": "https://avatars.githubusercontent.com/u/6091799?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tkokamo", + "html_url": "https://github.com/tkokamo", + "followers_url": "https://api.github.com/users/tkokamo/followers", + "following_url": "https://api.github.com/users/tkokamo/following{/other_user}", + "gists_url": "https://api.github.com/users/tkokamo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tkokamo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tkokamo/subscriptions", + "organizations_url": "https://api.github.com/users/tkokamo/orgs", + "repos_url": "https://api.github.com/users/tkokamo/repos", + "events_url": "https://api.github.com/users/tkokamo/events{/privacy}", + "received_events_url": "https://api.github.com/users/tkokamo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tkokamo/nand2tetris", + "description": "implement nand2tetris ", + "fork": false, + "url": "https://api.github.com/repos/tkokamo/nand2tetris", + "forks_url": "https://api.github.com/repos/tkokamo/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tkokamo/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tkokamo/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tkokamo/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tkokamo/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tkokamo/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tkokamo/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tkokamo/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tkokamo/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tkokamo/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tkokamo/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tkokamo/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tkokamo/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tkokamo/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tkokamo/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tkokamo/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tkokamo/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tkokamo/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tkokamo/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tkokamo/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tkokamo/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tkokamo/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tkokamo/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tkokamo/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tkokamo/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tkokamo/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tkokamo/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tkokamo/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tkokamo/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tkokamo/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tkokamo/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tkokamo/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tkokamo/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tkokamo/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tkokamo/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tkokamo/nand2tetris/deployments", + "created_at": "2015-06-30T13:55:09Z", + "updated_at": "2015-07-08T18:00:26Z", + "pushed_at": "2015-07-08T17:50:15Z", + "git_url": "git://github.com/tkokamo/nand2tetris.git", + "ssh_url": "git@github.com:tkokamo/nand2tetris.git", + "clone_url": "https://github.com/tkokamo/nand2tetris.git", + "svn_url": "https://github.com/tkokamo/nand2tetris", + "homepage": "", + "size": 304, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 38347774, + "name": "nand2tetris", + "full_name": "candrews800/nand2tetris", + "owner": { + "login": "candrews800", + "id": 5778644, + "avatar_url": "https://avatars.githubusercontent.com/u/5778644?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/candrews800", + "html_url": "https://github.com/candrews800", + "followers_url": "https://api.github.com/users/candrews800/followers", + "following_url": "https://api.github.com/users/candrews800/following{/other_user}", + "gists_url": "https://api.github.com/users/candrews800/gists{/gist_id}", + "starred_url": "https://api.github.com/users/candrews800/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/candrews800/subscriptions", + "organizations_url": "https://api.github.com/users/candrews800/orgs", + "repos_url": "https://api.github.com/users/candrews800/repos", + "events_url": "https://api.github.com/users/candrews800/events{/privacy}", + "received_events_url": "https://api.github.com/users/candrews800/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/candrews800/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/candrews800/nand2tetris", + "forks_url": "https://api.github.com/repos/candrews800/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/candrews800/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/candrews800/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/candrews800/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/candrews800/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/candrews800/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/candrews800/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/candrews800/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/candrews800/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/candrews800/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/candrews800/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/candrews800/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/candrews800/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/candrews800/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/candrews800/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/candrews800/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/candrews800/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/candrews800/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/candrews800/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/candrews800/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/candrews800/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/candrews800/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/candrews800/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/candrews800/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/candrews800/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/candrews800/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/candrews800/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/candrews800/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/candrews800/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/candrews800/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/candrews800/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/candrews800/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/candrews800/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/candrews800/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/candrews800/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/candrews800/nand2tetris/deployments", + "created_at": "2015-07-01T03:34:58Z", + "updated_at": "2015-07-03T05:00:04Z", + "pushed_at": "2015-07-03T05:00:03Z", + "git_url": "git://github.com/candrews800/nand2tetris.git", + "ssh_url": "git@github.com:candrews800/nand2tetris.git", + "clone_url": "https://github.com/candrews800/nand2tetris.git", + "svn_url": "https://github.com/candrews800/nand2tetris", + "homepage": null, + "size": 624, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 42001206, + "name": "nand2tetris", + "full_name": "dinnu93/nand2tetris", + "owner": { + "login": "dinnu93", + "id": 3586932, + "avatar_url": "https://avatars.githubusercontent.com/u/3586932?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dinnu93", + "html_url": "https://github.com/dinnu93", + "followers_url": "https://api.github.com/users/dinnu93/followers", + "following_url": "https://api.github.com/users/dinnu93/following{/other_user}", + "gists_url": "https://api.github.com/users/dinnu93/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dinnu93/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dinnu93/subscriptions", + "organizations_url": "https://api.github.com/users/dinnu93/orgs", + "repos_url": "https://api.github.com/users/dinnu93/repos", + "events_url": "https://api.github.com/users/dinnu93/events{/privacy}", + "received_events_url": "https://api.github.com/users/dinnu93/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dinnu93/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dinnu93/nand2tetris", + "forks_url": "https://api.github.com/repos/dinnu93/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dinnu93/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dinnu93/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dinnu93/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dinnu93/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dinnu93/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dinnu93/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dinnu93/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dinnu93/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dinnu93/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dinnu93/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dinnu93/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dinnu93/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dinnu93/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dinnu93/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dinnu93/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dinnu93/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dinnu93/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dinnu93/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dinnu93/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dinnu93/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dinnu93/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dinnu93/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dinnu93/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dinnu93/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dinnu93/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dinnu93/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dinnu93/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dinnu93/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dinnu93/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dinnu93/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dinnu93/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dinnu93/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dinnu93/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dinnu93/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dinnu93/nand2tetris/deployments", + "created_at": "2015-09-06T12:06:47Z", + "updated_at": "2015-09-06T12:07:21Z", + "pushed_at": "2015-10-01T07:33:02Z", + "git_url": "git://github.com/dinnu93/nand2tetris.git", + "ssh_url": "git@github.com:dinnu93/nand2tetris.git", + "clone_url": "https://github.com/dinnu93/nand2tetris.git", + "svn_url": "https://github.com/dinnu93/nand2tetris", + "homepage": null, + "size": 692, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 41644772, + "name": "nand2tetris", + "full_name": "kevin-mccann/nand2tetris", + "owner": { + "login": "kevin-mccann", + "id": 6790130, + "avatar_url": "https://avatars.githubusercontent.com/u/6790130?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kevin-mccann", + "html_url": "https://github.com/kevin-mccann", + "followers_url": "https://api.github.com/users/kevin-mccann/followers", + "following_url": "https://api.github.com/users/kevin-mccann/following{/other_user}", + "gists_url": "https://api.github.com/users/kevin-mccann/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kevin-mccann/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kevin-mccann/subscriptions", + "organizations_url": "https://api.github.com/users/kevin-mccann/orgs", + "repos_url": "https://api.github.com/users/kevin-mccann/repos", + "events_url": "https://api.github.com/users/kevin-mccann/events{/privacy}", + "received_events_url": "https://api.github.com/users/kevin-mccann/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kevin-mccann/nand2tetris", + "description": "Building a Modern Computer from First Principles", + "fork": false, + "url": "https://api.github.com/repos/kevin-mccann/nand2tetris", + "forks_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kevin-mccann/nand2tetris/deployments", + "created_at": "2015-08-30T22:13:16Z", + "updated_at": "2015-08-30T22:14:45Z", + "pushed_at": "2015-09-02T06:47:49Z", + "git_url": "git://github.com/kevin-mccann/nand2tetris.git", + "ssh_url": "git@github.com:kevin-mccann/nand2tetris.git", + "clone_url": "https://github.com/kevin-mccann/nand2tetris.git", + "svn_url": "https://github.com/kevin-mccann/nand2tetris", + "homepage": null, + "size": 764, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 40097911, + "name": "nand2tetris", + "full_name": "richardartoul/nand2tetris", + "owner": { + "login": "richardartoul", + "id": 9171254, + "avatar_url": "https://avatars.githubusercontent.com/u/9171254?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/richardartoul", + "html_url": "https://github.com/richardartoul", + "followers_url": "https://api.github.com/users/richardartoul/followers", + "following_url": "https://api.github.com/users/richardartoul/following{/other_user}", + "gists_url": "https://api.github.com/users/richardartoul/gists{/gist_id}", + "starred_url": "https://api.github.com/users/richardartoul/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/richardartoul/subscriptions", + "organizations_url": "https://api.github.com/users/richardartoul/orgs", + "repos_url": "https://api.github.com/users/richardartoul/repos", + "events_url": "https://api.github.com/users/richardartoul/events{/privacy}", + "received_events_url": "https://api.github.com/users/richardartoul/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/richardartoul/nand2tetris", + "description": "Creating a general purpose computer system, starting from NAND gates all the way up to an implementation of Tetris", + "fork": false, + "url": "https://api.github.com/repos/richardartoul/nand2tetris", + "forks_url": "https://api.github.com/repos/richardartoul/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/richardartoul/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/richardartoul/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/richardartoul/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/richardartoul/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/richardartoul/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/richardartoul/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/richardartoul/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/richardartoul/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/richardartoul/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/richardartoul/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/richardartoul/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/richardartoul/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/richardartoul/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/richardartoul/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/richardartoul/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/richardartoul/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/richardartoul/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/richardartoul/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/richardartoul/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/richardartoul/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/richardartoul/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/richardartoul/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/richardartoul/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/richardartoul/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/richardartoul/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/richardartoul/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/richardartoul/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/richardartoul/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/richardartoul/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/richardartoul/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/richardartoul/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/richardartoul/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/richardartoul/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/richardartoul/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/richardartoul/nand2tetris/deployments", + "created_at": "2015-08-03T00:48:12Z", + "updated_at": "2015-08-03T00:48:43Z", + "pushed_at": "2015-10-09T21:42:48Z", + "git_url": "git://github.com/richardartoul/nand2tetris.git", + "ssh_url": "git@github.com:richardartoul/nand2tetris.git", + "clone_url": "https://github.com/richardartoul/nand2tetris.git", + "svn_url": "https://github.com/richardartoul/nand2tetris", + "homepage": null, + "size": 816, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34713603, + "name": "nand2tetris", + "full_name": "bon-chi/nand2tetris", + "owner": { + "login": "bon-chi", + "id": 5237032, + "avatar_url": "https://avatars.githubusercontent.com/u/5237032?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bon-chi", + "html_url": "https://github.com/bon-chi", + "followers_url": "https://api.github.com/users/bon-chi/followers", + "following_url": "https://api.github.com/users/bon-chi/following{/other_user}", + "gists_url": "https://api.github.com/users/bon-chi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bon-chi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bon-chi/subscriptions", + "organizations_url": "https://api.github.com/users/bon-chi/orgs", + "repos_url": "https://api.github.com/users/bon-chi/repos", + "events_url": "https://api.github.com/users/bon-chi/events{/privacy}", + "received_events_url": "https://api.github.com/users/bon-chi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bon-chi/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/bon-chi/nand2tetris", + "forks_url": "https://api.github.com/repos/bon-chi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bon-chi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bon-chi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bon-chi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bon-chi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bon-chi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bon-chi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bon-chi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bon-chi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bon-chi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bon-chi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bon-chi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bon-chi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bon-chi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bon-chi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bon-chi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bon-chi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bon-chi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bon-chi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bon-chi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bon-chi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bon-chi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bon-chi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bon-chi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bon-chi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bon-chi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bon-chi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bon-chi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bon-chi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bon-chi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bon-chi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bon-chi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bon-chi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bon-chi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bon-chi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bon-chi/nand2tetris/deployments", + "created_at": "2015-04-28T06:43:25Z", + "updated_at": "2015-04-28T16:48:20Z", + "pushed_at": "2015-06-06T05:41:23Z", + "git_url": "git://github.com/bon-chi/nand2tetris.git", + "ssh_url": "git@github.com:bon-chi/nand2tetris.git", + "clone_url": "https://github.com/bon-chi/nand2tetris.git", + "svn_url": "https://github.com/bon-chi/nand2tetris", + "homepage": null, + "size": 456, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 35539833, + "name": "coursera-nand2tetris", + "full_name": "Paulche/coursera-nand2tetris", + "owner": { + "login": "Paulche", + "id": 554135, + "avatar_url": "https://avatars.githubusercontent.com/u/554135?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Paulche", + "html_url": "https://github.com/Paulche", + "followers_url": "https://api.github.com/users/Paulche/followers", + "following_url": "https://api.github.com/users/Paulche/following{/other_user}", + "gists_url": "https://api.github.com/users/Paulche/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Paulche/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Paulche/subscriptions", + "organizations_url": "https://api.github.com/users/Paulche/orgs", + "repos_url": "https://api.github.com/users/Paulche/repos", + "events_url": "https://api.github.com/users/Paulche/events{/privacy}", + "received_events_url": "https://api.github.com/users/Paulche/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Paulche/coursera-nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Paulche/coursera-nand2tetris", + "forks_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Paulche/coursera-nand2tetris/deployments", + "created_at": "2015-05-13T09:21:50Z", + "updated_at": "2015-06-08T06:55:35Z", + "pushed_at": "2015-06-14T08:06:08Z", + "git_url": "git://github.com/Paulche/coursera-nand2tetris.git", + "ssh_url": "git@github.com:Paulche/coursera-nand2tetris.git", + "clone_url": "https://github.com/Paulche/coursera-nand2tetris.git", + "svn_url": "https://github.com/Paulche/coursera-nand2tetris", + "homepage": null, + "size": 1967, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34464842, + "name": "Nand2Tetris", + "full_name": "yejiming/Nand2Tetris", + "owner": { + "login": "yejiming", + "id": 10279806, + "avatar_url": "https://avatars.githubusercontent.com/u/10279806?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yejiming", + "html_url": "https://github.com/yejiming", + "followers_url": "https://api.github.com/users/yejiming/followers", + "following_url": "https://api.github.com/users/yejiming/following{/other_user}", + "gists_url": "https://api.github.com/users/yejiming/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yejiming/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yejiming/subscriptions", + "organizations_url": "https://api.github.com/users/yejiming/orgs", + "repos_url": "https://api.github.com/users/yejiming/repos", + "events_url": "https://api.github.com/users/yejiming/events{/privacy}", + "received_events_url": "https://api.github.com/users/yejiming/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yejiming/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/yejiming/Nand2Tetris", + "forks_url": "https://api.github.com/repos/yejiming/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/yejiming/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yejiming/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yejiming/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/yejiming/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/yejiming/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yejiming/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/yejiming/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yejiming/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yejiming/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/yejiming/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yejiming/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yejiming/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yejiming/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yejiming/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yejiming/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/yejiming/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/yejiming/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/yejiming/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/yejiming/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/yejiming/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yejiming/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yejiming/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yejiming/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yejiming/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yejiming/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yejiming/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/yejiming/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yejiming/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/yejiming/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yejiming/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yejiming/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yejiming/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yejiming/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yejiming/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yejiming/Nand2Tetris/deployments", + "created_at": "2015-04-23T15:30:28Z", + "updated_at": "2015-04-28T14:01:27Z", + "pushed_at": "2015-04-28T14:01:26Z", + "git_url": "git://github.com/yejiming/Nand2Tetris.git", + "ssh_url": "git@github.com:yejiming/Nand2Tetris.git", + "clone_url": "https://github.com/yejiming/Nand2Tetris.git", + "svn_url": "https://github.com/yejiming/Nand2Tetris", + "homepage": null, + "size": 348, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34310079, + "name": "Nand2tetris", + "full_name": "ganeshredcobra/Nand2tetris", + "owner": { + "login": "ganeshredcobra", + "id": 265046, + "avatar_url": "https://avatars.githubusercontent.com/u/265046?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ganeshredcobra", + "html_url": "https://github.com/ganeshredcobra", + "followers_url": "https://api.github.com/users/ganeshredcobra/followers", + "following_url": "https://api.github.com/users/ganeshredcobra/following{/other_user}", + "gists_url": "https://api.github.com/users/ganeshredcobra/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ganeshredcobra/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ganeshredcobra/subscriptions", + "organizations_url": "https://api.github.com/users/ganeshredcobra/orgs", + "repos_url": "https://api.github.com/users/ganeshredcobra/repos", + "events_url": "https://api.github.com/users/ganeshredcobra/events{/privacy}", + "received_events_url": "https://api.github.com/users/ganeshredcobra/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ganeshredcobra/Nand2tetris", + "description": "Coursera Nand2tetris coursework", + "fork": false, + "url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris", + "forks_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ganeshredcobra/Nand2tetris/deployments", + "created_at": "2015-04-21T07:00:37Z", + "updated_at": "2015-04-23T18:32:22Z", + "pushed_at": "2015-04-23T18:32:21Z", + "git_url": "git://github.com/ganeshredcobra/Nand2tetris.git", + "ssh_url": "git@github.com:ganeshredcobra/Nand2tetris.git", + "clone_url": "https://github.com/ganeshredcobra/Nand2tetris.git", + "svn_url": "https://github.com/ganeshredcobra/Nand2tetris", + "homepage": "", + "size": 656, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34239370, + "name": "Nand2Tetris", + "full_name": "oleduc/Nand2Tetris", + "owner": { + "login": "oleduc", + "id": 2044375, + "avatar_url": "https://avatars.githubusercontent.com/u/2044375?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/oleduc", + "html_url": "https://github.com/oleduc", + "followers_url": "https://api.github.com/users/oleduc/followers", + "following_url": "https://api.github.com/users/oleduc/following{/other_user}", + "gists_url": "https://api.github.com/users/oleduc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/oleduc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/oleduc/subscriptions", + "organizations_url": "https://api.github.com/users/oleduc/orgs", + "repos_url": "https://api.github.com/users/oleduc/repos", + "events_url": "https://api.github.com/users/oleduc/events{/privacy}", + "received_events_url": "https://api.github.com/users/oleduc/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/oleduc/Nand2Tetris", + "description": "My solutions for the Nand2Tetris course.", + "fork": false, + "url": "https://api.github.com/repos/oleduc/Nand2Tetris", + "forks_url": "https://api.github.com/repos/oleduc/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/oleduc/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/oleduc/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/oleduc/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/oleduc/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/oleduc/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/oleduc/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/oleduc/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/oleduc/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/oleduc/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/oleduc/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/oleduc/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/oleduc/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/oleduc/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/oleduc/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/oleduc/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/oleduc/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/oleduc/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/oleduc/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/oleduc/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/oleduc/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/oleduc/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/oleduc/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/oleduc/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/oleduc/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/oleduc/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/oleduc/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/oleduc/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/oleduc/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/oleduc/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/oleduc/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/oleduc/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/oleduc/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/oleduc/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/oleduc/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/oleduc/Nand2Tetris/deployments", + "created_at": "2015-04-20T05:13:40Z", + "updated_at": "2015-05-05T01:25:12Z", + "pushed_at": "2015-05-05T01:25:12Z", + "git_url": "git://github.com/oleduc/Nand2Tetris.git", + "ssh_url": "git@github.com:oleduc/Nand2Tetris.git", + "clone_url": "https://github.com/oleduc/Nand2Tetris.git", + "svn_url": "https://github.com/oleduc/Nand2Tetris", + "homepage": null, + "size": 704, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34218531, + "name": "Nand2Tetris", + "full_name": "allarm/Nand2Tetris", + "owner": { + "login": "allarm", + "id": 12021673, + "avatar_url": "https://avatars.githubusercontent.com/u/12021673?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/allarm", + "html_url": "https://github.com/allarm", + "followers_url": "https://api.github.com/users/allarm/followers", + "following_url": "https://api.github.com/users/allarm/following{/other_user}", + "gists_url": "https://api.github.com/users/allarm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/allarm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/allarm/subscriptions", + "organizations_url": "https://api.github.com/users/allarm/orgs", + "repos_url": "https://api.github.com/users/allarm/repos", + "events_url": "https://api.github.com/users/allarm/events{/privacy}", + "received_events_url": "https://api.github.com/users/allarm/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/allarm/Nand2Tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/allarm/Nand2Tetris", + "forks_url": "https://api.github.com/repos/allarm/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/allarm/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/allarm/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/allarm/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/allarm/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/allarm/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/allarm/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/allarm/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/allarm/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/allarm/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/allarm/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/allarm/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/allarm/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/allarm/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/allarm/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/allarm/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/allarm/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/allarm/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/allarm/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/allarm/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/allarm/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/allarm/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/allarm/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/allarm/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/allarm/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/allarm/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/allarm/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/allarm/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/allarm/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/allarm/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/allarm/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/allarm/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/allarm/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/allarm/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/allarm/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/allarm/Nand2Tetris/deployments", + "created_at": "2015-04-19T18:23:24Z", + "updated_at": "2015-04-21T20:02:10Z", + "pushed_at": "2015-04-21T20:02:09Z", + "git_url": "git://github.com/allarm/Nand2Tetris.git", + "ssh_url": "git@github.com:allarm/Nand2Tetris.git", + "clone_url": "https://github.com/allarm/Nand2Tetris.git", + "svn_url": "https://github.com/allarm/Nand2Tetris", + "homepage": null, + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34420110, + "name": "nand2tetris", + "full_name": "dstodolny/nand2tetris", + "owner": { + "login": "dstodolny", + "id": 8601093, + "avatar_url": "https://avatars.githubusercontent.com/u/8601093?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dstodolny", + "html_url": "https://github.com/dstodolny", + "followers_url": "https://api.github.com/users/dstodolny/followers", + "following_url": "https://api.github.com/users/dstodolny/following{/other_user}", + "gists_url": "https://api.github.com/users/dstodolny/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dstodolny/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dstodolny/subscriptions", + "organizations_url": "https://api.github.com/users/dstodolny/orgs", + "repos_url": "https://api.github.com/users/dstodolny/repos", + "events_url": "https://api.github.com/users/dstodolny/events{/privacy}", + "received_events_url": "https://api.github.com/users/dstodolny/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dstodolny/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dstodolny/nand2tetris", + "forks_url": "https://api.github.com/repos/dstodolny/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dstodolny/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dstodolny/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dstodolny/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dstodolny/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dstodolny/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dstodolny/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dstodolny/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dstodolny/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dstodolny/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dstodolny/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dstodolny/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dstodolny/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dstodolny/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dstodolny/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dstodolny/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dstodolny/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dstodolny/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dstodolny/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dstodolny/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dstodolny/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dstodolny/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dstodolny/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dstodolny/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dstodolny/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dstodolny/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dstodolny/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dstodolny/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dstodolny/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dstodolny/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dstodolny/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dstodolny/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dstodolny/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dstodolny/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dstodolny/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dstodolny/nand2tetris/deployments", + "created_at": "2015-04-22T22:45:00Z", + "updated_at": "2015-04-30T01:34:21Z", + "pushed_at": "2015-05-28T01:47:33Z", + "git_url": "git://github.com/dstodolny/nand2tetris.git", + "ssh_url": "git@github.com:dstodolny/nand2tetris.git", + "clone_url": "https://github.com/dstodolny/nand2tetris.git", + "svn_url": "https://github.com/dstodolny/nand2tetris", + "homepage": null, + "size": 416, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 33986303, + "name": "from_NAND_to_tetris", + "full_name": "dmmikl86/from_NAND_to_tetris", + "owner": { + "login": "dmmikl86", + "id": 2235191, + "avatar_url": "https://avatars.githubusercontent.com/u/2235191?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dmmikl86", + "html_url": "https://github.com/dmmikl86", + "followers_url": "https://api.github.com/users/dmmikl86/followers", + "following_url": "https://api.github.com/users/dmmikl86/following{/other_user}", + "gists_url": "https://api.github.com/users/dmmikl86/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dmmikl86/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dmmikl86/subscriptions", + "organizations_url": "https://api.github.com/users/dmmikl86/orgs", + "repos_url": "https://api.github.com/users/dmmikl86/repos", + "events_url": "https://api.github.com/users/dmmikl86/events{/privacy}", + "received_events_url": "https://api.github.com/users/dmmikl86/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dmmikl86/from_NAND_to_tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris", + "forks_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/forks", + "keys_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/teams", + "hooks_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/events", + "assignees_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/tags", + "blobs_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/languages", + "stargazers_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/subscription", + "commits_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/merges", + "archive_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/downloads", + "issues_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dmmikl86/from_NAND_to_tetris/deployments", + "created_at": "2015-04-15T09:55:45Z", + "updated_at": "2015-04-29T09:20:42Z", + "pushed_at": "2015-06-03T14:05:03Z", + "git_url": "git://github.com/dmmikl86/from_NAND_to_tetris.git", + "ssh_url": "git@github.com:dmmikl86/from_NAND_to_tetris.git", + "clone_url": "https://github.com/dmmikl86/from_NAND_to_tetris.git", + "svn_url": "https://github.com/dmmikl86/from_NAND_to_tetris", + "homepage": null, + "size": 732, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34038575, + "name": "NandToTetris", + "full_name": "raseshshah/NandToTetris", + "owner": { + "login": "raseshshah", + "id": 3692413, + "avatar_url": "https://avatars.githubusercontent.com/u/3692413?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/raseshshah", + "html_url": "https://github.com/raseshshah", + "followers_url": "https://api.github.com/users/raseshshah/followers", + "following_url": "https://api.github.com/users/raseshshah/following{/other_user}", + "gists_url": "https://api.github.com/users/raseshshah/gists{/gist_id}", + "starred_url": "https://api.github.com/users/raseshshah/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/raseshshah/subscriptions", + "organizations_url": "https://api.github.com/users/raseshshah/orgs", + "repos_url": "https://api.github.com/users/raseshshah/repos", + "events_url": "https://api.github.com/users/raseshshah/events{/privacy}", + "received_events_url": "https://api.github.com/users/raseshshah/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/raseshshah/NandToTetris", + "description": "Developing hack computer as part of NandToTetris coursera course.", + "fork": false, + "url": "https://api.github.com/repos/raseshshah/NandToTetris", + "forks_url": "https://api.github.com/repos/raseshshah/NandToTetris/forks", + "keys_url": "https://api.github.com/repos/raseshshah/NandToTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/raseshshah/NandToTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/raseshshah/NandToTetris/teams", + "hooks_url": "https://api.github.com/repos/raseshshah/NandToTetris/hooks", + "issue_events_url": "https://api.github.com/repos/raseshshah/NandToTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/raseshshah/NandToTetris/events", + "assignees_url": "https://api.github.com/repos/raseshshah/NandToTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/raseshshah/NandToTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/raseshshah/NandToTetris/tags", + "blobs_url": "https://api.github.com/repos/raseshshah/NandToTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/raseshshah/NandToTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/raseshshah/NandToTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/raseshshah/NandToTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/raseshshah/NandToTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/raseshshah/NandToTetris/languages", + "stargazers_url": "https://api.github.com/repos/raseshshah/NandToTetris/stargazers", + "contributors_url": "https://api.github.com/repos/raseshshah/NandToTetris/contributors", + "subscribers_url": "https://api.github.com/repos/raseshshah/NandToTetris/subscribers", + "subscription_url": "https://api.github.com/repos/raseshshah/NandToTetris/subscription", + "commits_url": "https://api.github.com/repos/raseshshah/NandToTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/raseshshah/NandToTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/raseshshah/NandToTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/raseshshah/NandToTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/raseshshah/NandToTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/raseshshah/NandToTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/raseshshah/NandToTetris/merges", + "archive_url": "https://api.github.com/repos/raseshshah/NandToTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/raseshshah/NandToTetris/downloads", + "issues_url": "https://api.github.com/repos/raseshshah/NandToTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/raseshshah/NandToTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/raseshshah/NandToTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/raseshshah/NandToTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/raseshshah/NandToTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/raseshshah/NandToTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/raseshshah/NandToTetris/deployments", + "created_at": "2015-04-16T06:35:09Z", + "updated_at": "2015-04-22T15:17:36Z", + "pushed_at": "2015-04-22T15:17:35Z", + "git_url": "git://github.com/raseshshah/NandToTetris.git", + "ssh_url": "git@github.com:raseshshah/NandToTetris.git", + "clone_url": "https://github.com/raseshshah/NandToTetris.git", + "svn_url": "https://github.com/raseshshah/NandToTetris", + "homepage": null, + "size": 252, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 36079055, + "name": "nand2tetris", + "full_name": "docsis/nand2tetris", + "owner": { + "login": "docsis", + "id": 317230, + "avatar_url": "https://avatars.githubusercontent.com/u/317230?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/docsis", + "html_url": "https://github.com/docsis", + "followers_url": "https://api.github.com/users/docsis/followers", + "following_url": "https://api.github.com/users/docsis/following{/other_user}", + "gists_url": "https://api.github.com/users/docsis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/docsis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/docsis/subscriptions", + "organizations_url": "https://api.github.com/users/docsis/orgs", + "repos_url": "https://api.github.com/users/docsis/repos", + "events_url": "https://api.github.com/users/docsis/events{/privacy}", + "received_events_url": "https://api.github.com/users/docsis/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/docsis/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/docsis/nand2tetris", + "forks_url": "https://api.github.com/repos/docsis/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/docsis/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/docsis/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/docsis/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/docsis/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/docsis/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/docsis/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/docsis/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/docsis/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/docsis/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/docsis/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/docsis/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/docsis/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/docsis/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/docsis/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/docsis/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/docsis/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/docsis/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/docsis/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/docsis/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/docsis/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/docsis/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/docsis/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/docsis/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/docsis/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/docsis/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/docsis/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/docsis/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/docsis/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/docsis/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/docsis/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/docsis/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/docsis/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/docsis/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/docsis/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/docsis/nand2tetris/deployments", + "created_at": "2015-05-22T15:15:25Z", + "updated_at": "2015-05-22T15:34:15Z", + "pushed_at": "2015-05-22T15:34:07Z", + "git_url": "git://github.com/docsis/nand2tetris.git", + "ssh_url": "git@github.com:docsis/nand2tetris.git", + "clone_url": "https://github.com/docsis/nand2tetris.git", + "svn_url": "https://github.com/docsis/nand2tetris", + "homepage": null, + "size": 208, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34763879, + "name": "nand2tetris", + "full_name": "deltam/nand2tetris", + "owner": { + "login": "deltam", + "id": 193209, + "avatar_url": "https://avatars.githubusercontent.com/u/193209?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/deltam", + "html_url": "https://github.com/deltam", + "followers_url": "https://api.github.com/users/deltam/followers", + "following_url": "https://api.github.com/users/deltam/following{/other_user}", + "gists_url": "https://api.github.com/users/deltam/gists{/gist_id}", + "starred_url": "https://api.github.com/users/deltam/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/deltam/subscriptions", + "organizations_url": "https://api.github.com/users/deltam/orgs", + "repos_url": "https://api.github.com/users/deltam/repos", + "events_url": "https://api.github.com/users/deltam/events{/privacy}", + "received_events_url": "https://api.github.com/users/deltam/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/deltam/nand2tetris", + "description": "『コンピュータシステムの理論と実装』の実装記録", + "fork": false, + "url": "https://api.github.com/repos/deltam/nand2tetris", + "forks_url": "https://api.github.com/repos/deltam/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/deltam/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/deltam/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/deltam/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/deltam/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/deltam/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/deltam/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/deltam/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/deltam/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/deltam/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/deltam/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/deltam/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/deltam/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/deltam/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/deltam/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/deltam/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/deltam/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/deltam/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/deltam/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/deltam/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/deltam/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/deltam/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/deltam/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/deltam/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/deltam/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/deltam/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/deltam/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/deltam/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/deltam/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/deltam/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/deltam/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/deltam/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/deltam/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/deltam/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/deltam/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/deltam/nand2tetris/deployments", + "created_at": "2015-04-29T00:46:29Z", + "updated_at": "2015-05-08T04:49:21Z", + "pushed_at": "2015-05-16T23:38:30Z", + "git_url": "git://github.com/deltam/nand2tetris.git", + "ssh_url": "git@github.com:deltam/nand2tetris.git", + "clone_url": "https://github.com/deltam/nand2tetris.git", + "svn_url": "https://github.com/deltam/nand2tetris", + "homepage": "", + "size": 704, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 34908159, + "name": "nand2tetris", + "full_name": "mahavirj/nand2tetris", + "owner": { + "login": "mahavirj", + "id": 902446, + "avatar_url": "https://avatars.githubusercontent.com/u/902446?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mahavirj", + "html_url": "https://github.com/mahavirj", + "followers_url": "https://api.github.com/users/mahavirj/followers", + "following_url": "https://api.github.com/users/mahavirj/following{/other_user}", + "gists_url": "https://api.github.com/users/mahavirj/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mahavirj/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mahavirj/subscriptions", + "organizations_url": "https://api.github.com/users/mahavirj/orgs", + "repos_url": "https://api.github.com/users/mahavirj/repos", + "events_url": "https://api.github.com/users/mahavirj/events{/privacy}", + "received_events_url": "https://api.github.com/users/mahavirj/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mahavirj/nand2tetris", + "description": "Nand2Tetris Course Repository", + "fork": false, + "url": "https://api.github.com/repos/mahavirj/nand2tetris", + "forks_url": "https://api.github.com/repos/mahavirj/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mahavirj/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mahavirj/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mahavirj/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mahavirj/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mahavirj/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mahavirj/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mahavirj/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mahavirj/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mahavirj/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mahavirj/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mahavirj/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mahavirj/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mahavirj/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mahavirj/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mahavirj/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mahavirj/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mahavirj/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mahavirj/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mahavirj/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mahavirj/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mahavirj/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mahavirj/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mahavirj/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mahavirj/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mahavirj/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mahavirj/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mahavirj/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mahavirj/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mahavirj/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mahavirj/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mahavirj/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mahavirj/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mahavirj/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mahavirj/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mahavirj/nand2tetris/deployments", + "created_at": "2015-05-01T15:04:05Z", + "updated_at": "2015-05-27T17:01:59Z", + "pushed_at": "2015-05-27T17:01:58Z", + "git_url": "git://github.com/mahavirj/nand2tetris.git", + "ssh_url": "git@github.com:mahavirj/nand2tetris.git", + "clone_url": "https://github.com/mahavirj/nand2tetris.git", + "svn_url": "https://github.com/mahavirj/nand2tetris", + "homepage": null, + "size": 164, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 32637653, + "name": "nand2tetris_grading", + "full_name": "odavison/nand2tetris_grading", + "owner": { + "login": "odavison", + "id": 4430154, + "avatar_url": "https://avatars.githubusercontent.com/u/4430154?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/odavison", + "html_url": "https://github.com/odavison", + "followers_url": "https://api.github.com/users/odavison/followers", + "following_url": "https://api.github.com/users/odavison/following{/other_user}", + "gists_url": "https://api.github.com/users/odavison/gists{/gist_id}", + "starred_url": "https://api.github.com/users/odavison/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/odavison/subscriptions", + "organizations_url": "https://api.github.com/users/odavison/orgs", + "repos_url": "https://api.github.com/users/odavison/repos", + "events_url": "https://api.github.com/users/odavison/events{/privacy}", + "received_events_url": "https://api.github.com/users/odavison/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/odavison/nand2tetris_grading", + "description": "Grading scripts for nand2tetris labs (Projects 1-6) of CSCI2121 at Dalhousie University", + "fork": false, + "url": "https://api.github.com/repos/odavison/nand2tetris_grading", + "forks_url": "https://api.github.com/repos/odavison/nand2tetris_grading/forks", + "keys_url": "https://api.github.com/repos/odavison/nand2tetris_grading/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/odavison/nand2tetris_grading/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/odavison/nand2tetris_grading/teams", + "hooks_url": "https://api.github.com/repos/odavison/nand2tetris_grading/hooks", + "issue_events_url": "https://api.github.com/repos/odavison/nand2tetris_grading/issues/events{/number}", + "events_url": "https://api.github.com/repos/odavison/nand2tetris_grading/events", + "assignees_url": "https://api.github.com/repos/odavison/nand2tetris_grading/assignees{/user}", + "branches_url": "https://api.github.com/repos/odavison/nand2tetris_grading/branches{/branch}", + "tags_url": "https://api.github.com/repos/odavison/nand2tetris_grading/tags", + "blobs_url": "https://api.github.com/repos/odavison/nand2tetris_grading/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/odavison/nand2tetris_grading/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/odavison/nand2tetris_grading/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/odavison/nand2tetris_grading/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/odavison/nand2tetris_grading/statuses/{sha}", + "languages_url": "https://api.github.com/repos/odavison/nand2tetris_grading/languages", + "stargazers_url": "https://api.github.com/repos/odavison/nand2tetris_grading/stargazers", + "contributors_url": "https://api.github.com/repos/odavison/nand2tetris_grading/contributors", + "subscribers_url": "https://api.github.com/repos/odavison/nand2tetris_grading/subscribers", + "subscription_url": "https://api.github.com/repos/odavison/nand2tetris_grading/subscription", + "commits_url": "https://api.github.com/repos/odavison/nand2tetris_grading/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/odavison/nand2tetris_grading/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/odavison/nand2tetris_grading/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/odavison/nand2tetris_grading/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/odavison/nand2tetris_grading/contents/{+path}", + "compare_url": "https://api.github.com/repos/odavison/nand2tetris_grading/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/odavison/nand2tetris_grading/merges", + "archive_url": "https://api.github.com/repos/odavison/nand2tetris_grading/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/odavison/nand2tetris_grading/downloads", + "issues_url": "https://api.github.com/repos/odavison/nand2tetris_grading/issues{/number}", + "pulls_url": "https://api.github.com/repos/odavison/nand2tetris_grading/pulls{/number}", + "milestones_url": "https://api.github.com/repos/odavison/nand2tetris_grading/milestones{/number}", + "notifications_url": "https://api.github.com/repos/odavison/nand2tetris_grading/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/odavison/nand2tetris_grading/labels{/name}", + "releases_url": "https://api.github.com/repos/odavison/nand2tetris_grading/releases{/id}", + "deployments_url": "https://api.github.com/repos/odavison/nand2tetris_grading/deployments", + "created_at": "2015-03-21T15:34:30Z", + "updated_at": "2015-04-16T12:08:35Z", + "pushed_at": "2015-05-28T13:08:33Z", + "git_url": "git://github.com/odavison/nand2tetris_grading.git", + "ssh_url": "git@github.com:odavison/nand2tetris_grading.git", + "clone_url": "https://github.com/odavison/nand2tetris_grading.git", + "svn_url": "https://github.com/odavison/nand2tetris_grading", + "homepage": null, + "size": 612, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 43846778, + "name": "Nand2Tetris", + "full_name": "xiaoyifan/Nand2Tetris", + "owner": { + "login": "xiaoyifan", + "id": 9085563, + "avatar_url": "https://avatars.githubusercontent.com/u/9085563?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/xiaoyifan", + "html_url": "https://github.com/xiaoyifan", + "followers_url": "https://api.github.com/users/xiaoyifan/followers", + "following_url": "https://api.github.com/users/xiaoyifan/following{/other_user}", + "gists_url": "https://api.github.com/users/xiaoyifan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xiaoyifan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xiaoyifan/subscriptions", + "organizations_url": "https://api.github.com/users/xiaoyifan/orgs", + "repos_url": "https://api.github.com/users/xiaoyifan/repos", + "events_url": "https://api.github.com/users/xiaoyifan/events{/privacy}", + "received_events_url": "https://api.github.com/users/xiaoyifan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/xiaoyifan/Nand2Tetris", + "description": "Implementation of all projects in Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris", + "forks_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/xiaoyifan/Nand2Tetris/deployments", + "created_at": "2015-10-07T21:50:40Z", + "updated_at": "2015-10-07T21:51:53Z", + "pushed_at": "2015-10-07T21:51:11Z", + "git_url": "git://github.com/xiaoyifan/Nand2Tetris.git", + "ssh_url": "git@github.com:xiaoyifan/Nand2Tetris.git", + "clone_url": "https://github.com/xiaoyifan/Nand2Tetris.git", + "svn_url": "https://github.com/xiaoyifan/Nand2Tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 244, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 48934838, + "name": "nand2tetris", + "full_name": "stonefruit/nand2tetris", + "owner": { + "login": "stonefruit", + "id": 3167732, + "avatar_url": "https://avatars.githubusercontent.com/u/3167732?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/stonefruit", + "html_url": "https://github.com/stonefruit", + "followers_url": "https://api.github.com/users/stonefruit/followers", + "following_url": "https://api.github.com/users/stonefruit/following{/other_user}", + "gists_url": "https://api.github.com/users/stonefruit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/stonefruit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/stonefruit/subscriptions", + "organizations_url": "https://api.github.com/users/stonefruit/orgs", + "repos_url": "https://api.github.com/users/stonefruit/repos", + "events_url": "https://api.github.com/users/stonefruit/events{/privacy}", + "received_events_url": "https://api.github.com/users/stonefruit/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/stonefruit/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/stonefruit/nand2tetris", + "forks_url": "https://api.github.com/repos/stonefruit/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/stonefruit/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/stonefruit/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/stonefruit/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/stonefruit/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/stonefruit/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/stonefruit/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/stonefruit/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/stonefruit/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/stonefruit/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/stonefruit/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/stonefruit/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/stonefruit/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/stonefruit/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/stonefruit/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/stonefruit/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/stonefruit/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/stonefruit/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/stonefruit/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/stonefruit/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/stonefruit/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/stonefruit/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/stonefruit/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/stonefruit/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/stonefruit/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/stonefruit/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/stonefruit/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/stonefruit/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/stonefruit/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/stonefruit/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/stonefruit/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/stonefruit/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/stonefruit/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/stonefruit/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/stonefruit/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/stonefruit/nand2tetris/deployments", + "created_at": "2016-01-03T05:10:36Z", + "updated_at": "2016-01-30T16:15:13Z", + "pushed_at": "2016-01-31T01:45:35Z", + "git_url": "git://github.com/stonefruit/nand2tetris.git", + "ssh_url": "git@github.com:stonefruit/nand2tetris.git", + "clone_url": "https://github.com/stonefruit/nand2tetris.git", + "svn_url": "https://github.com/stonefruit/nand2tetris", + "homepage": null, + "size": 538, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 48566387, + "name": "nand2tetris", + "full_name": "thetimetraveler/nand2tetris", + "owner": { + "login": "thetimetraveler", + "id": 3935560, + "avatar_url": "https://avatars.githubusercontent.com/u/3935560?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/thetimetraveler", + "html_url": "https://github.com/thetimetraveler", + "followers_url": "https://api.github.com/users/thetimetraveler/followers", + "following_url": "https://api.github.com/users/thetimetraveler/following{/other_user}", + "gists_url": "https://api.github.com/users/thetimetraveler/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thetimetraveler/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thetimetraveler/subscriptions", + "organizations_url": "https://api.github.com/users/thetimetraveler/orgs", + "repos_url": "https://api.github.com/users/thetimetraveler/repos", + "events_url": "https://api.github.com/users/thetimetraveler/events{/privacy}", + "received_events_url": "https://api.github.com/users/thetimetraveler/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/thetimetraveler/nand2tetris", + "description": "nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/thetimetraveler/nand2tetris", + "forks_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/thetimetraveler/nand2tetris/deployments", + "created_at": "2015-12-25T04:22:13Z", + "updated_at": "2016-01-13T19:34:22Z", + "pushed_at": "2016-02-02T21:13:18Z", + "git_url": "git://github.com/thetimetraveler/nand2tetris.git", + "ssh_url": "git@github.com:thetimetraveler/nand2tetris.git", + "clone_url": "https://github.com/thetimetraveler/nand2tetris.git", + "svn_url": "https://github.com/thetimetraveler/nand2tetris", + "homepage": null, + "size": 515, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 45715665, + "name": "Nand2Tetris", + "full_name": "kaiyuand/Nand2Tetris", + "owner": { + "login": "kaiyuand", + "id": 10439490, + "avatar_url": "https://avatars.githubusercontent.com/u/10439490?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kaiyuand", + "html_url": "https://github.com/kaiyuand", + "followers_url": "https://api.github.com/users/kaiyuand/followers", + "following_url": "https://api.github.com/users/kaiyuand/following{/other_user}", + "gists_url": "https://api.github.com/users/kaiyuand/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kaiyuand/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kaiyuand/subscriptions", + "organizations_url": "https://api.github.com/users/kaiyuand/orgs", + "repos_url": "https://api.github.com/users/kaiyuand/repos", + "events_url": "https://api.github.com/users/kaiyuand/events{/privacy}", + "received_events_url": "https://api.github.com/users/kaiyuand/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kaiyuand/Nand2Tetris", + "description": "A 16-bit Computer System", + "fork": false, + "url": "https://api.github.com/repos/kaiyuand/Nand2Tetris", + "forks_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kaiyuand/Nand2Tetris/deployments", + "created_at": "2015-11-07T00:28:20Z", + "updated_at": "2015-11-07T00:29:44Z", + "pushed_at": "2015-11-07T00:29:42Z", + "git_url": "git://github.com/kaiyuand/Nand2Tetris.git", + "ssh_url": "git@github.com:kaiyuand/Nand2Tetris.git", + "clone_url": "https://github.com/kaiyuand/Nand2Tetris.git", + "svn_url": "https://github.com/kaiyuand/Nand2Tetris", + "homepage": null, + "size": 0, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 45354514, + "name": "nand2tetris", + "full_name": "glaukommatos/nand2tetris", + "owner": { + "login": "glaukommatos", + "id": 7286083, + "avatar_url": "https://avatars.githubusercontent.com/u/7286083?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/glaukommatos", + "html_url": "https://github.com/glaukommatos", + "followers_url": "https://api.github.com/users/glaukommatos/followers", + "following_url": "https://api.github.com/users/glaukommatos/following{/other_user}", + "gists_url": "https://api.github.com/users/glaukommatos/gists{/gist_id}", + "starred_url": "https://api.github.com/users/glaukommatos/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/glaukommatos/subscriptions", + "organizations_url": "https://api.github.com/users/glaukommatos/orgs", + "repos_url": "https://api.github.com/users/glaukommatos/repos", + "events_url": "https://api.github.com/users/glaukommatos/events{/privacy}", + "received_events_url": "https://api.github.com/users/glaukommatos/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/glaukommatos/nand2tetris", + "description": "Personal solutions to the problem sets for The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/glaukommatos/nand2tetris", + "forks_url": "https://api.github.com/repos/glaukommatos/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/glaukommatos/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/glaukommatos/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/glaukommatos/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/glaukommatos/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/glaukommatos/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/glaukommatos/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/glaukommatos/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/glaukommatos/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/glaukommatos/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/glaukommatos/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/glaukommatos/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/glaukommatos/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/glaukommatos/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/glaukommatos/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/glaukommatos/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/glaukommatos/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/glaukommatos/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/glaukommatos/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/glaukommatos/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/glaukommatos/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/glaukommatos/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/glaukommatos/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/glaukommatos/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/glaukommatos/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/glaukommatos/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/glaukommatos/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/glaukommatos/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/glaukommatos/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/glaukommatos/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/glaukommatos/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/glaukommatos/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/glaukommatos/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/glaukommatos/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/glaukommatos/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/glaukommatos/nand2tetris/deployments", + "created_at": "2015-11-01T19:37:02Z", + "updated_at": "2015-11-01T19:37:40Z", + "pushed_at": "2015-11-19T05:10:18Z", + "git_url": "git://github.com/glaukommatos/nand2tetris.git", + "ssh_url": "git@github.com:glaukommatos/nand2tetris.git", + "clone_url": "https://github.com/glaukommatos/nand2tetris.git", + "svn_url": "https://github.com/glaukommatos/nand2tetris", + "homepage": null, + "size": 537, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 46505982, + "name": "nand2tetris", + "full_name": "yoshkosh/nand2tetris", + "owner": { + "login": "yoshkosh", + "id": 42946, + "avatar_url": "https://avatars.githubusercontent.com/u/42946?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yoshkosh", + "html_url": "https://github.com/yoshkosh", + "followers_url": "https://api.github.com/users/yoshkosh/followers", + "following_url": "https://api.github.com/users/yoshkosh/following{/other_user}", + "gists_url": "https://api.github.com/users/yoshkosh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yoshkosh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yoshkosh/subscriptions", + "organizations_url": "https://api.github.com/users/yoshkosh/orgs", + "repos_url": "https://api.github.com/users/yoshkosh/repos", + "events_url": "https://api.github.com/users/yoshkosh/events{/privacy}", + "received_events_url": "https://api.github.com/users/yoshkosh/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yoshkosh/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/yoshkosh/nand2tetris", + "forks_url": "https://api.github.com/repos/yoshkosh/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/yoshkosh/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yoshkosh/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yoshkosh/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/yoshkosh/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/yoshkosh/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yoshkosh/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/yoshkosh/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yoshkosh/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yoshkosh/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/yoshkosh/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yoshkosh/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yoshkosh/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yoshkosh/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yoshkosh/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yoshkosh/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/yoshkosh/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/yoshkosh/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/yoshkosh/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/yoshkosh/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/yoshkosh/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yoshkosh/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yoshkosh/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yoshkosh/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yoshkosh/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yoshkosh/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yoshkosh/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/yoshkosh/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yoshkosh/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/yoshkosh/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yoshkosh/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yoshkosh/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yoshkosh/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yoshkosh/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yoshkosh/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yoshkosh/nand2tetris/deployments", + "created_at": "2015-11-19T16:40:56Z", + "updated_at": "2015-11-19T17:01:53Z", + "pushed_at": "2015-11-19T17:01:52Z", + "git_url": "git://github.com/yoshkosh/nand2tetris.git", + "ssh_url": "git@github.com:yoshkosh/nand2tetris.git", + "clone_url": "https://github.com/yoshkosh/nand2tetris.git", + "svn_url": "https://github.com/yoshkosh/nand2tetris", + "homepage": null, + "size": 151, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 46152382, + "name": "nand_to_tetris_files", + "full_name": "davidvgus/nand_to_tetris_files", + "owner": { + "login": "davidvgus", + "id": 1235314, + "avatar_url": "https://avatars.githubusercontent.com/u/1235314?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/davidvgus", + "html_url": "https://github.com/davidvgus", + "followers_url": "https://api.github.com/users/davidvgus/followers", + "following_url": "https://api.github.com/users/davidvgus/following{/other_user}", + "gists_url": "https://api.github.com/users/davidvgus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/davidvgus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/davidvgus/subscriptions", + "organizations_url": "https://api.github.com/users/davidvgus/orgs", + "repos_url": "https://api.github.com/users/davidvgus/repos", + "events_url": "https://api.github.com/users/davidvgus/events{/privacy}", + "received_events_url": "https://api.github.com/users/davidvgus/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/davidvgus/nand_to_tetris_files", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files", + "forks_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/forks", + "keys_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/teams", + "hooks_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/hooks", + "issue_events_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/issues/events{/number}", + "events_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/events", + "assignees_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/assignees{/user}", + "branches_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/branches{/branch}", + "tags_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/tags", + "blobs_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/statuses/{sha}", + "languages_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/languages", + "stargazers_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/stargazers", + "contributors_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/contributors", + "subscribers_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/subscribers", + "subscription_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/subscription", + "commits_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/contents/{+path}", + "compare_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/merges", + "archive_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/downloads", + "issues_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/issues{/number}", + "pulls_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/pulls{/number}", + "milestones_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/milestones{/number}", + "notifications_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/labels{/name}", + "releases_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/releases{/id}", + "deployments_url": "https://api.github.com/repos/davidvgus/nand_to_tetris_files/deployments", + "created_at": "2015-11-13T23:19:24Z", + "updated_at": "2015-11-13T23:21:57Z", + "pushed_at": "2015-11-28T07:31:50Z", + "git_url": "git://github.com/davidvgus/nand_to_tetris_files.git", + "ssh_url": "git@github.com:davidvgus/nand_to_tetris_files.git", + "clone_url": "https://github.com/davidvgus/nand_to_tetris_files.git", + "svn_url": "https://github.com/davidvgus/nand_to_tetris_files", + "homepage": null, + "size": 152, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 28742323, + "name": "NandToTetris", + "full_name": "napnac/NandToTetris", + "owner": { + "login": "napnac", + "id": 4095958, + "avatar_url": "https://avatars.githubusercontent.com/u/4095958?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/napnac", + "html_url": "https://github.com/napnac", + "followers_url": "https://api.github.com/users/napnac/followers", + "following_url": "https://api.github.com/users/napnac/following{/other_user}", + "gists_url": "https://api.github.com/users/napnac/gists{/gist_id}", + "starred_url": "https://api.github.com/users/napnac/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/napnac/subscriptions", + "organizations_url": "https://api.github.com/users/napnac/orgs", + "repos_url": "https://api.github.com/users/napnac/repos", + "events_url": "https://api.github.com/users/napnac/events{/privacy}", + "received_events_url": "https://api.github.com/users/napnac/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/napnac/NandToTetris", + "description": "Projet du livre The Elements of Computing Systems : Building a Modern Computer from First Principles", + "fork": false, + "url": "https://api.github.com/repos/napnac/NandToTetris", + "forks_url": "https://api.github.com/repos/napnac/NandToTetris/forks", + "keys_url": "https://api.github.com/repos/napnac/NandToTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/napnac/NandToTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/napnac/NandToTetris/teams", + "hooks_url": "https://api.github.com/repos/napnac/NandToTetris/hooks", + "issue_events_url": "https://api.github.com/repos/napnac/NandToTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/napnac/NandToTetris/events", + "assignees_url": "https://api.github.com/repos/napnac/NandToTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/napnac/NandToTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/napnac/NandToTetris/tags", + "blobs_url": "https://api.github.com/repos/napnac/NandToTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/napnac/NandToTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/napnac/NandToTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/napnac/NandToTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/napnac/NandToTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/napnac/NandToTetris/languages", + "stargazers_url": "https://api.github.com/repos/napnac/NandToTetris/stargazers", + "contributors_url": "https://api.github.com/repos/napnac/NandToTetris/contributors", + "subscribers_url": "https://api.github.com/repos/napnac/NandToTetris/subscribers", + "subscription_url": "https://api.github.com/repos/napnac/NandToTetris/subscription", + "commits_url": "https://api.github.com/repos/napnac/NandToTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/napnac/NandToTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/napnac/NandToTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/napnac/NandToTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/napnac/NandToTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/napnac/NandToTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/napnac/NandToTetris/merges", + "archive_url": "https://api.github.com/repos/napnac/NandToTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/napnac/NandToTetris/downloads", + "issues_url": "https://api.github.com/repos/napnac/NandToTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/napnac/NandToTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/napnac/NandToTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/napnac/NandToTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/napnac/NandToTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/napnac/NandToTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/napnac/NandToTetris/deployments", + "created_at": "2015-01-03T11:42:53Z", + "updated_at": "2015-10-13T18:23:43Z", + "pushed_at": "2015-12-12T16:41:51Z", + "git_url": "git://github.com/napnac/NandToTetris.git", + "ssh_url": "git@github.com:napnac/NandToTetris.git", + "clone_url": "https://github.com/napnac/NandToTetris.git", + "svn_url": "https://github.com/napnac/NandToTetris", + "homepage": "http://napnac.ga/projets/nandtotetris.html", + "size": 591, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 47205746, + "name": "nand2tetris", + "full_name": "mavant/nand2tetris", + "owner": { + "login": "mavant", + "id": 4933667, + "avatar_url": "https://avatars.githubusercontent.com/u/4933667?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mavant", + "html_url": "https://github.com/mavant", + "followers_url": "https://api.github.com/users/mavant/followers", + "following_url": "https://api.github.com/users/mavant/following{/other_user}", + "gists_url": "https://api.github.com/users/mavant/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mavant/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mavant/subscriptions", + "organizations_url": "https://api.github.com/users/mavant/orgs", + "repos_url": "https://api.github.com/users/mavant/repos", + "events_url": "https://api.github.com/users/mavant/events{/privacy}", + "received_events_url": "https://api.github.com/users/mavant/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mavant/nand2tetris", + "description": "Solutions and scratch work for nand2tetris (Elements of Computing Systems)", + "fork": false, + "url": "https://api.github.com/repos/mavant/nand2tetris", + "forks_url": "https://api.github.com/repos/mavant/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mavant/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mavant/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mavant/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mavant/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mavant/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mavant/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mavant/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mavant/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mavant/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mavant/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mavant/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mavant/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mavant/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mavant/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mavant/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mavant/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mavant/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mavant/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mavant/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mavant/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mavant/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mavant/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mavant/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mavant/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mavant/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mavant/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mavant/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mavant/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mavant/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mavant/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mavant/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mavant/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mavant/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mavant/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mavant/nand2tetris/deployments", + "created_at": "2015-12-01T17:24:45Z", + "updated_at": "2015-12-01T17:25:30Z", + "pushed_at": "2015-12-03T03:35:19Z", + "git_url": "git://github.com/mavant/nand2tetris.git", + "ssh_url": "git@github.com:mavant/nand2tetris.git", + "clone_url": "https://github.com/mavant/nand2tetris.git", + "svn_url": "https://github.com/mavant/nand2tetris", + "homepage": null, + "size": 165, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 48077063, + "name": "tetris.c64", + "full_name": "mssarts128/tetris.c64", + "owner": { + "login": "mssarts128", + "id": 4229965, + "avatar_url": "https://avatars.githubusercontent.com/u/4229965?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mssarts128", + "html_url": "https://github.com/mssarts128", + "followers_url": "https://api.github.com/users/mssarts128/followers", + "following_url": "https://api.github.com/users/mssarts128/following{/other_user}", + "gists_url": "https://api.github.com/users/mssarts128/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mssarts128/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mssarts128/subscriptions", + "organizations_url": "https://api.github.com/users/mssarts128/orgs", + "repos_url": "https://api.github.com/users/mssarts128/repos", + "events_url": "https://api.github.com/users/mssarts128/events{/privacy}", + "received_events_url": "https://api.github.com/users/mssarts128/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mssarts128/tetris.c64", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/mssarts128/tetris.c64", + "forks_url": "https://api.github.com/repos/mssarts128/tetris.c64/forks", + "keys_url": "https://api.github.com/repos/mssarts128/tetris.c64/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mssarts128/tetris.c64/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mssarts128/tetris.c64/teams", + "hooks_url": "https://api.github.com/repos/mssarts128/tetris.c64/hooks", + "issue_events_url": "https://api.github.com/repos/mssarts128/tetris.c64/issues/events{/number}", + "events_url": "https://api.github.com/repos/mssarts128/tetris.c64/events", + "assignees_url": "https://api.github.com/repos/mssarts128/tetris.c64/assignees{/user}", + "branches_url": "https://api.github.com/repos/mssarts128/tetris.c64/branches{/branch}", + "tags_url": "https://api.github.com/repos/mssarts128/tetris.c64/tags", + "blobs_url": "https://api.github.com/repos/mssarts128/tetris.c64/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mssarts128/tetris.c64/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mssarts128/tetris.c64/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mssarts128/tetris.c64/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mssarts128/tetris.c64/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mssarts128/tetris.c64/languages", + "stargazers_url": "https://api.github.com/repos/mssarts128/tetris.c64/stargazers", + "contributors_url": "https://api.github.com/repos/mssarts128/tetris.c64/contributors", + "subscribers_url": "https://api.github.com/repos/mssarts128/tetris.c64/subscribers", + "subscription_url": "https://api.github.com/repos/mssarts128/tetris.c64/subscription", + "commits_url": "https://api.github.com/repos/mssarts128/tetris.c64/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mssarts128/tetris.c64/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mssarts128/tetris.c64/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mssarts128/tetris.c64/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mssarts128/tetris.c64/contents/{+path}", + "compare_url": "https://api.github.com/repos/mssarts128/tetris.c64/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mssarts128/tetris.c64/merges", + "archive_url": "https://api.github.com/repos/mssarts128/tetris.c64/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mssarts128/tetris.c64/downloads", + "issues_url": "https://api.github.com/repos/mssarts128/tetris.c64/issues{/number}", + "pulls_url": "https://api.github.com/repos/mssarts128/tetris.c64/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mssarts128/tetris.c64/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mssarts128/tetris.c64/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mssarts128/tetris.c64/labels{/name}", + "releases_url": "https://api.github.com/repos/mssarts128/tetris.c64/releases{/id}", + "deployments_url": "https://api.github.com/repos/mssarts128/tetris.c64/deployments", + "created_at": "2015-12-16T00:30:59Z", + "updated_at": "2015-12-16T00:31:06Z", + "pushed_at": "2015-12-16T00:31:04Z", + "git_url": "git://github.com/mssarts128/tetris.c64.git", + "ssh_url": "git@github.com:mssarts128/tetris.c64.git", + "clone_url": "https://github.com/mssarts128/tetris.c64.git", + "svn_url": "https://github.com/mssarts128/tetris.c64", + "homepage": null, + "size": 53, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 26598386, + "name": "GBA-AssesmentOneTetris", + "full_name": "gamereat/GBA-AssesmentOneTetris", + "owner": { + "login": "gamereat", + "id": 7132438, + "avatar_url": "https://avatars.githubusercontent.com/u/7132438?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gamereat", + "html_url": "https://github.com/gamereat", + "followers_url": "https://api.github.com/users/gamereat/followers", + "following_url": "https://api.github.com/users/gamereat/following{/other_user}", + "gists_url": "https://api.github.com/users/gamereat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gamereat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gamereat/subscriptions", + "organizations_url": "https://api.github.com/users/gamereat/orgs", + "repos_url": "https://api.github.com/users/gamereat/repos", + "events_url": "https://api.github.com/users/gamereat/events{/privacy}", + "received_events_url": "https://api.github.com/users/gamereat/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/gamereat/GBA-AssesmentOneTetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris", + "forks_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/forks", + "keys_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/teams", + "hooks_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/hooks", + "issue_events_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/events", + "assignees_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/tags", + "blobs_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/languages", + "stargazers_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/stargazers", + "contributors_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/contributors", + "subscribers_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/subscribers", + "subscription_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/subscription", + "commits_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/merges", + "archive_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/downloads", + "issues_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/gamereat/GBA-AssesmentOneTetris/deployments", + "created_at": "2014-11-13T17:07:45Z", + "updated_at": "2016-01-09T00:04:35Z", + "pushed_at": "2014-12-17T18:06:58Z", + "git_url": "git://github.com/gamereat/GBA-AssesmentOneTetris.git", + "ssh_url": "git@github.com:gamereat/GBA-AssesmentOneTetris.git", + "clone_url": "https://github.com/gamereat/GBA-AssesmentOneTetris.git", + "svn_url": "https://github.com/gamereat/GBA-AssesmentOneTetris", + "homepage": null, + "size": 2410, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 49715513, + "name": "nand2tetris", + "full_name": "bartelski/nand2tetris", + "owner": { + "login": "bartelski", + "id": 1690346, + "avatar_url": "https://avatars.githubusercontent.com/u/1690346?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bartelski", + "html_url": "https://github.com/bartelski", + "followers_url": "https://api.github.com/users/bartelski/followers", + "following_url": "https://api.github.com/users/bartelski/following{/other_user}", + "gists_url": "https://api.github.com/users/bartelski/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bartelski/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bartelski/subscriptions", + "organizations_url": "https://api.github.com/users/bartelski/orgs", + "repos_url": "https://api.github.com/users/bartelski/repos", + "events_url": "https://api.github.com/users/bartelski/events{/privacy}", + "received_events_url": "https://api.github.com/users/bartelski/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bartelski/nand2tetris", + "description": "The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/bartelski/nand2tetris", + "forks_url": "https://api.github.com/repos/bartelski/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bartelski/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bartelski/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bartelski/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bartelski/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bartelski/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bartelski/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bartelski/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bartelski/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bartelski/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bartelski/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bartelski/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bartelski/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bartelski/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bartelski/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bartelski/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bartelski/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bartelski/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bartelski/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bartelski/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bartelski/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bartelski/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bartelski/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bartelski/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bartelski/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bartelski/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bartelski/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bartelski/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bartelski/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bartelski/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bartelski/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bartelski/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bartelski/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bartelski/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bartelski/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bartelski/nand2tetris/deployments", + "created_at": "2016-01-15T11:37:31Z", + "updated_at": "2016-01-15T11:37:36Z", + "pushed_at": "2016-01-15T11:38:34Z", + "git_url": "git://github.com/bartelski/nand2tetris.git", + "ssh_url": "git@github.com:bartelski/nand2tetris.git", + "clone_url": "https://github.com/bartelski/nand2tetris.git", + "svn_url": "https://github.com/bartelski/nand2tetris", + "homepage": null, + "size": 499, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 48874013, + "name": "nand2tetris", + "full_name": "KeiOkumura/nand2tetris", + "owner": { + "login": "KeiOkumura", + "id": 8915773, + "avatar_url": "https://avatars.githubusercontent.com/u/8915773?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/KeiOkumura", + "html_url": "https://github.com/KeiOkumura", + "followers_url": "https://api.github.com/users/KeiOkumura/followers", + "following_url": "https://api.github.com/users/KeiOkumura/following{/other_user}", + "gists_url": "https://api.github.com/users/KeiOkumura/gists{/gist_id}", + "starred_url": "https://api.github.com/users/KeiOkumura/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/KeiOkumura/subscriptions", + "organizations_url": "https://api.github.com/users/KeiOkumura/orgs", + "repos_url": "https://api.github.com/users/KeiOkumura/repos", + "events_url": "https://api.github.com/users/KeiOkumura/events{/privacy}", + "received_events_url": "https://api.github.com/users/KeiOkumura/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/KeiOkumura/nand2tetris", + "description": "コンピュータシステムの理論と実装より", + "fork": false, + "url": "https://api.github.com/repos/KeiOkumura/nand2tetris", + "forks_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/KeiOkumura/nand2tetris/deployments", + "created_at": "2016-01-01T09:11:20Z", + "updated_at": "2016-01-14T16:50:30Z", + "pushed_at": "2016-01-18T08:30:13Z", + "git_url": "git://github.com/KeiOkumura/nand2tetris.git", + "ssh_url": "git@github.com:KeiOkumura/nand2tetris.git", + "clone_url": "https://github.com/KeiOkumura/nand2tetris.git", + "svn_url": "https://github.com/KeiOkumura/nand2tetris", + "homepage": null, + "size": 192, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 53111709, + "name": "nand2tetris", + "full_name": "novakoki/nand2tetris", + "owner": { + "login": "novakoki", + "id": 7463456, + "avatar_url": "https://avatars.githubusercontent.com/u/7463456?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/novakoki", + "html_url": "https://github.com/novakoki", + "followers_url": "https://api.github.com/users/novakoki/followers", + "following_url": "https://api.github.com/users/novakoki/following{/other_user}", + "gists_url": "https://api.github.com/users/novakoki/gists{/gist_id}", + "starred_url": "https://api.github.com/users/novakoki/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/novakoki/subscriptions", + "organizations_url": "https://api.github.com/users/novakoki/orgs", + "repos_url": "https://api.github.com/users/novakoki/repos", + "events_url": "https://api.github.com/users/novakoki/events{/privacy}", + "received_events_url": "https://api.github.com/users/novakoki/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/novakoki/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/novakoki/nand2tetris", + "forks_url": "https://api.github.com/repos/novakoki/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/novakoki/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/novakoki/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/novakoki/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/novakoki/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/novakoki/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/novakoki/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/novakoki/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/novakoki/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/novakoki/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/novakoki/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/novakoki/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/novakoki/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/novakoki/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/novakoki/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/novakoki/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/novakoki/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/novakoki/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/novakoki/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/novakoki/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/novakoki/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/novakoki/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/novakoki/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/novakoki/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/novakoki/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/novakoki/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/novakoki/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/novakoki/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/novakoki/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/novakoki/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/novakoki/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/novakoki/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/novakoki/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/novakoki/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/novakoki/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/novakoki/nand2tetris/deployments", + "created_at": "2016-03-04T06:04:05Z", + "updated_at": "2016-03-04T07:01:50Z", + "pushed_at": "2016-03-04T07:01:47Z", + "git_url": "git://github.com/novakoki/nand2tetris.git", + "ssh_url": "git@github.com:novakoki/nand2tetris.git", + "clone_url": "https://github.com/novakoki/nand2tetris.git", + "svn_url": "https://github.com/novakoki/nand2tetris", + "homepage": null, + "size": 2082, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 51452998, + "name": "nand2tetris", + "full_name": "Zanadar/nand2tetris", + "owner": { + "login": "Zanadar", + "id": 5925347, + "avatar_url": "https://avatars.githubusercontent.com/u/5925347?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Zanadar", + "html_url": "https://github.com/Zanadar", + "followers_url": "https://api.github.com/users/Zanadar/followers", + "following_url": "https://api.github.com/users/Zanadar/following{/other_user}", + "gists_url": "https://api.github.com/users/Zanadar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Zanadar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Zanadar/subscriptions", + "organizations_url": "https://api.github.com/users/Zanadar/orgs", + "repos_url": "https://api.github.com/users/Zanadar/repos", + "events_url": "https://api.github.com/users/Zanadar/events{/privacy}", + "received_events_url": "https://api.github.com/users/Zanadar/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Zanadar/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Zanadar/nand2tetris", + "forks_url": "https://api.github.com/repos/Zanadar/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Zanadar/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Zanadar/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Zanadar/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Zanadar/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Zanadar/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Zanadar/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Zanadar/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Zanadar/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Zanadar/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Zanadar/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Zanadar/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Zanadar/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Zanadar/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Zanadar/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Zanadar/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Zanadar/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Zanadar/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Zanadar/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Zanadar/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Zanadar/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Zanadar/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Zanadar/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Zanadar/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Zanadar/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Zanadar/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Zanadar/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Zanadar/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Zanadar/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Zanadar/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Zanadar/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Zanadar/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Zanadar/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Zanadar/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Zanadar/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Zanadar/nand2tetris/deployments", + "created_at": "2016-02-10T16:15:52Z", + "updated_at": "2016-02-10T16:16:09Z", + "pushed_at": "2016-03-08T17:51:40Z", + "git_url": "git://github.com/Zanadar/nand2tetris.git", + "ssh_url": "git@github.com:Zanadar/nand2tetris.git", + "clone_url": "https://github.com/Zanadar/nand2tetris.git", + "svn_url": "https://github.com/Zanadar/nand2tetris", + "homepage": null, + "size": 171, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 52087122, + "name": "Nand2Tetris", + "full_name": "st0012/Nand2Tetris", + "owner": { + "login": "st0012", + "id": 5079556, + "avatar_url": "https://avatars.githubusercontent.com/u/5079556?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/st0012", + "html_url": "https://github.com/st0012", + "followers_url": "https://api.github.com/users/st0012/followers", + "following_url": "https://api.github.com/users/st0012/following{/other_user}", + "gists_url": "https://api.github.com/users/st0012/gists{/gist_id}", + "starred_url": "https://api.github.com/users/st0012/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/st0012/subscriptions", + "organizations_url": "https://api.github.com/users/st0012/orgs", + "repos_url": "https://api.github.com/users/st0012/repos", + "events_url": "https://api.github.com/users/st0012/events{/privacy}", + "received_events_url": "https://api.github.com/users/st0012/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/st0012/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/st0012/Nand2Tetris", + "forks_url": "https://api.github.com/repos/st0012/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/st0012/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/st0012/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/st0012/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/st0012/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/st0012/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/st0012/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/st0012/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/st0012/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/st0012/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/st0012/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/st0012/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/st0012/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/st0012/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/st0012/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/st0012/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/st0012/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/st0012/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/st0012/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/st0012/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/st0012/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/st0012/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/st0012/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/st0012/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/st0012/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/st0012/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/st0012/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/st0012/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/st0012/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/st0012/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/st0012/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/st0012/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/st0012/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/st0012/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/st0012/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/st0012/Nand2Tetris/deployments", + "created_at": "2016-02-19T12:45:04Z", + "updated_at": "2016-02-19T12:45:22Z", + "pushed_at": "2016-03-25T01:57:09Z", + "git_url": "git://github.com/st0012/Nand2Tetris.git", + "ssh_url": "git@github.com:st0012/Nand2Tetris.git", + "clone_url": "https://github.com/st0012/Nand2Tetris.git", + "svn_url": "https://github.com/st0012/Nand2Tetris", + "homepage": null, + "size": 201, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 52207298, + "name": "Nand2Tetris", + "full_name": "trimcao/Nand2Tetris", + "owner": { + "login": "trimcao", + "id": 13499694, + "avatar_url": "https://avatars.githubusercontent.com/u/13499694?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/trimcao", + "html_url": "https://github.com/trimcao", + "followers_url": "https://api.github.com/users/trimcao/followers", + "following_url": "https://api.github.com/users/trimcao/following{/other_user}", + "gists_url": "https://api.github.com/users/trimcao/gists{/gist_id}", + "starred_url": "https://api.github.com/users/trimcao/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/trimcao/subscriptions", + "organizations_url": "https://api.github.com/users/trimcao/orgs", + "repos_url": "https://api.github.com/users/trimcao/repos", + "events_url": "https://api.github.com/users/trimcao/events{/privacy}", + "received_events_url": "https://api.github.com/users/trimcao/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/trimcao/Nand2Tetris", + "description": "Nand2Tetris course by Hebrew University @ Coursera ", + "fork": false, + "url": "https://api.github.com/repos/trimcao/Nand2Tetris", + "forks_url": "https://api.github.com/repos/trimcao/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/trimcao/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/trimcao/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/trimcao/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/trimcao/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/trimcao/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/trimcao/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/trimcao/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/trimcao/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/trimcao/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/trimcao/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/trimcao/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/trimcao/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/trimcao/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/trimcao/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/trimcao/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/trimcao/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/trimcao/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/trimcao/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/trimcao/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/trimcao/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/trimcao/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/trimcao/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/trimcao/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/trimcao/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/trimcao/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/trimcao/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/trimcao/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/trimcao/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/trimcao/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/trimcao/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/trimcao/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/trimcao/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/trimcao/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/trimcao/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/trimcao/Nand2Tetris/deployments", + "created_at": "2016-02-21T13:16:22Z", + "updated_at": "2016-02-21T13:17:19Z", + "pushed_at": "2016-03-26T04:28:14Z", + "git_url": "git://github.com/trimcao/Nand2Tetris.git", + "ssh_url": "git@github.com:trimcao/Nand2Tetris.git", + "clone_url": "https://github.com/trimcao/Nand2Tetris.git", + "svn_url": "https://github.com/trimcao/Nand2Tetris", + "homepage": null, + "size": 536, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 53555741, + "name": "nand2tetris", + "full_name": "l1xiao/nand2tetris", + "owner": { + "login": "l1xiao", + "id": 6694585, + "avatar_url": "https://avatars.githubusercontent.com/u/6694585?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/l1xiao", + "html_url": "https://github.com/l1xiao", + "followers_url": "https://api.github.com/users/l1xiao/followers", + "following_url": "https://api.github.com/users/l1xiao/following{/other_user}", + "gists_url": "https://api.github.com/users/l1xiao/gists{/gist_id}", + "starred_url": "https://api.github.com/users/l1xiao/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/l1xiao/subscriptions", + "organizations_url": "https://api.github.com/users/l1xiao/orgs", + "repos_url": "https://api.github.com/users/l1xiao/repos", + "events_url": "https://api.github.com/users/l1xiao/events{/privacy}", + "received_events_url": "https://api.github.com/users/l1xiao/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/l1xiao/nand2tetris", + "description": "nand2tetris part1", + "fork": false, + "url": "https://api.github.com/repos/l1xiao/nand2tetris", + "forks_url": "https://api.github.com/repos/l1xiao/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/l1xiao/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/l1xiao/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/l1xiao/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/l1xiao/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/l1xiao/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/l1xiao/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/l1xiao/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/l1xiao/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/l1xiao/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/l1xiao/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/l1xiao/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/l1xiao/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/l1xiao/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/l1xiao/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/l1xiao/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/l1xiao/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/l1xiao/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/l1xiao/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/l1xiao/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/l1xiao/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/l1xiao/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/l1xiao/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/l1xiao/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/l1xiao/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/l1xiao/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/l1xiao/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/l1xiao/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/l1xiao/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/l1xiao/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/l1xiao/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/l1xiao/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/l1xiao/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/l1xiao/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/l1xiao/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/l1xiao/nand2tetris/deployments", + "created_at": "2016-03-10T04:46:59Z", + "updated_at": "2016-03-10T04:47:11Z", + "pushed_at": "2016-03-27T08:21:15Z", + "git_url": "git://github.com/l1xiao/nand2tetris.git", + "ssh_url": "git@github.com:l1xiao/nand2tetris.git", + "clone_url": "https://github.com/l1xiao/nand2tetris.git", + "svn_url": "https://github.com/l1xiao/nand2tetris", + "homepage": null, + "size": 603, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 54709770, + "name": "nand2tetris", + "full_name": "sixthextinction/nand2tetris", + "owner": { + "login": "sixthextinction", + "id": 8657811, + "avatar_url": "https://avatars.githubusercontent.com/u/8657811?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sixthextinction", + "html_url": "https://github.com/sixthextinction", + "followers_url": "https://api.github.com/users/sixthextinction/followers", + "following_url": "https://api.github.com/users/sixthextinction/following{/other_user}", + "gists_url": "https://api.github.com/users/sixthextinction/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sixthextinction/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sixthextinction/subscriptions", + "organizations_url": "https://api.github.com/users/sixthextinction/orgs", + "repos_url": "https://api.github.com/users/sixthextinction/repos", + "events_url": "https://api.github.com/users/sixthextinction/events{/privacy}", + "received_events_url": "https://api.github.com/users/sixthextinction/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sixthextinction/nand2tetris", + "description": "Coursera version", + "fork": false, + "url": "https://api.github.com/repos/sixthextinction/nand2tetris", + "forks_url": "https://api.github.com/repos/sixthextinction/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/sixthextinction/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sixthextinction/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sixthextinction/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/sixthextinction/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/sixthextinction/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/sixthextinction/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/sixthextinction/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/sixthextinction/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/sixthextinction/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/sixthextinction/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sixthextinction/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sixthextinction/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sixthextinction/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sixthextinction/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sixthextinction/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/sixthextinction/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/sixthextinction/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/sixthextinction/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/sixthextinction/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/sixthextinction/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sixthextinction/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sixthextinction/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sixthextinction/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sixthextinction/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/sixthextinction/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sixthextinction/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/sixthextinction/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sixthextinction/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/sixthextinction/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/sixthextinction/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sixthextinction/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sixthextinction/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sixthextinction/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/sixthextinction/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/sixthextinction/nand2tetris/deployments", + "created_at": "2016-03-25T09:40:40Z", + "updated_at": "2016-03-25T09:57:00Z", + "pushed_at": "2016-03-25T10:08:50Z", + "git_url": "git://github.com/sixthextinction/nand2tetris.git", + "ssh_url": "git@github.com:sixthextinction/nand2tetris.git", + "clone_url": "https://github.com/sixthextinction/nand2tetris.git", + "svn_url": "https://github.com/sixthextinction/nand2tetris", + "homepage": null, + "size": 134, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 52307820, + "name": "Nand2Tetris", + "full_name": "MIchael-Winkler/Nand2Tetris", + "owner": { + "login": "MIchael-Winkler", + "id": 17417098, + "avatar_url": "https://avatars.githubusercontent.com/u/17417098?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MIchael-Winkler", + "html_url": "https://github.com/MIchael-Winkler", + "followers_url": "https://api.github.com/users/MIchael-Winkler/followers", + "following_url": "https://api.github.com/users/MIchael-Winkler/following{/other_user}", + "gists_url": "https://api.github.com/users/MIchael-Winkler/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MIchael-Winkler/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MIchael-Winkler/subscriptions", + "organizations_url": "https://api.github.com/users/MIchael-Winkler/orgs", + "repos_url": "https://api.github.com/users/MIchael-Winkler/repos", + "events_url": "https://api.github.com/users/MIchael-Winkler/events{/privacy}", + "received_events_url": "https://api.github.com/users/MIchael-Winkler/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/MIchael-Winkler/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris", + "forks_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/MIchael-Winkler/Nand2Tetris/deployments", + "created_at": "2016-02-22T21:37:52Z", + "updated_at": "2016-02-22T21:39:59Z", + "pushed_at": "2016-02-22T21:39:57Z", + "git_url": "git://github.com/MIchael-Winkler/Nand2Tetris.git", + "ssh_url": "git@github.com:MIchael-Winkler/Nand2Tetris.git", + "clone_url": "https://github.com/MIchael-Winkler/Nand2Tetris.git", + "svn_url": "https://github.com/MIchael-Winkler/Nand2Tetris", + "homepage": null, + "size": 1955, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 52663876, + "name": "nand2tetris", + "full_name": "lagzda/nand2tetris", + "owner": { + "login": "lagzda", + "id": 9280639, + "avatar_url": "https://avatars.githubusercontent.com/u/9280639?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lagzda", + "html_url": "https://github.com/lagzda", + "followers_url": "https://api.github.com/users/lagzda/followers", + "following_url": "https://api.github.com/users/lagzda/following{/other_user}", + "gists_url": "https://api.github.com/users/lagzda/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lagzda/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lagzda/subscriptions", + "organizations_url": "https://api.github.com/users/lagzda/orgs", + "repos_url": "https://api.github.com/users/lagzda/repos", + "events_url": "https://api.github.com/users/lagzda/events{/privacy}", + "received_events_url": "https://api.github.com/users/lagzda/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lagzda/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/lagzda/nand2tetris", + "forks_url": "https://api.github.com/repos/lagzda/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lagzda/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lagzda/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lagzda/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lagzda/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lagzda/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lagzda/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lagzda/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lagzda/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lagzda/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lagzda/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lagzda/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lagzda/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lagzda/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lagzda/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lagzda/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lagzda/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lagzda/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lagzda/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lagzda/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lagzda/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lagzda/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lagzda/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lagzda/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lagzda/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lagzda/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lagzda/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lagzda/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lagzda/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lagzda/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lagzda/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lagzda/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lagzda/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lagzda/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lagzda/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lagzda/nand2tetris/deployments", + "created_at": "2016-02-27T11:37:27Z", + "updated_at": "2016-02-27T11:41:18Z", + "pushed_at": "2016-03-01T16:41:47Z", + "git_url": "git://github.com/lagzda/nand2tetris.git", + "ssh_url": "git@github.com:lagzda/nand2tetris.git", + "clone_url": "https://github.com/lagzda/nand2tetris.git", + "svn_url": "https://github.com/lagzda/nand2tetris", + "homepage": null, + "size": 167, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 50462338, + "name": "nand2tetris", + "full_name": "slarrain/nand2tetris", + "owner": { + "login": "slarrain", + "id": 9893834, + "avatar_url": "https://avatars.githubusercontent.com/u/9893834?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/slarrain", + "html_url": "https://github.com/slarrain", + "followers_url": "https://api.github.com/users/slarrain/followers", + "following_url": "https://api.github.com/users/slarrain/following{/other_user}", + "gists_url": "https://api.github.com/users/slarrain/gists{/gist_id}", + "starred_url": "https://api.github.com/users/slarrain/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/slarrain/subscriptions", + "organizations_url": "https://api.github.com/users/slarrain/orgs", + "repos_url": "https://api.github.com/users/slarrain/repos", + "events_url": "https://api.github.com/users/slarrain/events{/privacy}", + "received_events_url": "https://api.github.com/users/slarrain/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/slarrain/nand2tetris", + "description": "Repository of Introduction to Computer Systems from Uchicago that follows the nand2tetris curriculum", + "fork": false, + "url": "https://api.github.com/repos/slarrain/nand2tetris", + "forks_url": "https://api.github.com/repos/slarrain/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/slarrain/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/slarrain/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/slarrain/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/slarrain/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/slarrain/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/slarrain/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/slarrain/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/slarrain/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/slarrain/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/slarrain/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/slarrain/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/slarrain/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/slarrain/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/slarrain/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/slarrain/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/slarrain/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/slarrain/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/slarrain/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/slarrain/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/slarrain/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/slarrain/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/slarrain/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/slarrain/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/slarrain/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/slarrain/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/slarrain/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/slarrain/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/slarrain/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/slarrain/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/slarrain/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/slarrain/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/slarrain/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/slarrain/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/slarrain/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/slarrain/nand2tetris/deployments", + "created_at": "2016-01-26T21:59:19Z", + "updated_at": "2016-01-26T22:02:19Z", + "pushed_at": "2016-03-14T05:49:00Z", + "git_url": "git://github.com/slarrain/nand2tetris.git", + "ssh_url": "git@github.com:slarrain/nand2tetris.git", + "clone_url": "https://github.com/slarrain/nand2tetris.git", + "svn_url": "https://github.com/slarrain/nand2tetris", + "homepage": null, + "size": 687, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 54332208, + "name": "nand2Tetris", + "full_name": "gmuraleekrishna/nand2Tetris", + "owner": { + "login": "gmuraleekrishna", + "id": 8102394, + "avatar_url": "https://avatars.githubusercontent.com/u/8102394?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gmuraleekrishna", + "html_url": "https://github.com/gmuraleekrishna", + "followers_url": "https://api.github.com/users/gmuraleekrishna/followers", + "following_url": "https://api.github.com/users/gmuraleekrishna/following{/other_user}", + "gists_url": "https://api.github.com/users/gmuraleekrishna/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gmuraleekrishna/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gmuraleekrishna/subscriptions", + "organizations_url": "https://api.github.com/users/gmuraleekrishna/orgs", + "repos_url": "https://api.github.com/users/gmuraleekrishna/repos", + "events_url": "https://api.github.com/users/gmuraleekrishna/events{/privacy}", + "received_events_url": "https://api.github.com/users/gmuraleekrishna/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/gmuraleekrishna/nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris", + "forks_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/gmuraleekrishna/nand2Tetris/deployments", + "created_at": "2016-03-20T18:00:02Z", + "updated_at": "2016-03-20T18:01:42Z", + "pushed_at": "2016-03-20T18:01:40Z", + "git_url": "git://github.com/gmuraleekrishna/nand2Tetris.git", + "ssh_url": "git@github.com:gmuraleekrishna/nand2Tetris.git", + "clone_url": "https://github.com/gmuraleekrishna/nand2Tetris.git", + "svn_url": "https://github.com/gmuraleekrishna/nand2Tetris", + "homepage": null, + "size": 505, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 48966707, + "name": "nand2tetris", + "full_name": "go717franciswang/nand2tetris", + "owner": { + "login": "go717franciswang", + "id": 3183961, + "avatar_url": "https://avatars.githubusercontent.com/u/3183961?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/go717franciswang", + "html_url": "https://github.com/go717franciswang", + "followers_url": "https://api.github.com/users/go717franciswang/followers", + "following_url": "https://api.github.com/users/go717franciswang/following{/other_user}", + "gists_url": "https://api.github.com/users/go717franciswang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/go717franciswang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/go717franciswang/subscriptions", + "organizations_url": "https://api.github.com/users/go717franciswang/orgs", + "repos_url": "https://api.github.com/users/go717franciswang/repos", + "events_url": "https://api.github.com/users/go717franciswang/events{/privacy}", + "received_events_url": "https://api.github.com/users/go717franciswang/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/go717franciswang/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/go717franciswang/nand2tetris", + "forks_url": "https://api.github.com/repos/go717franciswang/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/go717franciswang/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/go717franciswang/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/go717franciswang/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/go717franciswang/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/go717franciswang/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/go717franciswang/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/go717franciswang/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/go717franciswang/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/go717franciswang/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/go717franciswang/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/go717franciswang/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/go717franciswang/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/go717franciswang/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/go717franciswang/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/go717franciswang/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/go717franciswang/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/go717franciswang/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/go717franciswang/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/go717franciswang/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/go717franciswang/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/go717franciswang/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/go717franciswang/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/go717franciswang/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/go717franciswang/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/go717franciswang/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/go717franciswang/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/go717franciswang/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/go717franciswang/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/go717franciswang/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/go717franciswang/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/go717franciswang/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/go717franciswang/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/go717franciswang/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/go717franciswang/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/go717franciswang/nand2tetris/deployments", + "created_at": "2016-01-04T00:53:52Z", + "updated_at": "2016-01-11T03:56:51Z", + "pushed_at": "2016-03-20T02:25:37Z", + "git_url": "git://github.com/go717franciswang/nand2tetris.git", + "ssh_url": "git@github.com:go717franciswang/nand2tetris.git", + "clone_url": "https://github.com/go717franciswang/nand2tetris.git", + "svn_url": "https://github.com/go717franciswang/nand2tetris", + "homepage": null, + "size": 244, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 51969382, + "name": "nand2tetris", + "full_name": "psattiza/nand2tetris", + "owner": { + "login": "psattiza", + "id": 13973416, + "avatar_url": "https://avatars.githubusercontent.com/u/13973416?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/psattiza", + "html_url": "https://github.com/psattiza", + "followers_url": "https://api.github.com/users/psattiza/followers", + "following_url": "https://api.github.com/users/psattiza/following{/other_user}", + "gists_url": "https://api.github.com/users/psattiza/gists{/gist_id}", + "starred_url": "https://api.github.com/users/psattiza/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/psattiza/subscriptions", + "organizations_url": "https://api.github.com/users/psattiza/orgs", + "repos_url": "https://api.github.com/users/psattiza/repos", + "events_url": "https://api.github.com/users/psattiza/events{/privacy}", + "received_events_url": "https://api.github.com/users/psattiza/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/psattiza/nand2tetris", + "description": "nand2tetris course", + "fork": false, + "url": "https://api.github.com/repos/psattiza/nand2tetris", + "forks_url": "https://api.github.com/repos/psattiza/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/psattiza/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/psattiza/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/psattiza/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/psattiza/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/psattiza/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/psattiza/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/psattiza/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/psattiza/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/psattiza/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/psattiza/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/psattiza/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/psattiza/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/psattiza/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/psattiza/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/psattiza/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/psattiza/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/psattiza/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/psattiza/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/psattiza/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/psattiza/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/psattiza/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/psattiza/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/psattiza/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/psattiza/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/psattiza/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/psattiza/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/psattiza/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/psattiza/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/psattiza/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/psattiza/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/psattiza/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/psattiza/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/psattiza/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/psattiza/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/psattiza/nand2tetris/deployments", + "created_at": "2016-02-18T01:36:58Z", + "updated_at": "2016-02-18T01:38:58Z", + "pushed_at": "2016-03-17T05:25:39Z", + "git_url": "git://github.com/psattiza/nand2tetris.git", + "ssh_url": "git@github.com:psattiza/nand2tetris.git", + "clone_url": "https://github.com/psattiza/nand2tetris.git", + "svn_url": "https://github.com/psattiza/nand2tetris", + "homepage": null, + "size": 184, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 53259812, + "name": "Nand2Tetris", + "full_name": "YuvalFatal/Nand2Tetris", + "owner": { + "login": "YuvalFatal", + "id": 5262322, + "avatar_url": "https://avatars.githubusercontent.com/u/5262322?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/YuvalFatal", + "html_url": "https://github.com/YuvalFatal", + "followers_url": "https://api.github.com/users/YuvalFatal/followers", + "following_url": "https://api.github.com/users/YuvalFatal/following{/other_user}", + "gists_url": "https://api.github.com/users/YuvalFatal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/YuvalFatal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/YuvalFatal/subscriptions", + "organizations_url": "https://api.github.com/users/YuvalFatal/orgs", + "repos_url": "https://api.github.com/users/YuvalFatal/repos", + "events_url": "https://api.github.com/users/YuvalFatal/events{/privacy}", + "received_events_url": "https://api.github.com/users/YuvalFatal/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/YuvalFatal/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris", + "forks_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/YuvalFatal/Nand2Tetris/deployments", + "created_at": "2016-03-06T14:48:29Z", + "updated_at": "2016-03-06T14:49:21Z", + "pushed_at": "2016-03-17T15:37:08Z", + "git_url": "git://github.com/YuvalFatal/Nand2Tetris.git", + "ssh_url": "git@github.com:YuvalFatal/Nand2Tetris.git", + "clone_url": "https://github.com/YuvalFatal/Nand2Tetris.git", + "svn_url": "https://github.com/YuvalFatal/Nand2Tetris", + "homepage": null, + "size": 514, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 54282738, + "name": "nand2Tetris", + "full_name": "rlabuonora/nand2Tetris", + "owner": { + "login": "rlabuonora", + "id": 10402561, + "avatar_url": "https://avatars.githubusercontent.com/u/10402561?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rlabuonora", + "html_url": "https://github.com/rlabuonora", + "followers_url": "https://api.github.com/users/rlabuonora/followers", + "following_url": "https://api.github.com/users/rlabuonora/following{/other_user}", + "gists_url": "https://api.github.com/users/rlabuonora/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rlabuonora/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rlabuonora/subscriptions", + "organizations_url": "https://api.github.com/users/rlabuonora/orgs", + "repos_url": "https://api.github.com/users/rlabuonora/repos", + "events_url": "https://api.github.com/users/rlabuonora/events{/privacy}", + "received_events_url": "https://api.github.com/users/rlabuonora/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/rlabuonora/nand2Tetris", + "description": "Code for nand2Tetris course (www.nand2tetris.org)", + "fork": false, + "url": "https://api.github.com/repos/rlabuonora/nand2Tetris", + "forks_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/rlabuonora/nand2Tetris/deployments", + "created_at": "2016-03-19T19:12:08Z", + "updated_at": "2016-03-19T19:13:15Z", + "pushed_at": "2016-04-04T13:08:28Z", + "git_url": "git://github.com/rlabuonora/nand2Tetris.git", + "ssh_url": "git@github.com:rlabuonora/nand2Tetris.git", + "clone_url": "https://github.com/rlabuonora/nand2Tetris.git", + "svn_url": "https://github.com/rlabuonora/nand2Tetris", + "homepage": null, + "size": 182, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 55492950, + "name": "nand2Tetris", + "full_name": "cypriendker/nand2Tetris", + "owner": { + "login": "cypriendker", + "id": 14874788, + "avatar_url": "https://avatars.githubusercontent.com/u/14874788?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cypriendker", + "html_url": "https://github.com/cypriendker", + "followers_url": "https://api.github.com/users/cypriendker/followers", + "following_url": "https://api.github.com/users/cypriendker/following{/other_user}", + "gists_url": "https://api.github.com/users/cypriendker/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cypriendker/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cypriendker/subscriptions", + "organizations_url": "https://api.github.com/users/cypriendker/orgs", + "repos_url": "https://api.github.com/users/cypriendker/repos", + "events_url": "https://api.github.com/users/cypriendker/events{/privacy}", + "received_events_url": "https://api.github.com/users/cypriendker/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cypriendker/nand2Tetris", + "description": "Building a computer from the first principle", + "fork": false, + "url": "https://api.github.com/repos/cypriendker/nand2Tetris", + "forks_url": "https://api.github.com/repos/cypriendker/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/cypriendker/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cypriendker/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cypriendker/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/cypriendker/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/cypriendker/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/cypriendker/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/cypriendker/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/cypriendker/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/cypriendker/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/cypriendker/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cypriendker/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cypriendker/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cypriendker/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cypriendker/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cypriendker/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/cypriendker/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/cypriendker/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/cypriendker/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/cypriendker/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/cypriendker/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cypriendker/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cypriendker/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cypriendker/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cypriendker/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/cypriendker/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cypriendker/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/cypriendker/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cypriendker/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/cypriendker/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/cypriendker/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cypriendker/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cypriendker/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cypriendker/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/cypriendker/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/cypriendker/nand2Tetris/deployments", + "created_at": "2016-04-05T09:19:26Z", + "updated_at": "2016-04-05T09:35:23Z", + "pushed_at": "2016-04-05T09:35:20Z", + "git_url": "git://github.com/cypriendker/nand2Tetris.git", + "ssh_url": "git@github.com:cypriendker/nand2Tetris.git", + "clone_url": "https://github.com/cypriendker/nand2Tetris.git", + "svn_url": "https://github.com/cypriendker/nand2Tetris", + "homepage": null, + "size": 8632, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 49128906, + "name": "nand2tetris", + "full_name": "AmaanC/nand2tetris", + "owner": { + "login": "AmaanC", + "id": 1172631, + "avatar_url": "https://avatars.githubusercontent.com/u/1172631?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/AmaanC", + "html_url": "https://github.com/AmaanC", + "followers_url": "https://api.github.com/users/AmaanC/followers", + "following_url": "https://api.github.com/users/AmaanC/following{/other_user}", + "gists_url": "https://api.github.com/users/AmaanC/gists{/gist_id}", + "starred_url": "https://api.github.com/users/AmaanC/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/AmaanC/subscriptions", + "organizations_url": "https://api.github.com/users/AmaanC/orgs", + "repos_url": "https://api.github.com/users/AmaanC/repos", + "events_url": "https://api.github.com/users/AmaanC/events{/privacy}", + "received_events_url": "https://api.github.com/users/AmaanC/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/AmaanC/nand2tetris", + "description": "Files for the nand2tetris course (that I will hopefully finish)", + "fork": false, + "url": "https://api.github.com/repos/AmaanC/nand2tetris", + "forks_url": "https://api.github.com/repos/AmaanC/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/AmaanC/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/AmaanC/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/AmaanC/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/AmaanC/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/AmaanC/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/AmaanC/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/AmaanC/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/AmaanC/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/AmaanC/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/AmaanC/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/AmaanC/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/AmaanC/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/AmaanC/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/AmaanC/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/AmaanC/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/AmaanC/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/AmaanC/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/AmaanC/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/AmaanC/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/AmaanC/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/AmaanC/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/AmaanC/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/AmaanC/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/AmaanC/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/AmaanC/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/AmaanC/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/AmaanC/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/AmaanC/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/AmaanC/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/AmaanC/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/AmaanC/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/AmaanC/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/AmaanC/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/AmaanC/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/AmaanC/nand2tetris/deployments", + "created_at": "2016-01-06T10:33:02Z", + "updated_at": "2016-01-16T10:21:48Z", + "pushed_at": "2016-04-14T09:23:21Z", + "git_url": "git://github.com/AmaanC/nand2tetris.git", + "ssh_url": "git@github.com:AmaanC/nand2tetris.git", + "clone_url": "https://github.com/AmaanC/nand2tetris.git", + "svn_url": "https://github.com/AmaanC/nand2tetris", + "homepage": null, + "size": 180, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 56644167, + "name": "nand2tetris", + "full_name": "lawrenceue/nand2tetris", + "owner": { + "login": "lawrenceue", + "id": 9583359, + "avatar_url": "https://avatars.githubusercontent.com/u/9583359?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lawrenceue", + "html_url": "https://github.com/lawrenceue", + "followers_url": "https://api.github.com/users/lawrenceue/followers", + "following_url": "https://api.github.com/users/lawrenceue/following{/other_user}", + "gists_url": "https://api.github.com/users/lawrenceue/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lawrenceue/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lawrenceue/subscriptions", + "organizations_url": "https://api.github.com/users/lawrenceue/orgs", + "repos_url": "https://api.github.com/users/lawrenceue/repos", + "events_url": "https://api.github.com/users/lawrenceue/events{/privacy}", + "received_events_url": "https://api.github.com/users/lawrenceue/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lawrenceue/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/lawrenceue/nand2tetris", + "forks_url": "https://api.github.com/repos/lawrenceue/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lawrenceue/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lawrenceue/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lawrenceue/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lawrenceue/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lawrenceue/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lawrenceue/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lawrenceue/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lawrenceue/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lawrenceue/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lawrenceue/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lawrenceue/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lawrenceue/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lawrenceue/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lawrenceue/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lawrenceue/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lawrenceue/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lawrenceue/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lawrenceue/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lawrenceue/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lawrenceue/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lawrenceue/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lawrenceue/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lawrenceue/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lawrenceue/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lawrenceue/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lawrenceue/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lawrenceue/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lawrenceue/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lawrenceue/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lawrenceue/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lawrenceue/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lawrenceue/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lawrenceue/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lawrenceue/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lawrenceue/nand2tetris/deployments", + "created_at": "2016-04-20T01:09:36Z", + "updated_at": "2016-04-20T01:10:26Z", + "pushed_at": "2016-04-20T02:13:41Z", + "git_url": "git://github.com/lawrenceue/nand2tetris.git", + "ssh_url": "git@github.com:lawrenceue/nand2tetris.git", + "clone_url": "https://github.com/lawrenceue/nand2tetris.git", + "svn_url": "https://github.com/lawrenceue/nand2tetris", + "homepage": null, + "size": 500, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 55757990, + "name": "nand2tetris", + "full_name": "current1990/nand2tetris", + "owner": { + "login": "current1990", + "id": 3123256, + "avatar_url": "https://avatars.githubusercontent.com/u/3123256?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/current1990", + "html_url": "https://github.com/current1990", + "followers_url": "https://api.github.com/users/current1990/followers", + "following_url": "https://api.github.com/users/current1990/following{/other_user}", + "gists_url": "https://api.github.com/users/current1990/gists{/gist_id}", + "starred_url": "https://api.github.com/users/current1990/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/current1990/subscriptions", + "organizations_url": "https://api.github.com/users/current1990/orgs", + "repos_url": "https://api.github.com/users/current1990/repos", + "events_url": "https://api.github.com/users/current1990/events{/privacy}", + "received_events_url": "https://api.github.com/users/current1990/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/current1990/nand2tetris", + "description": "Nand2Tetris Project from \"Elements of computing system\"", + "fork": false, + "url": "https://api.github.com/repos/current1990/nand2tetris", + "forks_url": "https://api.github.com/repos/current1990/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/current1990/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/current1990/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/current1990/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/current1990/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/current1990/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/current1990/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/current1990/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/current1990/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/current1990/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/current1990/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/current1990/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/current1990/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/current1990/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/current1990/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/current1990/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/current1990/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/current1990/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/current1990/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/current1990/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/current1990/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/current1990/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/current1990/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/current1990/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/current1990/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/current1990/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/current1990/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/current1990/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/current1990/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/current1990/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/current1990/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/current1990/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/current1990/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/current1990/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/current1990/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/current1990/nand2tetris/deployments", + "created_at": "2016-04-08T07:05:16Z", + "updated_at": "2016-04-08T07:39:13Z", + "pushed_at": "2016-04-26T17:33:35Z", + "git_url": "git://github.com/current1990/nand2tetris.git", + "ssh_url": "git@github.com:current1990/nand2tetris.git", + "clone_url": "https://github.com/current1990/nand2tetris.git", + "svn_url": "https://github.com/current1990/nand2tetris", + "homepage": null, + "size": 171, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 57226094, + "name": "nand2tetris", + "full_name": "AlexAhern/nand2tetris", + "owner": { + "login": "AlexAhern", + "id": 16082622, + "avatar_url": "https://avatars.githubusercontent.com/u/16082622?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/AlexAhern", + "html_url": "https://github.com/AlexAhern", + "followers_url": "https://api.github.com/users/AlexAhern/followers", + "following_url": "https://api.github.com/users/AlexAhern/following{/other_user}", + "gists_url": "https://api.github.com/users/AlexAhern/gists{/gist_id}", + "starred_url": "https://api.github.com/users/AlexAhern/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/AlexAhern/subscriptions", + "organizations_url": "https://api.github.com/users/AlexAhern/orgs", + "repos_url": "https://api.github.com/users/AlexAhern/repos", + "events_url": "https://api.github.com/users/AlexAhern/events{/privacy}", + "received_events_url": "https://api.github.com/users/AlexAhern/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/AlexAhern/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/AlexAhern/nand2tetris", + "forks_url": "https://api.github.com/repos/AlexAhern/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/AlexAhern/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/AlexAhern/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/AlexAhern/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/AlexAhern/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/AlexAhern/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/AlexAhern/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/AlexAhern/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/AlexAhern/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/AlexAhern/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/AlexAhern/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/AlexAhern/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/AlexAhern/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/AlexAhern/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/AlexAhern/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/AlexAhern/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/AlexAhern/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/AlexAhern/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/AlexAhern/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/AlexAhern/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/AlexAhern/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/AlexAhern/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/AlexAhern/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/AlexAhern/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/AlexAhern/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/AlexAhern/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/AlexAhern/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/AlexAhern/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/AlexAhern/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/AlexAhern/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/AlexAhern/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/AlexAhern/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/AlexAhern/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/AlexAhern/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/AlexAhern/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/AlexAhern/nand2tetris/deployments", + "created_at": "2016-04-27T15:51:15Z", + "updated_at": "2016-04-27T15:51:49Z", + "pushed_at": "2016-05-04T14:22:48Z", + "git_url": "git://github.com/AlexAhern/nand2tetris.git", + "ssh_url": "git@github.com:AlexAhern/nand2tetris.git", + "clone_url": "https://github.com/AlexAhern/nand2tetris.git", + "svn_url": "https://github.com/AlexAhern/nand2tetris", + "homepage": null, + "size": 191, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 56970785, + "name": "nand2tetris", + "full_name": "yasunaga1192/nand2tetris", + "owner": { + "login": "yasunaga1192", + "id": 13289061, + "avatar_url": "https://avatars.githubusercontent.com/u/13289061?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yasunaga1192", + "html_url": "https://github.com/yasunaga1192", + "followers_url": "https://api.github.com/users/yasunaga1192/followers", + "following_url": "https://api.github.com/users/yasunaga1192/following{/other_user}", + "gists_url": "https://api.github.com/users/yasunaga1192/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yasunaga1192/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yasunaga1192/subscriptions", + "organizations_url": "https://api.github.com/users/yasunaga1192/orgs", + "repos_url": "https://api.github.com/users/yasunaga1192/repos", + "events_url": "https://api.github.com/users/yasunaga1192/events{/privacy}", + "received_events_url": "https://api.github.com/users/yasunaga1192/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yasunaga1192/nand2tetris", + "description": "「コンピュータシステムの理論と実装」の作業管理", + "fork": false, + "url": "https://api.github.com/repos/yasunaga1192/nand2tetris", + "forks_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yasunaga1192/nand2tetris/deployments", + "created_at": "2016-04-24T12:40:52Z", + "updated_at": "2016-04-24T12:41:36Z", + "pushed_at": "2016-04-24T12:53:11Z", + "git_url": "git://github.com/yasunaga1192/nand2tetris.git", + "ssh_url": "git@github.com:yasunaga1192/nand2tetris.git", + "clone_url": "https://github.com/yasunaga1192/nand2tetris.git", + "svn_url": "https://github.com/yasunaga1192/nand2tetris", + "homepage": null, + "size": 156, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 51786798, + "name": "nand2tetris", + "full_name": "alicetang0618/nand2tetris", + "owner": { + "login": "alicetang0618", + "id": 8813301, + "avatar_url": "https://avatars.githubusercontent.com/u/8813301?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/alicetang0618", + "html_url": "https://github.com/alicetang0618", + "followers_url": "https://api.github.com/users/alicetang0618/followers", + "following_url": "https://api.github.com/users/alicetang0618/following{/other_user}", + "gists_url": "https://api.github.com/users/alicetang0618/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alicetang0618/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alicetang0618/subscriptions", + "organizations_url": "https://api.github.com/users/alicetang0618/orgs", + "repos_url": "https://api.github.com/users/alicetang0618/repos", + "events_url": "https://api.github.com/users/alicetang0618/events{/privacy}", + "received_events_url": "https://api.github.com/users/alicetang0618/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/alicetang0618/nand2tetris", + "description": "Course projects for Intro to Computer Systems", + "fork": false, + "url": "https://api.github.com/repos/alicetang0618/nand2tetris", + "forks_url": "https://api.github.com/repos/alicetang0618/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/alicetang0618/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/alicetang0618/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/alicetang0618/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/alicetang0618/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/alicetang0618/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/alicetang0618/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/alicetang0618/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/alicetang0618/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/alicetang0618/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/alicetang0618/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/alicetang0618/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/alicetang0618/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/alicetang0618/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/alicetang0618/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/alicetang0618/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/alicetang0618/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/alicetang0618/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/alicetang0618/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/alicetang0618/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/alicetang0618/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/alicetang0618/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/alicetang0618/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/alicetang0618/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/alicetang0618/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/alicetang0618/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/alicetang0618/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/alicetang0618/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/alicetang0618/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/alicetang0618/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/alicetang0618/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/alicetang0618/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/alicetang0618/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/alicetang0618/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/alicetang0618/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/alicetang0618/nand2tetris/deployments", + "created_at": "2016-02-15T21:24:43Z", + "updated_at": "2016-02-15T21:26:22Z", + "pushed_at": "2016-04-29T05:24:37Z", + "git_url": "git://github.com/alicetang0618/nand2tetris.git", + "ssh_url": "git@github.com:alicetang0618/nand2tetris.git", + "clone_url": "https://github.com/alicetang0618/nand2tetris.git", + "svn_url": "https://github.com/alicetang0618/nand2tetris", + "homepage": null, + "size": 259, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 57874646, + "name": "Nand2Tetris", + "full_name": "Huyuwei/Nand2Tetris", + "owner": { + "login": "Huyuwei", + "id": 17470319, + "avatar_url": "https://avatars.githubusercontent.com/u/17470319?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Huyuwei", + "html_url": "https://github.com/Huyuwei", + "followers_url": "https://api.github.com/users/Huyuwei/followers", + "following_url": "https://api.github.com/users/Huyuwei/following{/other_user}", + "gists_url": "https://api.github.com/users/Huyuwei/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Huyuwei/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Huyuwei/subscriptions", + "organizations_url": "https://api.github.com/users/Huyuwei/orgs", + "repos_url": "https://api.github.com/users/Huyuwei/repos", + "events_url": "https://api.github.com/users/Huyuwei/events{/privacy}", + "received_events_url": "https://api.github.com/users/Huyuwei/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Huyuwei/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Huyuwei/Nand2Tetris", + "forks_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Huyuwei/Nand2Tetris/deployments", + "created_at": "2016-05-02T08:20:28Z", + "updated_at": "2016-05-02T08:29:40Z", + "pushed_at": "2016-05-02T08:34:20Z", + "git_url": "git://github.com/Huyuwei/Nand2Tetris.git", + "ssh_url": "git@github.com:Huyuwei/Nand2Tetris.git", + "clone_url": "https://github.com/Huyuwei/Nand2Tetris.git", + "svn_url": "https://github.com/Huyuwei/Nand2Tetris", + "homepage": null, + "size": 24, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 55445260, + "name": "nand2tetris", + "full_name": "sammydre/nand2tetris", + "owner": { + "login": "sammydre", + "id": 404569, + "avatar_url": "https://avatars.githubusercontent.com/u/404569?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sammydre", + "html_url": "https://github.com/sammydre", + "followers_url": "https://api.github.com/users/sammydre/followers", + "following_url": "https://api.github.com/users/sammydre/following{/other_user}", + "gists_url": "https://api.github.com/users/sammydre/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sammydre/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sammydre/subscriptions", + "organizations_url": "https://api.github.com/users/sammydre/orgs", + "repos_url": "https://api.github.com/users/sammydre/repos", + "events_url": "https://api.github.com/users/sammydre/events{/privacy}", + "received_events_url": "https://api.github.com/users/sammydre/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sammydre/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/sammydre/nand2tetris", + "forks_url": "https://api.github.com/repos/sammydre/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/sammydre/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sammydre/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sammydre/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/sammydre/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/sammydre/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/sammydre/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/sammydre/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/sammydre/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/sammydre/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/sammydre/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sammydre/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sammydre/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sammydre/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sammydre/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sammydre/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/sammydre/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/sammydre/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/sammydre/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/sammydre/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/sammydre/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sammydre/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sammydre/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sammydre/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sammydre/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/sammydre/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sammydre/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/sammydre/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sammydre/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/sammydre/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/sammydre/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sammydre/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sammydre/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sammydre/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/sammydre/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/sammydre/nand2tetris/deployments", + "created_at": "2016-04-04T21:07:47Z", + "updated_at": "2016-04-04T21:09:08Z", + "pushed_at": "2016-04-30T08:17:25Z", + "git_url": "git://github.com/sammydre/nand2tetris.git", + "ssh_url": "git@github.com:sammydre/nand2tetris.git", + "clone_url": "https://github.com/sammydre/nand2tetris.git", + "svn_url": "https://github.com/sammydre/nand2tetris", + "homepage": null, + "size": 2100, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 57863554, + "name": "nand2tetris", + "full_name": "Angeldude/nand2tetris", + "owner": { + "login": "Angeldude", + "id": 5219857, + "avatar_url": "https://avatars.githubusercontent.com/u/5219857?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Angeldude", + "html_url": "https://github.com/Angeldude", + "followers_url": "https://api.github.com/users/Angeldude/followers", + "following_url": "https://api.github.com/users/Angeldude/following{/other_user}", + "gists_url": "https://api.github.com/users/Angeldude/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Angeldude/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Angeldude/subscriptions", + "organizations_url": "https://api.github.com/users/Angeldude/orgs", + "repos_url": "https://api.github.com/users/Angeldude/repos", + "events_url": "https://api.github.com/users/Angeldude/events{/privacy}", + "received_events_url": "https://api.github.com/users/Angeldude/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Angeldude/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/Angeldude/nand2tetris", + "forks_url": "https://api.github.com/repos/Angeldude/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Angeldude/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Angeldude/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Angeldude/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Angeldude/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Angeldude/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Angeldude/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Angeldude/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Angeldude/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Angeldude/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Angeldude/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Angeldude/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Angeldude/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Angeldude/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Angeldude/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Angeldude/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Angeldude/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Angeldude/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Angeldude/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Angeldude/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Angeldude/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Angeldude/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Angeldude/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Angeldude/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Angeldude/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Angeldude/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Angeldude/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Angeldude/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Angeldude/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Angeldude/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Angeldude/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Angeldude/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Angeldude/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Angeldude/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Angeldude/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Angeldude/nand2tetris/deployments", + "created_at": "2016-05-02T03:19:02Z", + "updated_at": "2016-05-02T03:19:46Z", + "pushed_at": "2016-05-02T03:20:24Z", + "git_url": "git://github.com/Angeldude/nand2tetris.git", + "ssh_url": "git@github.com:Angeldude/nand2tetris.git", + "clone_url": "https://github.com/Angeldude/nand2tetris.git", + "svn_url": "https://github.com/Angeldude/nand2tetris", + "homepage": null, + "size": 162, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 58306139, + "name": "nand2tetris", + "full_name": "spike01/nand2tetris", + "owner": { + "login": "spike01", + "id": 7307631, + "avatar_url": "https://avatars.githubusercontent.com/u/7307631?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/spike01", + "html_url": "https://github.com/spike01", + "followers_url": "https://api.github.com/users/spike01/followers", + "following_url": "https://api.github.com/users/spike01/following{/other_user}", + "gists_url": "https://api.github.com/users/spike01/gists{/gist_id}", + "starred_url": "https://api.github.com/users/spike01/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/spike01/subscriptions", + "organizations_url": "https://api.github.com/users/spike01/orgs", + "repos_url": "https://api.github.com/users/spike01/repos", + "events_url": "https://api.github.com/users/spike01/events{/privacy}", + "received_events_url": "https://api.github.com/users/spike01/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/spike01/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/spike01/nand2tetris", + "forks_url": "https://api.github.com/repos/spike01/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/spike01/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/spike01/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/spike01/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/spike01/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/spike01/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/spike01/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/spike01/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/spike01/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/spike01/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/spike01/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/spike01/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/spike01/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/spike01/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/spike01/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/spike01/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/spike01/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/spike01/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/spike01/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/spike01/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/spike01/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/spike01/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/spike01/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/spike01/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/spike01/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/spike01/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/spike01/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/spike01/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/spike01/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/spike01/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/spike01/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/spike01/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/spike01/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/spike01/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/spike01/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/spike01/nand2tetris/deployments", + "created_at": "2016-05-08T09:59:58Z", + "updated_at": "2016-05-08T10:00:30Z", + "pushed_at": "2016-05-08T10:02:06Z", + "git_url": "git://github.com/spike01/nand2tetris.git", + "ssh_url": "git@github.com:spike01/nand2tetris.git", + "clone_url": "https://github.com/spike01/nand2tetris.git", + "svn_url": "https://github.com/spike01/nand2tetris", + "homepage": null, + "size": 148, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 58558992, + "name": "nand2tetris", + "full_name": "xiongxin/nand2tetris", + "owner": { + "login": "xiongxin", + "id": 2803069, + "avatar_url": "https://avatars.githubusercontent.com/u/2803069?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/xiongxin", + "html_url": "https://github.com/xiongxin", + "followers_url": "https://api.github.com/users/xiongxin/followers", + "following_url": "https://api.github.com/users/xiongxin/following{/other_user}", + "gists_url": "https://api.github.com/users/xiongxin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xiongxin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xiongxin/subscriptions", + "organizations_url": "https://api.github.com/users/xiongxin/orgs", + "repos_url": "https://api.github.com/users/xiongxin/repos", + "events_url": "https://api.github.com/users/xiongxin/events{/privacy}", + "received_events_url": "https://api.github.com/users/xiongxin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/xiongxin/nand2tetris", + "description": "nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/xiongxin/nand2tetris", + "forks_url": "https://api.github.com/repos/xiongxin/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/xiongxin/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/xiongxin/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/xiongxin/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/xiongxin/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/xiongxin/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/xiongxin/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/xiongxin/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/xiongxin/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/xiongxin/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/xiongxin/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/xiongxin/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/xiongxin/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/xiongxin/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/xiongxin/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/xiongxin/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/xiongxin/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/xiongxin/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/xiongxin/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/xiongxin/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/xiongxin/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/xiongxin/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/xiongxin/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/xiongxin/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/xiongxin/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/xiongxin/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/xiongxin/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/xiongxin/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/xiongxin/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/xiongxin/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/xiongxin/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/xiongxin/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/xiongxin/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/xiongxin/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/xiongxin/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/xiongxin/nand2tetris/deployments", + "created_at": "2016-05-11T15:50:55Z", + "updated_at": "2016-05-11T16:04:58Z", + "pushed_at": "2016-05-11T16:04:56Z", + "git_url": "git://github.com/xiongxin/nand2tetris.git", + "ssh_url": "git@github.com:xiongxin/nand2tetris.git", + "clone_url": "https://github.com/xiongxin/nand2tetris.git", + "svn_url": "https://github.com/xiongxin/nand2tetris", + "homepage": null, + "size": 163, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 41463104, + "name": "nand2tetris", + "full_name": "ReionChan/nand2tetris", + "owner": { + "login": "ReionChan", + "id": 12004482, + "avatar_url": "https://avatars.githubusercontent.com/u/12004482?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ReionChan", + "html_url": "https://github.com/ReionChan", + "followers_url": "https://api.github.com/users/ReionChan/followers", + "following_url": "https://api.github.com/users/ReionChan/following{/other_user}", + "gists_url": "https://api.github.com/users/ReionChan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ReionChan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ReionChan/subscriptions", + "organizations_url": "https://api.github.com/users/ReionChan/orgs", + "repos_url": "https://api.github.com/users/ReionChan/repos", + "events_url": "https://api.github.com/users/ReionChan/events{/privacy}", + "received_events_url": "https://api.github.com/users/ReionChan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ReionChan/nand2tetris", + "description": "The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/ReionChan/nand2tetris", + "forks_url": "https://api.github.com/repos/ReionChan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ReionChan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ReionChan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ReionChan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ReionChan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ReionChan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ReionChan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ReionChan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ReionChan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ReionChan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ReionChan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ReionChan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ReionChan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ReionChan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ReionChan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ReionChan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ReionChan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ReionChan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ReionChan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ReionChan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ReionChan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ReionChan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ReionChan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ReionChan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ReionChan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ReionChan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ReionChan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ReionChan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ReionChan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ReionChan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ReionChan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ReionChan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ReionChan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ReionChan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ReionChan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ReionChan/nand2tetris/deployments", + "created_at": "2015-08-27T03:13:15Z", + "updated_at": "2016-01-24T12:29:27Z", + "pushed_at": "2016-05-28T16:19:05Z", + "git_url": "git://github.com/ReionChan/nand2tetris.git", + "ssh_url": "git@github.com:ReionChan/nand2tetris.git", + "clone_url": "https://github.com/ReionChan/nand2tetris.git", + "svn_url": "https://github.com/ReionChan/nand2tetris", + "homepage": null, + "size": 1192, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 59611625, + "name": "nand2tetris", + "full_name": "alkass/nand2tetris", + "owner": { + "login": "alkass", + "id": 2851221, + "avatar_url": "https://avatars.githubusercontent.com/u/2851221?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/alkass", + "html_url": "https://github.com/alkass", + "followers_url": "https://api.github.com/users/alkass/followers", + "following_url": "https://api.github.com/users/alkass/following{/other_user}", + "gists_url": "https://api.github.com/users/alkass/gists{/gist_id}", + "starred_url": "https://api.github.com/users/alkass/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/alkass/subscriptions", + "organizations_url": "https://api.github.com/users/alkass/orgs", + "repos_url": "https://api.github.com/users/alkass/repos", + "events_url": "https://api.github.com/users/alkass/events{/privacy}", + "received_events_url": "https://api.github.com/users/alkass/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/alkass/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/alkass/nand2tetris", + "forks_url": "https://api.github.com/repos/alkass/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/alkass/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/alkass/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/alkass/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/alkass/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/alkass/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/alkass/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/alkass/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/alkass/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/alkass/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/alkass/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/alkass/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/alkass/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/alkass/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/alkass/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/alkass/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/alkass/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/alkass/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/alkass/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/alkass/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/alkass/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/alkass/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/alkass/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/alkass/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/alkass/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/alkass/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/alkass/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/alkass/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/alkass/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/alkass/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/alkass/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/alkass/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/alkass/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/alkass/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/alkass/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/alkass/nand2tetris/deployments", + "created_at": "2016-05-24T22:00:32Z", + "updated_at": "2016-05-24T22:01:40Z", + "pushed_at": "2016-05-27T01:23:58Z", + "git_url": "git://github.com/alkass/nand2tetris.git", + "ssh_url": "git@github.com:alkass/nand2tetris.git", + "clone_url": "https://github.com/alkass/nand2tetris.git", + "svn_url": "https://github.com/alkass/nand2tetris", + "homepage": null, + "size": 5611, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 58477088, + "name": "nand2tetris", + "full_name": "ivanovyordan/nand2tetris", + "owner": { + "login": "ivanovyordan", + "id": 979329, + "avatar_url": "https://avatars.githubusercontent.com/u/979329?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ivanovyordan", + "html_url": "https://github.com/ivanovyordan", + "followers_url": "https://api.github.com/users/ivanovyordan/followers", + "following_url": "https://api.github.com/users/ivanovyordan/following{/other_user}", + "gists_url": "https://api.github.com/users/ivanovyordan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ivanovyordan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ivanovyordan/subscriptions", + "organizations_url": "https://api.github.com/users/ivanovyordan/orgs", + "repos_url": "https://api.github.com/users/ivanovyordan/repos", + "events_url": "https://api.github.com/users/ivanovyordan/events{/privacy}", + "received_events_url": "https://api.github.com/users/ivanovyordan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ivanovyordan/nand2tetris", + "description": "nand2tetris solutions", + "fork": false, + "url": "https://api.github.com/repos/ivanovyordan/nand2tetris", + "forks_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ivanovyordan/nand2tetris/deployments", + "created_at": "2016-05-10T16:31:01Z", + "updated_at": "2016-05-15T05:05:27Z", + "pushed_at": "2016-05-29T18:27:19Z", + "git_url": "git://github.com/ivanovyordan/nand2tetris.git", + "ssh_url": "git@github.com:ivanovyordan/nand2tetris.git", + "clone_url": "https://github.com/ivanovyordan/nand2tetris.git", + "svn_url": "https://github.com/ivanovyordan/nand2tetris", + "homepage": "http://nand2tetris.org/", + "size": 177, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 59302651, + "name": "nand2tetris", + "full_name": "dco5/nand2tetris", + "owner": { + "login": "dco5", + "id": 3612771, + "avatar_url": "https://avatars.githubusercontent.com/u/3612771?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dco5", + "html_url": "https://github.com/dco5", + "followers_url": "https://api.github.com/users/dco5/followers", + "following_url": "https://api.github.com/users/dco5/following{/other_user}", + "gists_url": "https://api.github.com/users/dco5/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dco5/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dco5/subscriptions", + "organizations_url": "https://api.github.com/users/dco5/orgs", + "repos_url": "https://api.github.com/users/dco5/repos", + "events_url": "https://api.github.com/users/dco5/events{/privacy}", + "received_events_url": "https://api.github.com/users/dco5/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dco5/nand2tetris", + "description": "nand2tetris course", + "fork": false, + "url": "https://api.github.com/repos/dco5/nand2tetris", + "forks_url": "https://api.github.com/repos/dco5/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dco5/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dco5/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dco5/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dco5/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dco5/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dco5/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dco5/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dco5/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dco5/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dco5/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dco5/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dco5/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dco5/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dco5/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dco5/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dco5/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dco5/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dco5/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dco5/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dco5/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dco5/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dco5/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dco5/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dco5/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dco5/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dco5/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dco5/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dco5/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dco5/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dco5/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dco5/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dco5/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dco5/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dco5/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dco5/nand2tetris/deployments", + "created_at": "2016-05-20T14:48:42Z", + "updated_at": "2016-05-20T14:52:13Z", + "pushed_at": "2016-05-20T14:52:11Z", + "git_url": "git://github.com/dco5/nand2tetris.git", + "ssh_url": "git@github.com:dco5/nand2tetris.git", + "clone_url": "https://github.com/dco5/nand2tetris.git", + "svn_url": "https://github.com/dco5/nand2tetris", + "homepage": null, + "size": 156, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 59434860, + "name": "Nand2Tetris", + "full_name": "yanmingy/Nand2Tetris", + "owner": { + "login": "yanmingy", + "id": 17456670, + "avatar_url": "https://avatars.githubusercontent.com/u/17456670?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yanmingy", + "html_url": "https://github.com/yanmingy", + "followers_url": "https://api.github.com/users/yanmingy/followers", + "following_url": "https://api.github.com/users/yanmingy/following{/other_user}", + "gists_url": "https://api.github.com/users/yanmingy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yanmingy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yanmingy/subscriptions", + "organizations_url": "https://api.github.com/users/yanmingy/orgs", + "repos_url": "https://api.github.com/users/yanmingy/repos", + "events_url": "https://api.github.com/users/yanmingy/events{/privacy}", + "received_events_url": "https://api.github.com/users/yanmingy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yanmingy/Nand2Tetris", + "description": "Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/yanmingy/Nand2Tetris", + "forks_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/yanmingy/Nand2Tetris/deployments", + "created_at": "2016-05-22T21:19:07Z", + "updated_at": "2016-05-22T21:33:57Z", + "pushed_at": "2016-05-22T21:33:34Z", + "git_url": "git://github.com/yanmingy/Nand2Tetris.git", + "ssh_url": "git@github.com:yanmingy/Nand2Tetris.git", + "clone_url": "https://github.com/yanmingy/Nand2Tetris.git", + "svn_url": "https://github.com/yanmingy/Nand2Tetris", + "homepage": "", + "size": 504, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 59260827, + "name": "Nand2tetris", + "full_name": "nao-otsu/Nand2tetris", + "owner": { + "login": "nao-otsu", + "id": 14013767, + "avatar_url": "https://avatars.githubusercontent.com/u/14013767?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nao-otsu", + "html_url": "https://github.com/nao-otsu", + "followers_url": "https://api.github.com/users/nao-otsu/followers", + "following_url": "https://api.github.com/users/nao-otsu/following{/other_user}", + "gists_url": "https://api.github.com/users/nao-otsu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nao-otsu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nao-otsu/subscriptions", + "organizations_url": "https://api.github.com/users/nao-otsu/orgs", + "repos_url": "https://api.github.com/users/nao-otsu/repos", + "events_url": "https://api.github.com/users/nao-otsu/events{/privacy}", + "received_events_url": "https://api.github.com/users/nao-otsu/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nao-otsu/Nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/nao-otsu/Nand2tetris", + "forks_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/forks", + "keys_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/events", + "assignees_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/merges", + "archive_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/nao-otsu/Nand2tetris/deployments", + "created_at": "2016-05-20T03:08:47Z", + "updated_at": "2016-05-20T03:17:32Z", + "pushed_at": "2016-05-25T05:32:05Z", + "git_url": "git://github.com/nao-otsu/Nand2tetris.git", + "ssh_url": "git@github.com:nao-otsu/Nand2tetris.git", + "clone_url": "https://github.com/nao-otsu/Nand2tetris.git", + "svn_url": "https://github.com/nao-otsu/Nand2tetris", + "homepage": null, + "size": 510, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 55948066, + "name": "Nand2Tetris", + "full_name": "fallsnow/Nand2Tetris", + "owner": { + "login": "fallsnow", + "id": 1739619, + "avatar_url": "https://avatars.githubusercontent.com/u/1739619?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/fallsnow", + "html_url": "https://github.com/fallsnow", + "followers_url": "https://api.github.com/users/fallsnow/followers", + "following_url": "https://api.github.com/users/fallsnow/following{/other_user}", + "gists_url": "https://api.github.com/users/fallsnow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fallsnow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fallsnow/subscriptions", + "organizations_url": "https://api.github.com/users/fallsnow/orgs", + "repos_url": "https://api.github.com/users/fallsnow/repos", + "events_url": "https://api.github.com/users/fallsnow/events{/privacy}", + "received_events_url": "https://api.github.com/users/fallsnow/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/fallsnow/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/fallsnow/Nand2Tetris", + "forks_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/fallsnow/Nand2Tetris/deployments", + "created_at": "2016-04-11T06:40:59Z", + "updated_at": "2016-04-11T06:45:37Z", + "pushed_at": "2016-06-15T08:02:34Z", + "git_url": "git://github.com/fallsnow/Nand2Tetris.git", + "ssh_url": "git@github.com:fallsnow/Nand2Tetris.git", + "clone_url": "https://github.com/fallsnow/Nand2Tetris.git", + "svn_url": "https://github.com/fallsnow/Nand2Tetris", + "homepage": null, + "size": 588, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 51712960, + "name": "nand2tetris", + "full_name": "dillstead/nand2tetris", + "owner": { + "login": "dillstead", + "id": 8709584, + "avatar_url": "https://avatars.githubusercontent.com/u/8709584?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dillstead", + "html_url": "https://github.com/dillstead", + "followers_url": "https://api.github.com/users/dillstead/followers", + "following_url": "https://api.github.com/users/dillstead/following{/other_user}", + "gists_url": "https://api.github.com/users/dillstead/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dillstead/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dillstead/subscriptions", + "organizations_url": "https://api.github.com/users/dillstead/orgs", + "repos_url": "https://api.github.com/users/dillstead/repos", + "events_url": "https://api.github.com/users/dillstead/events{/privacy}", + "received_events_url": "https://api.github.com/users/dillstead/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dillstead/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dillstead/nand2tetris", + "forks_url": "https://api.github.com/repos/dillstead/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dillstead/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dillstead/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dillstead/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dillstead/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dillstead/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dillstead/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dillstead/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dillstead/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dillstead/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dillstead/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dillstead/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dillstead/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dillstead/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dillstead/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dillstead/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dillstead/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dillstead/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dillstead/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dillstead/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dillstead/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dillstead/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dillstead/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dillstead/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dillstead/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dillstead/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dillstead/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dillstead/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dillstead/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dillstead/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dillstead/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dillstead/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dillstead/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dillstead/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dillstead/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dillstead/nand2tetris/deployments", + "created_at": "2016-02-14T20:54:39Z", + "updated_at": "2016-02-14T20:58:18Z", + "pushed_at": "2016-06-08T11:31:56Z", + "git_url": "git://github.com/dillstead/nand2tetris.git", + "ssh_url": "git@github.com:dillstead/nand2tetris.git", + "clone_url": "https://github.com/dillstead/nand2tetris.git", + "svn_url": "https://github.com/dillstead/nand2tetris", + "homepage": null, + "size": 189, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 60750184, + "name": "nand2tetris", + "full_name": "aaron-osterhage/nand2tetris", + "owner": { + "login": "aaron-osterhage", + "id": 12044589, + "avatar_url": "https://avatars.githubusercontent.com/u/12044589?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aaron-osterhage", + "html_url": "https://github.com/aaron-osterhage", + "followers_url": "https://api.github.com/users/aaron-osterhage/followers", + "following_url": "https://api.github.com/users/aaron-osterhage/following{/other_user}", + "gists_url": "https://api.github.com/users/aaron-osterhage/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aaron-osterhage/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aaron-osterhage/subscriptions", + "organizations_url": "https://api.github.com/users/aaron-osterhage/orgs", + "repos_url": "https://api.github.com/users/aaron-osterhage/repos", + "events_url": "https://api.github.com/users/aaron-osterhage/events{/privacy}", + "received_events_url": "https://api.github.com/users/aaron-osterhage/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/aaron-osterhage/nand2tetris", + "description": "My implementation of the nand2tetris projects", + "fork": false, + "url": "https://api.github.com/repos/aaron-osterhage/nand2tetris", + "forks_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/aaron-osterhage/nand2tetris/deployments", + "created_at": "2016-06-09T04:39:51Z", + "updated_at": "2016-06-09T04:43:36Z", + "pushed_at": "2016-06-12T03:12:39Z", + "git_url": "git://github.com/aaron-osterhage/nand2tetris.git", + "ssh_url": "git@github.com:aaron-osterhage/nand2tetris.git", + "clone_url": "https://github.com/aaron-osterhage/nand2tetris.git", + "svn_url": "https://github.com/aaron-osterhage/nand2tetris", + "homepage": null, + "size": 627, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 58568924, + "name": "Nand2Tetris", + "full_name": "arashout/Nand2Tetris", + "owner": { + "login": "arashout", + "id": 10860860, + "avatar_url": "https://avatars.githubusercontent.com/u/10860860?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/arashout", + "html_url": "https://github.com/arashout", + "followers_url": "https://api.github.com/users/arashout/followers", + "following_url": "https://api.github.com/users/arashout/following{/other_user}", + "gists_url": "https://api.github.com/users/arashout/gists{/gist_id}", + "starred_url": "https://api.github.com/users/arashout/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/arashout/subscriptions", + "organizations_url": "https://api.github.com/users/arashout/orgs", + "repos_url": "https://api.github.com/users/arashout/repos", + "events_url": "https://api.github.com/users/arashout/events{/privacy}", + "received_events_url": "https://api.github.com/users/arashout/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/arashout/Nand2Tetris", + "description": "First OSSU Course", + "fork": false, + "url": "https://api.github.com/repos/arashout/Nand2Tetris", + "forks_url": "https://api.github.com/repos/arashout/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/arashout/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/arashout/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/arashout/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/arashout/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/arashout/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/arashout/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/arashout/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/arashout/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/arashout/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/arashout/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/arashout/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/arashout/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/arashout/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/arashout/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/arashout/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/arashout/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/arashout/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/arashout/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/arashout/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/arashout/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/arashout/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/arashout/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/arashout/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/arashout/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/arashout/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/arashout/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/arashout/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/arashout/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/arashout/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/arashout/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/arashout/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/arashout/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/arashout/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/arashout/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/arashout/Nand2Tetris/deployments", + "created_at": "2016-05-11T18:07:42Z", + "updated_at": "2016-05-18T20:16:36Z", + "pushed_at": "2016-06-07T23:32:38Z", + "git_url": "git://github.com/arashout/Nand2Tetris.git", + "ssh_url": "git@github.com:arashout/Nand2Tetris.git", + "clone_url": "https://github.com/arashout/Nand2Tetris.git", + "svn_url": "https://github.com/arashout/Nand2Tetris", + "homepage": "", + "size": 559, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 59557080, + "name": "nand2tetris-projects", + "full_name": "yasserhussain1110/nand2tetris-projects", + "owner": { + "login": "yasserhussain1110", + "id": 6983268, + "avatar_url": "https://avatars.githubusercontent.com/u/6983268?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yasserhussain1110", + "html_url": "https://github.com/yasserhussain1110", + "followers_url": "https://api.github.com/users/yasserhussain1110/followers", + "following_url": "https://api.github.com/users/yasserhussain1110/following{/other_user}", + "gists_url": "https://api.github.com/users/yasserhussain1110/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yasserhussain1110/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yasserhussain1110/subscriptions", + "organizations_url": "https://api.github.com/users/yasserhussain1110/orgs", + "repos_url": "https://api.github.com/users/yasserhussain1110/repos", + "events_url": "https://api.github.com/users/yasserhussain1110/events{/privacy}", + "received_events_url": "https://api.github.com/users/yasserhussain1110/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/yasserhussain1110/nand2tetris-projects", + "description": "My solutions for nand2tetris assigments", + "fork": false, + "url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects", + "forks_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/forks", + "keys_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/teams", + "hooks_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/hooks", + "issue_events_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/issues/events{/number}", + "events_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/events", + "assignees_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/assignees{/user}", + "branches_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/branches{/branch}", + "tags_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/tags", + "blobs_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/languages", + "stargazers_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/stargazers", + "contributors_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/contributors", + "subscribers_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/subscribers", + "subscription_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/subscription", + "commits_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/contents/{+path}", + "compare_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/merges", + "archive_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/downloads", + "issues_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/issues{/number}", + "pulls_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/labels{/name}", + "releases_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/releases{/id}", + "deployments_url": "https://api.github.com/repos/yasserhussain1110/nand2tetris-projects/deployments", + "created_at": "2016-05-24T08:56:59Z", + "updated_at": "2016-05-25T11:43:41Z", + "pushed_at": "2016-06-09T08:31:50Z", + "git_url": "git://github.com/yasserhussain1110/nand2tetris-projects.git", + "ssh_url": "git@github.com:yasserhussain1110/nand2tetris-projects.git", + "clone_url": "https://github.com/yasserhussain1110/nand2tetris-projects.git", + "svn_url": "https://github.com/yasserhussain1110/nand2tetris-projects", + "homepage": "", + "size": 542, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 42507292, + "name": "nand2tetris", + "full_name": "lewisdawson15/nand2tetris", + "owner": { + "login": "lewisdawson15", + "id": 12371174, + "avatar_url": "https://avatars.githubusercontent.com/u/12371174?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lewisdawson15", + "html_url": "https://github.com/lewisdawson15", + "followers_url": "https://api.github.com/users/lewisdawson15/followers", + "following_url": "https://api.github.com/users/lewisdawson15/following{/other_user}", + "gists_url": "https://api.github.com/users/lewisdawson15/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lewisdawson15/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lewisdawson15/subscriptions", + "organizations_url": "https://api.github.com/users/lewisdawson15/orgs", + "repos_url": "https://api.github.com/users/lewisdawson15/repos", + "events_url": "https://api.github.com/users/lewisdawson15/events{/privacy}", + "received_events_url": "https://api.github.com/users/lewisdawson15/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lewisdawson15/nand2tetris", + "description": "Solutions for nand2tetris projects", + "fork": false, + "url": "https://api.github.com/repos/lewisdawson15/nand2tetris", + "forks_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lewisdawson15/nand2tetris/deployments", + "created_at": "2015-09-15T09:08:48Z", + "updated_at": "2016-02-07T16:10:27Z", + "pushed_at": "2016-06-17T15:41:36Z", + "git_url": "git://github.com/lewisdawson15/nand2tetris.git", + "ssh_url": "git@github.com:lewisdawson15/nand2tetris.git", + "clone_url": "https://github.com/lewisdawson15/nand2tetris.git", + "svn_url": "https://github.com/lewisdawson15/nand2tetris", + "homepage": "", + "size": 221, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 59543377, + "name": "Nand2Tetris", + "full_name": "lineophile/Nand2Tetris", + "owner": { + "login": "lineophile", + "id": 3014813, + "avatar_url": "https://avatars.githubusercontent.com/u/3014813?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lineophile", + "html_url": "https://github.com/lineophile", + "followers_url": "https://api.github.com/users/lineophile/followers", + "following_url": "https://api.github.com/users/lineophile/following{/other_user}", + "gists_url": "https://api.github.com/users/lineophile/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lineophile/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lineophile/subscriptions", + "organizations_url": "https://api.github.com/users/lineophile/orgs", + "repos_url": "https://api.github.com/users/lineophile/repos", + "events_url": "https://api.github.com/users/lineophile/events{/privacy}", + "received_events_url": "https://api.github.com/users/lineophile/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lineophile/Nand2Tetris", + "description": "The Elements of Computing Systems Coursera ", + "fork": false, + "url": "https://api.github.com/repos/lineophile/Nand2Tetris", + "forks_url": "https://api.github.com/repos/lineophile/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/lineophile/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lineophile/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lineophile/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/lineophile/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lineophile/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lineophile/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/lineophile/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lineophile/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lineophile/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/lineophile/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lineophile/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lineophile/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lineophile/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lineophile/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lineophile/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/lineophile/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lineophile/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lineophile/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lineophile/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/lineophile/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lineophile/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lineophile/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lineophile/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lineophile/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lineophile/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lineophile/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/lineophile/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lineophile/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/lineophile/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lineophile/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lineophile/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lineophile/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lineophile/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lineophile/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lineophile/Nand2Tetris/deployments", + "created_at": "2016-05-24T05:33:09Z", + "updated_at": "2016-05-24T05:48:50Z", + "pushed_at": "2016-06-20T01:01:36Z", + "git_url": "git://github.com/lineophile/Nand2Tetris.git", + "ssh_url": "git@github.com:lineophile/Nand2Tetris.git", + "clone_url": "https://github.com/lineophile/Nand2Tetris.git", + "svn_url": "https://github.com/lineophile/Nand2Tetris", + "homepage": null, + "size": 234, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 56090407, + "name": "NAND2Tetris", + "full_name": "barbieauglend/NAND2Tetris", + "owner": { + "login": "barbieauglend", + "id": 10602109, + "avatar_url": "https://avatars.githubusercontent.com/u/10602109?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/barbieauglend", + "html_url": "https://github.com/barbieauglend", + "followers_url": "https://api.github.com/users/barbieauglend/followers", + "following_url": "https://api.github.com/users/barbieauglend/following{/other_user}", + "gists_url": "https://api.github.com/users/barbieauglend/gists{/gist_id}", + "starred_url": "https://api.github.com/users/barbieauglend/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/barbieauglend/subscriptions", + "organizations_url": "https://api.github.com/users/barbieauglend/orgs", + "repos_url": "https://api.github.com/users/barbieauglend/repos", + "events_url": "https://api.github.com/users/barbieauglend/events{/privacy}", + "received_events_url": "https://api.github.com/users/barbieauglend/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/barbieauglend/NAND2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/barbieauglend/NAND2Tetris", + "forks_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/forks", + "keys_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/teams", + "hooks_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/events", + "assignees_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/tags", + "blobs_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/subscription", + "commits_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/merges", + "archive_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/downloads", + "issues_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/barbieauglend/NAND2Tetris/deployments", + "created_at": "2016-04-12T19:06:30Z", + "updated_at": "2016-05-25T17:51:19Z", + "pushed_at": "2016-06-17T20:45:20Z", + "git_url": "git://github.com/barbieauglend/NAND2Tetris.git", + "ssh_url": "git@github.com:barbieauglend/NAND2Tetris.git", + "clone_url": "https://github.com/barbieauglend/NAND2Tetris.git", + "svn_url": "https://github.com/barbieauglend/NAND2Tetris", + "homepage": null, + "size": 1259, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 61655875, + "name": "nand2tetris", + "full_name": "hongtron/nand2tetris", + "owner": { + "login": "hongtron", + "id": 9556797, + "avatar_url": "https://avatars.githubusercontent.com/u/9556797?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hongtron", + "html_url": "https://github.com/hongtron", + "followers_url": "https://api.github.com/users/hongtron/followers", + "following_url": "https://api.github.com/users/hongtron/following{/other_user}", + "gists_url": "https://api.github.com/users/hongtron/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hongtron/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hongtron/subscriptions", + "organizations_url": "https://api.github.com/users/hongtron/orgs", + "repos_url": "https://api.github.com/users/hongtron/repos", + "events_url": "https://api.github.com/users/hongtron/events{/privacy}", + "received_events_url": "https://api.github.com/users/hongtron/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hongtron/nand2tetris", + "description": "My implementation of the Nand2Tetris curriculum.", + "fork": false, + "url": "https://api.github.com/repos/hongtron/nand2tetris", + "forks_url": "https://api.github.com/repos/hongtron/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/hongtron/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hongtron/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hongtron/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/hongtron/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/hongtron/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/hongtron/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/hongtron/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/hongtron/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/hongtron/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/hongtron/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hongtron/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hongtron/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hongtron/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hongtron/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hongtron/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/hongtron/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/hongtron/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/hongtron/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/hongtron/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/hongtron/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hongtron/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hongtron/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hongtron/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hongtron/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/hongtron/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hongtron/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/hongtron/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hongtron/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/hongtron/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/hongtron/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hongtron/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hongtron/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hongtron/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/hongtron/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/hongtron/nand2tetris/deployments", + "created_at": "2016-06-21T18:08:10Z", + "updated_at": "2016-06-21T18:10:28Z", + "pushed_at": "2016-06-21T18:10:25Z", + "git_url": "git://github.com/hongtron/nand2tetris.git", + "ssh_url": "git@github.com:hongtron/nand2tetris.git", + "clone_url": "https://github.com/hongtron/nand2tetris.git", + "svn_url": "https://github.com/hongtron/nand2tetris", + "homepage": null, + "size": 235, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2283902 + }, + { + "id": 10361823, + "name": "nand2tetris", + "full_name": "sammbeller/nand2tetris", + "owner": { + "login": "sammbeller", + "id": 1796064, + "avatar_url": "https://avatars.githubusercontent.com/u/1796064?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sammbeller", + "html_url": "https://github.com/sammbeller", + "followers_url": "https://api.github.com/users/sammbeller/followers", + "following_url": "https://api.github.com/users/sammbeller/following{/other_user}", + "gists_url": "https://api.github.com/users/sammbeller/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sammbeller/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sammbeller/subscriptions", + "organizations_url": "https://api.github.com/users/sammbeller/orgs", + "repos_url": "https://api.github.com/users/sammbeller/repos", + "events_url": "https://api.github.com/users/sammbeller/events{/privacy}", + "received_events_url": "https://api.github.com/users/sammbeller/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sammbeller/nand2tetris", + "description": "Coursework for \"The Elements of Computing Systems\"", + "fork": false, + "url": "https://api.github.com/repos/sammbeller/nand2tetris", + "forks_url": "https://api.github.com/repos/sammbeller/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/sammbeller/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sammbeller/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sammbeller/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/sammbeller/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/sammbeller/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/sammbeller/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/sammbeller/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/sammbeller/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/sammbeller/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/sammbeller/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sammbeller/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sammbeller/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sammbeller/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sammbeller/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sammbeller/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/sammbeller/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/sammbeller/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/sammbeller/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/sammbeller/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/sammbeller/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sammbeller/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sammbeller/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sammbeller/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sammbeller/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/sammbeller/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sammbeller/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/sammbeller/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sammbeller/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/sammbeller/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/sammbeller/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sammbeller/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sammbeller/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sammbeller/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/sammbeller/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/sammbeller/nand2tetris/deployments", + "created_at": "2013-05-29T14:42:56Z", + "updated_at": "2013-10-24T07:43:56Z", + "pushed_at": "2013-05-30T13:27:54Z", + "git_url": "git://github.com/sammbeller/nand2tetris.git", + "ssh_url": "git@github.com:sammbeller/nand2tetris.git", + "clone_url": "https://github.com/sammbeller/nand2tetris.git", + "svn_url": "https://github.com/sammbeller/nand2tetris", + "homepage": null, + "size": 268, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 9231647, + "name": "nand2Tetris", + "full_name": "dworthen/nand2Tetris", + "owner": { + "login": "dworthen", + "id": 624870, + "avatar_url": "https://avatars.githubusercontent.com/u/624870?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dworthen", + "html_url": "https://github.com/dworthen", + "followers_url": "https://api.github.com/users/dworthen/followers", + "following_url": "https://api.github.com/users/dworthen/following{/other_user}", + "gists_url": "https://api.github.com/users/dworthen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dworthen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dworthen/subscriptions", + "organizations_url": "https://api.github.com/users/dworthen/orgs", + "repos_url": "https://api.github.com/users/dworthen/repos", + "events_url": "https://api.github.com/users/dworthen/events{/privacy}", + "received_events_url": "https://api.github.com/users/dworthen/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dworthen/nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dworthen/nand2Tetris", + "forks_url": "https://api.github.com/repos/dworthen/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/dworthen/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dworthen/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dworthen/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/dworthen/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dworthen/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dworthen/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/dworthen/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dworthen/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dworthen/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/dworthen/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dworthen/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dworthen/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dworthen/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dworthen/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dworthen/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/dworthen/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dworthen/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dworthen/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dworthen/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/dworthen/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dworthen/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dworthen/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dworthen/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dworthen/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dworthen/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dworthen/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/dworthen/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dworthen/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/dworthen/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dworthen/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dworthen/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dworthen/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dworthen/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dworthen/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dworthen/nand2Tetris/deployments", + "created_at": "2013-04-05T01:21:31Z", + "updated_at": "2013-09-30T05:30:59Z", + "pushed_at": "2013-04-07T04:18:28Z", + "git_url": "git://github.com/dworthen/nand2Tetris.git", + "ssh_url": "git@github.com:dworthen/nand2Tetris.git", + "clone_url": "https://github.com/dworthen/nand2Tetris.git", + "svn_url": "https://github.com/dworthen/nand2Tetris", + "homepage": null, + "size": 248, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 6196783, + "name": "nand2tetris", + "full_name": "jbaikge/nand2tetris", + "owner": { + "login": "jbaikge", + "id": 523216, + "avatar_url": "https://avatars.githubusercontent.com/u/523216?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jbaikge", + "html_url": "https://github.com/jbaikge", + "followers_url": "https://api.github.com/users/jbaikge/followers", + "following_url": "https://api.github.com/users/jbaikge/following{/other_user}", + "gists_url": "https://api.github.com/users/jbaikge/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jbaikge/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jbaikge/subscriptions", + "organizations_url": "https://api.github.com/users/jbaikge/orgs", + "repos_url": "https://api.github.com/users/jbaikge/repos", + "events_url": "https://api.github.com/users/jbaikge/events{/privacy}", + "received_events_url": "https://api.github.com/users/jbaikge/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jbaikge/nand2tetris", + "description": "nand2tetris course projects - http://nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/jbaikge/nand2tetris", + "forks_url": "https://api.github.com/repos/jbaikge/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jbaikge/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jbaikge/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jbaikge/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jbaikge/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jbaikge/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jbaikge/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jbaikge/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jbaikge/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jbaikge/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jbaikge/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jbaikge/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jbaikge/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jbaikge/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jbaikge/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jbaikge/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jbaikge/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jbaikge/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jbaikge/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jbaikge/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jbaikge/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jbaikge/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jbaikge/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jbaikge/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jbaikge/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jbaikge/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jbaikge/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jbaikge/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jbaikge/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jbaikge/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jbaikge/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jbaikge/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jbaikge/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jbaikge/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jbaikge/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jbaikge/nand2tetris/deployments", + "created_at": "2012-10-12T21:45:05Z", + "updated_at": "2013-11-03T01:17:23Z", + "pushed_at": "2012-10-13T00:32:01Z", + "git_url": "git://github.com/jbaikge/nand2tetris.git", + "ssh_url": "git@github.com:jbaikge/nand2tetris.git", + "clone_url": "https://github.com/jbaikge/nand2tetris.git", + "svn_url": "https://github.com/jbaikge/nand2tetris", + "homepage": null, + "size": 244, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 10962989, + "name": "nand2tetris", + "full_name": "mrampton/nand2tetris", + "owner": { + "login": "mrampton", + "id": 321405, + "avatar_url": "https://avatars.githubusercontent.com/u/321405?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mrampton", + "html_url": "https://github.com/mrampton", + "followers_url": "https://api.github.com/users/mrampton/followers", + "following_url": "https://api.github.com/users/mrampton/following{/other_user}", + "gists_url": "https://api.github.com/users/mrampton/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mrampton/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mrampton/subscriptions", + "organizations_url": "https://api.github.com/users/mrampton/orgs", + "repos_url": "https://api.github.com/users/mrampton/repos", + "events_url": "https://api.github.com/users/mrampton/events{/privacy}", + "received_events_url": "https://api.github.com/users/mrampton/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mrampton/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/mrampton/nand2tetris", + "forks_url": "https://api.github.com/repos/mrampton/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mrampton/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mrampton/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mrampton/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mrampton/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mrampton/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mrampton/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mrampton/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mrampton/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mrampton/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mrampton/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mrampton/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mrampton/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mrampton/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mrampton/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mrampton/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mrampton/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mrampton/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mrampton/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mrampton/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mrampton/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mrampton/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mrampton/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mrampton/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mrampton/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mrampton/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mrampton/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mrampton/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mrampton/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mrampton/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mrampton/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mrampton/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mrampton/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mrampton/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mrampton/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mrampton/nand2tetris/deployments", + "created_at": "2013-06-26T08:45:14Z", + "updated_at": "2015-05-22T13:50:58Z", + "pushed_at": "2015-05-22T13:50:51Z", + "git_url": "git://github.com/mrampton/nand2tetris.git", + "ssh_url": "git@github.com:mrampton/nand2tetris.git", + "clone_url": "https://github.com/mrampton/nand2tetris.git", + "svn_url": "https://github.com/mrampton/nand2tetris", + "homepage": null, + "size": 388, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 8900733, + "name": "nand2tetris", + "full_name": "vfarcy/nand2tetris", + "owner": { + "login": "vfarcy", + "id": 3275024, + "avatar_url": "https://avatars.githubusercontent.com/u/3275024?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vfarcy", + "html_url": "https://github.com/vfarcy", + "followers_url": "https://api.github.com/users/vfarcy/followers", + "following_url": "https://api.github.com/users/vfarcy/following{/other_user}", + "gists_url": "https://api.github.com/users/vfarcy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vfarcy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vfarcy/subscriptions", + "organizations_url": "https://api.github.com/users/vfarcy/orgs", + "repos_url": "https://api.github.com/users/vfarcy/repos", + "events_url": "https://api.github.com/users/vfarcy/events{/privacy}", + "received_events_url": "https://api.github.com/users/vfarcy/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/vfarcy/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/vfarcy/nand2tetris", + "forks_url": "https://api.github.com/repos/vfarcy/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/vfarcy/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vfarcy/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vfarcy/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/vfarcy/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/vfarcy/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/vfarcy/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/vfarcy/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/vfarcy/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/vfarcy/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/vfarcy/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vfarcy/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vfarcy/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vfarcy/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vfarcy/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vfarcy/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/vfarcy/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/vfarcy/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/vfarcy/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/vfarcy/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/vfarcy/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vfarcy/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vfarcy/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vfarcy/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vfarcy/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/vfarcy/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vfarcy/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/vfarcy/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vfarcy/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/vfarcy/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/vfarcy/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vfarcy/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vfarcy/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vfarcy/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/vfarcy/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/vfarcy/nand2tetris/deployments", + "created_at": "2013-03-20T09:38:06Z", + "updated_at": "2014-04-16T06:09:24Z", + "pushed_at": "2012-10-15T13:30:33Z", + "git_url": "git://github.com/vfarcy/nand2tetris.git", + "ssh_url": "git@github.com:vfarcy/nand2tetris.git", + "clone_url": "https://github.com/vfarcy/nand2tetris.git", + "svn_url": "https://github.com/vfarcy/nand2tetris", + "homepage": null, + "size": 76, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 12042090, + "name": "nand2tetris", + "full_name": "arreche/nand2tetris", + "owner": { + "login": "arreche", + "id": 459813, + "avatar_url": "https://avatars.githubusercontent.com/u/459813?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/arreche", + "html_url": "https://github.com/arreche", + "followers_url": "https://api.github.com/users/arreche/followers", + "following_url": "https://api.github.com/users/arreche/following{/other_user}", + "gists_url": "https://api.github.com/users/arreche/gists{/gist_id}", + "starred_url": "https://api.github.com/users/arreche/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/arreche/subscriptions", + "organizations_url": "https://api.github.com/users/arreche/orgs", + "repos_url": "https://api.github.com/users/arreche/repos", + "events_url": "https://api.github.com/users/arreche/events{/privacy}", + "received_events_url": "https://api.github.com/users/arreche/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/arreche/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/arreche/nand2tetris", + "forks_url": "https://api.github.com/repos/arreche/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/arreche/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/arreche/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/arreche/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/arreche/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/arreche/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/arreche/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/arreche/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/arreche/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/arreche/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/arreche/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/arreche/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/arreche/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/arreche/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/arreche/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/arreche/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/arreche/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/arreche/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/arreche/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/arreche/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/arreche/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/arreche/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/arreche/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/arreche/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/arreche/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/arreche/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/arreche/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/arreche/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/arreche/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/arreche/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/arreche/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/arreche/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/arreche/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/arreche/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/arreche/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/arreche/nand2tetris/deployments", + "created_at": "2013-08-11T20:29:04Z", + "updated_at": "2013-11-29T10:50:23Z", + "pushed_at": "2013-08-18T23:07:34Z", + "git_url": "git://github.com/arreche/nand2tetris.git", + "ssh_url": "git@github.com:arreche/nand2tetris.git", + "clone_url": "https://github.com/arreche/nand2tetris.git", + "svn_url": "https://github.com/arreche/nand2tetris", + "homepage": null, + "size": 624, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 16177655, + "name": "nand2tetris", + "full_name": "chadheim/nand2tetris", + "owner": { + "login": "chadheim", + "id": 1457438, + "avatar_url": "https://avatars.githubusercontent.com/u/1457438?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/chadheim", + "html_url": "https://github.com/chadheim", + "followers_url": "https://api.github.com/users/chadheim/followers", + "following_url": "https://api.github.com/users/chadheim/following{/other_user}", + "gists_url": "https://api.github.com/users/chadheim/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chadheim/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chadheim/subscriptions", + "organizations_url": "https://api.github.com/users/chadheim/orgs", + "repos_url": "https://api.github.com/users/chadheim/repos", + "events_url": "https://api.github.com/users/chadheim/events{/privacy}", + "received_events_url": "https://api.github.com/users/chadheim/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/chadheim/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/chadheim/nand2tetris", + "forks_url": "https://api.github.com/repos/chadheim/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/chadheim/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/chadheim/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/chadheim/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/chadheim/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/chadheim/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/chadheim/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/chadheim/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/chadheim/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/chadheim/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/chadheim/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/chadheim/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/chadheim/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/chadheim/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/chadheim/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/chadheim/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/chadheim/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/chadheim/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/chadheim/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/chadheim/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/chadheim/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/chadheim/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/chadheim/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/chadheim/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/chadheim/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/chadheim/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/chadheim/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/chadheim/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/chadheim/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/chadheim/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/chadheim/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/chadheim/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/chadheim/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/chadheim/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/chadheim/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/chadheim/nand2tetris/deployments", + "created_at": "2014-01-23T16:15:54Z", + "updated_at": "2014-01-23T21:17:02Z", + "pushed_at": "2014-01-23T21:17:00Z", + "git_url": "git://github.com/chadheim/nand2tetris.git", + "ssh_url": "git@github.com:chadheim/nand2tetris.git", + "clone_url": "https://github.com/chadheim/nand2tetris.git", + "svn_url": "https://github.com/chadheim/nand2tetris", + "homepage": null, + "size": 652, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 13280338, + "name": "nand2tetris", + "full_name": "mariapacana/nand2tetris", + "owner": { + "login": "mariapacana", + "id": 131715, + "avatar_url": "https://avatars.githubusercontent.com/u/131715?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mariapacana", + "html_url": "https://github.com/mariapacana", + "followers_url": "https://api.github.com/users/mariapacana/followers", + "following_url": "https://api.github.com/users/mariapacana/following{/other_user}", + "gists_url": "https://api.github.com/users/mariapacana/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mariapacana/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mariapacana/subscriptions", + "organizations_url": "https://api.github.com/users/mariapacana/orgs", + "repos_url": "https://api.github.com/users/mariapacana/repos", + "events_url": "https://api.github.com/users/mariapacana/events{/privacy}", + "received_events_url": "https://api.github.com/users/mariapacana/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mariapacana/nand2tetris", + "description": "Building a Computer from First Principles", + "fork": false, + "url": "https://api.github.com/repos/mariapacana/nand2tetris", + "forks_url": "https://api.github.com/repos/mariapacana/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/mariapacana/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mariapacana/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mariapacana/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/mariapacana/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/mariapacana/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/mariapacana/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/mariapacana/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/mariapacana/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/mariapacana/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/mariapacana/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mariapacana/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mariapacana/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mariapacana/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mariapacana/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mariapacana/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/mariapacana/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/mariapacana/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/mariapacana/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/mariapacana/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/mariapacana/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mariapacana/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mariapacana/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mariapacana/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mariapacana/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/mariapacana/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mariapacana/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/mariapacana/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mariapacana/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/mariapacana/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/mariapacana/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mariapacana/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mariapacana/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mariapacana/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/mariapacana/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/mariapacana/nand2tetris/deployments", + "created_at": "2013-10-02T19:14:32Z", + "updated_at": "2013-12-02T00:05:31Z", + "pushed_at": "2013-12-02T00:05:27Z", + "git_url": "git://github.com/mariapacana/nand2tetris.git", + "ssh_url": "git@github.com:mariapacana/nand2tetris.git", + "clone_url": "https://github.com/mariapacana/nand2tetris.git", + "svn_url": "https://github.com/mariapacana/nand2tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 232, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 13503888, + "name": "nand2tetris", + "full_name": "karantamhane/nand2tetris", + "owner": { + "login": "karantamhane", + "id": 3483301, + "avatar_url": "https://avatars.githubusercontent.com/u/3483301?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/karantamhane", + "html_url": "https://github.com/karantamhane", + "followers_url": "https://api.github.com/users/karantamhane/followers", + "following_url": "https://api.github.com/users/karantamhane/following{/other_user}", + "gists_url": "https://api.github.com/users/karantamhane/gists{/gist_id}", + "starred_url": "https://api.github.com/users/karantamhane/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/karantamhane/subscriptions", + "organizations_url": "https://api.github.com/users/karantamhane/orgs", + "repos_url": "https://api.github.com/users/karantamhane/repos", + "events_url": "https://api.github.com/users/karantamhane/events{/privacy}", + "received_events_url": "https://api.github.com/users/karantamhane/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/karantamhane/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/karantamhane/nand2tetris", + "forks_url": "https://api.github.com/repos/karantamhane/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/karantamhane/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/karantamhane/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/karantamhane/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/karantamhane/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/karantamhane/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/karantamhane/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/karantamhane/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/karantamhane/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/karantamhane/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/karantamhane/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/karantamhane/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/karantamhane/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/karantamhane/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/karantamhane/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/karantamhane/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/karantamhane/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/karantamhane/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/karantamhane/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/karantamhane/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/karantamhane/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/karantamhane/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/karantamhane/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/karantamhane/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/karantamhane/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/karantamhane/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/karantamhane/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/karantamhane/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/karantamhane/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/karantamhane/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/karantamhane/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/karantamhane/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/karantamhane/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/karantamhane/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/karantamhane/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/karantamhane/nand2tetris/deployments", + "created_at": "2013-10-11T16:31:20Z", + "updated_at": "2013-10-21T16:23:36Z", + "pushed_at": "2013-10-21T16:23:34Z", + "git_url": "git://github.com/karantamhane/nand2tetris.git", + "ssh_url": "git@github.com:karantamhane/nand2tetris.git", + "clone_url": "https://github.com/karantamhane/nand2tetris.git", + "svn_url": "https://github.com/karantamhane/nand2tetris", + "homepage": null, + "size": 128, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 15856157, + "name": "nand2tetris", + "full_name": "kmanzana/nand2tetris", + "owner": { + "login": "kmanzana", + "id": 2164013, + "avatar_url": "https://avatars.githubusercontent.com/u/2164013?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kmanzana", + "html_url": "https://github.com/kmanzana", + "followers_url": "https://api.github.com/users/kmanzana/followers", + "following_url": "https://api.github.com/users/kmanzana/following{/other_user}", + "gists_url": "https://api.github.com/users/kmanzana/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kmanzana/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kmanzana/subscriptions", + "organizations_url": "https://api.github.com/users/kmanzana/orgs", + "repos_url": "https://api.github.com/users/kmanzana/repos", + "events_url": "https://api.github.com/users/kmanzana/events{/privacy}", + "received_events_url": "https://api.github.com/users/kmanzana/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kmanzana/nand2tetris", + "description": "Elements of Computing Systems Project", + "fork": false, + "url": "https://api.github.com/repos/kmanzana/nand2tetris", + "forks_url": "https://api.github.com/repos/kmanzana/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kmanzana/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kmanzana/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kmanzana/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kmanzana/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kmanzana/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kmanzana/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kmanzana/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kmanzana/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kmanzana/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kmanzana/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kmanzana/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kmanzana/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kmanzana/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kmanzana/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kmanzana/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kmanzana/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kmanzana/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kmanzana/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kmanzana/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kmanzana/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kmanzana/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kmanzana/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kmanzana/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kmanzana/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kmanzana/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kmanzana/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kmanzana/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kmanzana/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kmanzana/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kmanzana/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kmanzana/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kmanzana/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kmanzana/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kmanzana/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kmanzana/nand2tetris/deployments", + "created_at": "2014-01-13T02:42:27Z", + "updated_at": "2014-05-01T22:05:54Z", + "pushed_at": "2014-05-01T22:05:54Z", + "git_url": "git://github.com/kmanzana/nand2tetris.git", + "ssh_url": "git@github.com:kmanzana/nand2tetris.git", + "clone_url": "https://github.com/kmanzana/nand2tetris.git", + "svn_url": "https://github.com/kmanzana/nand2tetris", + "homepage": "", + "size": 1952, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 2, + "mirror_url": null, + "open_issues_count": 0, + "forks": 2, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 6552419, + "name": "nand2tetris", + "full_name": "DavidYKay/nand2tetris", + "owner": { + "login": "DavidYKay", + "id": 171287, + "avatar_url": "https://avatars.githubusercontent.com/u/171287?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/DavidYKay", + "html_url": "https://github.com/DavidYKay", + "followers_url": "https://api.github.com/users/DavidYKay/followers", + "following_url": "https://api.github.com/users/DavidYKay/following{/other_user}", + "gists_url": "https://api.github.com/users/DavidYKay/gists{/gist_id}", + "starred_url": "https://api.github.com/users/DavidYKay/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/DavidYKay/subscriptions", + "organizations_url": "https://api.github.com/users/DavidYKay/orgs", + "repos_url": "https://api.github.com/users/DavidYKay/repos", + "events_url": "https://api.github.com/users/DavidYKay/events{/privacy}", + "received_events_url": "https://api.github.com/users/DavidYKay/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/DavidYKay/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/DavidYKay/nand2tetris", + "forks_url": "https://api.github.com/repos/DavidYKay/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/DavidYKay/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/DavidYKay/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/DavidYKay/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/DavidYKay/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/DavidYKay/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/DavidYKay/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/DavidYKay/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/DavidYKay/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/DavidYKay/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/DavidYKay/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/DavidYKay/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/DavidYKay/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/DavidYKay/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/DavidYKay/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/DavidYKay/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/DavidYKay/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/DavidYKay/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/DavidYKay/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/DavidYKay/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/DavidYKay/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/DavidYKay/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/DavidYKay/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/DavidYKay/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/DavidYKay/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/DavidYKay/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/DavidYKay/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/DavidYKay/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/DavidYKay/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/DavidYKay/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/DavidYKay/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/DavidYKay/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/DavidYKay/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/DavidYKay/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/DavidYKay/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/DavidYKay/nand2tetris/deployments", + "created_at": "2012-11-05T21:57:03Z", + "updated_at": "2015-04-08T14:31:42Z", + "pushed_at": "2015-04-08T14:31:40Z", + "git_url": "git://github.com/DavidYKay/nand2tetris.git", + "ssh_url": "git@github.com:DavidYKay/nand2tetris.git", + "clone_url": "https://github.com/DavidYKay/nand2tetris.git", + "svn_url": "https://github.com/DavidYKay/nand2tetris", + "homepage": null, + "size": 1796, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 6528236, + "name": "nand2tetris", + "full_name": "rsmorley/nand2tetris", + "owner": { + "login": "rsmorley", + "id": 1933059, + "avatar_url": "https://avatars.githubusercontent.com/u/1933059?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rsmorley", + "html_url": "https://github.com/rsmorley", + "followers_url": "https://api.github.com/users/rsmorley/followers", + "following_url": "https://api.github.com/users/rsmorley/following{/other_user}", + "gists_url": "https://api.github.com/users/rsmorley/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rsmorley/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rsmorley/subscriptions", + "organizations_url": "https://api.github.com/users/rsmorley/orgs", + "repos_url": "https://api.github.com/users/rsmorley/repos", + "events_url": "https://api.github.com/users/rsmorley/events{/privacy}", + "received_events_url": "https://api.github.com/users/rsmorley/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/rsmorley/nand2tetris", + "description": "Project files for nand2tetris course", + "fork": false, + "url": "https://api.github.com/repos/rsmorley/nand2tetris", + "forks_url": "https://api.github.com/repos/rsmorley/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/rsmorley/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/rsmorley/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/rsmorley/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/rsmorley/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/rsmorley/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/rsmorley/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/rsmorley/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/rsmorley/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/rsmorley/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/rsmorley/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/rsmorley/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/rsmorley/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/rsmorley/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/rsmorley/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/rsmorley/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/rsmorley/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/rsmorley/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/rsmorley/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/rsmorley/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/rsmorley/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/rsmorley/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/rsmorley/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/rsmorley/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/rsmorley/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/rsmorley/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/rsmorley/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/rsmorley/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/rsmorley/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/rsmorley/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/rsmorley/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/rsmorley/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/rsmorley/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/rsmorley/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/rsmorley/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/rsmorley/nand2tetris/deployments", + "created_at": "2012-11-04T06:39:22Z", + "updated_at": "2014-03-27T12:01:59Z", + "pushed_at": "2012-11-04T06:54:25Z", + "git_url": "git://github.com/rsmorley/nand2tetris.git", + "ssh_url": "git@github.com:rsmorley/nand2tetris.git", + "clone_url": "https://github.com/rsmorley/nand2tetris.git", + "svn_url": "https://github.com/rsmorley/nand2tetris", + "homepage": null, + "size": 252, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 30739282, + "name": "nand2tetris", + "full_name": "windyita/nand2tetris", + "owner": { + "login": "windyita", + "id": 10409767, + "avatar_url": "https://avatars.githubusercontent.com/u/10409767?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/windyita", + "html_url": "https://github.com/windyita", + "followers_url": "https://api.github.com/users/windyita/followers", + "following_url": "https://api.github.com/users/windyita/following{/other_user}", + "gists_url": "https://api.github.com/users/windyita/gists{/gist_id}", + "starred_url": "https://api.github.com/users/windyita/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/windyita/subscriptions", + "organizations_url": "https://api.github.com/users/windyita/orgs", + "repos_url": "https://api.github.com/users/windyita/repos", + "events_url": "https://api.github.com/users/windyita/events{/privacy}", + "received_events_url": "https://api.github.com/users/windyita/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/windyita/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/windyita/nand2tetris", + "forks_url": "https://api.github.com/repos/windyita/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/windyita/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/windyita/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/windyita/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/windyita/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/windyita/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/windyita/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/windyita/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/windyita/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/windyita/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/windyita/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/windyita/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/windyita/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/windyita/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/windyita/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/windyita/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/windyita/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/windyita/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/windyita/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/windyita/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/windyita/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/windyita/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/windyita/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/windyita/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/windyita/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/windyita/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/windyita/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/windyita/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/windyita/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/windyita/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/windyita/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/windyita/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/windyita/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/windyita/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/windyita/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/windyita/nand2tetris/deployments", + "created_at": "2015-02-13T03:51:02Z", + "updated_at": "2015-02-13T03:52:25Z", + "pushed_at": "2015-02-13T03:52:23Z", + "git_url": "git://github.com/windyita/nand2tetris.git", + "ssh_url": "git@github.com:windyita/nand2tetris.git", + "clone_url": "https://github.com/windyita/nand2tetris.git", + "svn_url": "https://github.com/windyita/nand2tetris", + "homepage": null, + "size": 320, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 30933378, + "name": "nand2tetris", + "full_name": "iistrate/nand2tetris", + "owner": { + "login": "iistrate", + "id": 4121039, + "avatar_url": "https://avatars.githubusercontent.com/u/4121039?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/iistrate", + "html_url": "https://github.com/iistrate", + "followers_url": "https://api.github.com/users/iistrate/followers", + "following_url": "https://api.github.com/users/iistrate/following{/other_user}", + "gists_url": "https://api.github.com/users/iistrate/gists{/gist_id}", + "starred_url": "https://api.github.com/users/iistrate/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/iistrate/subscriptions", + "organizations_url": "https://api.github.com/users/iistrate/orgs", + "repos_url": "https://api.github.com/users/iistrate/repos", + "events_url": "https://api.github.com/users/iistrate/events{/privacy}", + "received_events_url": "https://api.github.com/users/iistrate/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/iistrate/nand2tetris", + "description": "Building a Modern Computer from First Principles [in progress]", + "fork": false, + "url": "https://api.github.com/repos/iistrate/nand2tetris", + "forks_url": "https://api.github.com/repos/iistrate/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/iistrate/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/iistrate/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/iistrate/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/iistrate/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/iistrate/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/iistrate/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/iistrate/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/iistrate/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/iistrate/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/iistrate/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/iistrate/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/iistrate/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/iistrate/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/iistrate/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/iistrate/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/iistrate/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/iistrate/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/iistrate/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/iistrate/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/iistrate/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/iistrate/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/iistrate/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/iistrate/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/iistrate/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/iistrate/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/iistrate/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/iistrate/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/iistrate/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/iistrate/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/iistrate/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/iistrate/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/iistrate/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/iistrate/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/iistrate/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/iistrate/nand2tetris/deployments", + "created_at": "2015-02-17T19:26:09Z", + "updated_at": "2015-04-15T23:21:02Z", + "pushed_at": "2015-04-15T23:21:02Z", + "git_url": "git://github.com/iistrate/nand2tetris.git", + "ssh_url": "git@github.com:iistrate/nand2tetris.git", + "clone_url": "https://github.com/iistrate/nand2tetris.git", + "svn_url": "https://github.com/iistrate/nand2tetris", + "homepage": "", + "size": 744, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 26594228, + "name": "nand2tetris", + "full_name": "GLoganDR/nand2tetris", + "owner": { + "login": "GLoganDR", + "id": 8092923, + "avatar_url": "https://avatars.githubusercontent.com/u/8092923?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/GLoganDR", + "html_url": "https://github.com/GLoganDR", + "followers_url": "https://api.github.com/users/GLoganDR/followers", + "following_url": "https://api.github.com/users/GLoganDR/following{/other_user}", + "gists_url": "https://api.github.com/users/GLoganDR/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GLoganDR/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GLoganDR/subscriptions", + "organizations_url": "https://api.github.com/users/GLoganDR/orgs", + "repos_url": "https://api.github.com/users/GLoganDR/repos", + "events_url": "https://api.github.com/users/GLoganDR/events{/privacy}", + "received_events_url": "https://api.github.com/users/GLoganDR/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/GLoganDR/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/GLoganDR/nand2tetris", + "forks_url": "https://api.github.com/repos/GLoganDR/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/GLoganDR/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/GLoganDR/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/GLoganDR/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/GLoganDR/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/GLoganDR/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/GLoganDR/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/GLoganDR/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/GLoganDR/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/GLoganDR/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/GLoganDR/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/GLoganDR/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/GLoganDR/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/GLoganDR/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/GLoganDR/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/GLoganDR/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/GLoganDR/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/GLoganDR/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/GLoganDR/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/GLoganDR/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/GLoganDR/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/GLoganDR/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/GLoganDR/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/GLoganDR/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/GLoganDR/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/GLoganDR/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/GLoganDR/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/GLoganDR/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/GLoganDR/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/GLoganDR/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/GLoganDR/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/GLoganDR/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/GLoganDR/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/GLoganDR/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/GLoganDR/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/GLoganDR/nand2tetris/deployments", + "created_at": "2014-11-13T15:30:58Z", + "updated_at": "2014-11-13T15:32:04Z", + "pushed_at": "2014-11-13T15:32:04Z", + "git_url": "git://github.com/GLoganDR/nand2tetris.git", + "ssh_url": "git@github.com:GLoganDR/nand2tetris.git", + "clone_url": "https://github.com/GLoganDR/nand2tetris.git", + "svn_url": "https://github.com/GLoganDR/nand2tetris", + "homepage": null, + "size": 608, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 26066042, + "name": "nand2tetris", + "full_name": "bentrevor/nand2tetris", + "owner": { + "login": "bentrevor", + "id": 1909629, + "avatar_url": "https://avatars.githubusercontent.com/u/1909629?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bentrevor", + "html_url": "https://github.com/bentrevor", + "followers_url": "https://api.github.com/users/bentrevor/followers", + "following_url": "https://api.github.com/users/bentrevor/following{/other_user}", + "gists_url": "https://api.github.com/users/bentrevor/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bentrevor/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bentrevor/subscriptions", + "organizations_url": "https://api.github.com/users/bentrevor/orgs", + "repos_url": "https://api.github.com/users/bentrevor/repos", + "events_url": "https://api.github.com/users/bentrevor/events{/privacy}", + "received_events_url": "https://api.github.com/users/bentrevor/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bentrevor/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/bentrevor/nand2tetris", + "forks_url": "https://api.github.com/repos/bentrevor/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/bentrevor/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bentrevor/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bentrevor/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/bentrevor/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/bentrevor/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/bentrevor/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/bentrevor/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/bentrevor/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/bentrevor/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/bentrevor/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bentrevor/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bentrevor/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bentrevor/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bentrevor/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bentrevor/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/bentrevor/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/bentrevor/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/bentrevor/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/bentrevor/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/bentrevor/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bentrevor/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bentrevor/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bentrevor/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bentrevor/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/bentrevor/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bentrevor/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/bentrevor/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bentrevor/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/bentrevor/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/bentrevor/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bentrevor/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bentrevor/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bentrevor/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/bentrevor/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/bentrevor/nand2tetris/deployments", + "created_at": "2014-11-01T23:13:49Z", + "updated_at": "2014-11-01T23:14:12Z", + "pushed_at": "2014-11-12T04:31:34Z", + "git_url": "git://github.com/bentrevor/nand2tetris.git", + "ssh_url": "git@github.com:bentrevor/nand2tetris.git", + "clone_url": "https://github.com/bentrevor/nand2tetris.git", + "svn_url": "https://github.com/bentrevor/nand2tetris", + "homepage": null, + "size": 340, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 26146797, + "name": "nand2tetris", + "full_name": "Ryman/nand2tetris", + "owner": { + "login": "Ryman", + "id": 994978, + "avatar_url": "https://avatars.githubusercontent.com/u/994978?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Ryman", + "html_url": "https://github.com/Ryman", + "followers_url": "https://api.github.com/users/Ryman/followers", + "following_url": "https://api.github.com/users/Ryman/following{/other_user}", + "gists_url": "https://api.github.com/users/Ryman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Ryman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Ryman/subscriptions", + "organizations_url": "https://api.github.com/users/Ryman/orgs", + "repos_url": "https://api.github.com/users/Ryman/repos", + "events_url": "https://api.github.com/users/Ryman/events{/privacy}", + "received_events_url": "https://api.github.com/users/Ryman/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Ryman/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Ryman/nand2tetris", + "forks_url": "https://api.github.com/repos/Ryman/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Ryman/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Ryman/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Ryman/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Ryman/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Ryman/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Ryman/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Ryman/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Ryman/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Ryman/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Ryman/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Ryman/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Ryman/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Ryman/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Ryman/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Ryman/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Ryman/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Ryman/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Ryman/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Ryman/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Ryman/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Ryman/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Ryman/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Ryman/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Ryman/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Ryman/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Ryman/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Ryman/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Ryman/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Ryman/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Ryman/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Ryman/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Ryman/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Ryman/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Ryman/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Ryman/nand2tetris/deployments", + "created_at": "2014-11-04T01:15:32Z", + "updated_at": "2014-11-04T01:15:53Z", + "pushed_at": "2014-11-04T01:15:53Z", + "git_url": "git://github.com/Ryman/nand2tetris.git", + "ssh_url": "git@github.com:Ryman/nand2tetris.git", + "clone_url": "https://github.com/Ryman/nand2tetris.git", + "svn_url": "https://github.com/Ryman/nand2tetris", + "homepage": null, + "size": 268, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + }, + { + "id": 31803544, + "name": "nand2tetris", + "full_name": "safareli/nand2tetris", + "owner": { + "login": "safareli", + "id": 1932383, + "avatar_url": "https://avatars.githubusercontent.com/u/1932383?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/safareli", + "html_url": "https://github.com/safareli", + "followers_url": "https://api.github.com/users/safareli/followers", + "following_url": "https://api.github.com/users/safareli/following{/other_user}", + "gists_url": "https://api.github.com/users/safareli/gists{/gist_id}", + "starred_url": "https://api.github.com/users/safareli/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/safareli/subscriptions", + "organizations_url": "https://api.github.com/users/safareli/orgs", + "repos_url": "https://api.github.com/users/safareli/repos", + "events_url": "https://api.github.com/users/safareli/events{/privacy}", + "received_events_url": "https://api.github.com/users/safareli/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/safareli/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/safareli/nand2tetris", + "forks_url": "https://api.github.com/repos/safareli/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/safareli/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/safareli/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/safareli/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/safareli/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/safareli/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/safareli/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/safareli/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/safareli/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/safareli/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/safareli/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/safareli/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/safareli/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/safareli/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/safareli/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/safareli/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/safareli/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/safareli/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/safareli/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/safareli/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/safareli/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/safareli/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/safareli/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/safareli/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/safareli/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/safareli/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/safareli/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/safareli/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/safareli/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/safareli/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/safareli/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/safareli/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/safareli/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/safareli/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/safareli/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/safareli/nand2tetris/deployments", + "created_at": "2015-03-07T06:26:21Z", + "updated_at": "2015-03-13T11:00:35Z", + "pushed_at": "2015-03-13T11:00:34Z", + "git_url": "git://github.com/safareli/nand2tetris.git", + "ssh_url": "git@github.com:safareli/nand2tetris.git", + "clone_url": "https://github.com/safareli/nand2tetris.git", + "svn_url": "https://github.com/safareli/nand2tetris", + "homepage": null, + "size": 284, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.2128117 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:20 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "480945", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "26", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "link": "; rel=\"next\", ; rel=\"last\", ; rel=\"first\", ; rel=\"prev\"", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "318e55760cf7cdb40e61175a4d36cd32", + "x-github-request-id": "AE1408AB:F652:8339BB2:5769F4B7" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/repositories?q=tetris+language%3Aassembly&sort=stars&order=desc&type=all&per_page=100&page=5&q=tetris+language:assembly&sort=stars&order=desc&type=all&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 473, + "incomplete_results": false, + "items": [ + { + "id": 22033048, + "name": "nand2tetris", + "full_name": "johannesboyne/nand2tetris", + "owner": { + "login": "johannesboyne", + "id": 623576, + "avatar_url": "https://avatars.githubusercontent.com/u/623576?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/johannesboyne", + "html_url": "https://github.com/johannesboyne", + "followers_url": "https://api.github.com/users/johannesboyne/followers", + "following_url": "https://api.github.com/users/johannesboyne/following{/other_user}", + "gists_url": "https://api.github.com/users/johannesboyne/gists{/gist_id}", + "starred_url": "https://api.github.com/users/johannesboyne/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/johannesboyne/subscriptions", + "organizations_url": "https://api.github.com/users/johannesboyne/orgs", + "repos_url": "https://api.github.com/users/johannesboyne/repos", + "events_url": "https://api.github.com/users/johannesboyne/events{/privacy}", + "received_events_url": "https://api.github.com/users/johannesboyne/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/johannesboyne/nand2tetris", + "description": "Following along with the book The Elements of Computing Systems (aka NAND2Tetris)", + "fork": false, + "url": "https://api.github.com/repos/johannesboyne/nand2tetris", + "forks_url": "https://api.github.com/repos/johannesboyne/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/johannesboyne/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/johannesboyne/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/johannesboyne/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/johannesboyne/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/johannesboyne/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/johannesboyne/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/johannesboyne/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/johannesboyne/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/johannesboyne/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/johannesboyne/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/johannesboyne/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/johannesboyne/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/johannesboyne/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/johannesboyne/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/johannesboyne/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/johannesboyne/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/johannesboyne/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/johannesboyne/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/johannesboyne/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/johannesboyne/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/johannesboyne/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/johannesboyne/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/johannesboyne/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/johannesboyne/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/johannesboyne/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/johannesboyne/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/johannesboyne/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/johannesboyne/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/johannesboyne/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/johannesboyne/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/johannesboyne/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/johannesboyne/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/johannesboyne/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/johannesboyne/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/johannesboyne/nand2tetris/deployments", + "created_at": "2014-07-20T12:49:44Z", + "updated_at": "2014-09-02T12:22:03Z", + "pushed_at": "2013-06-12T23:28:42Z", + "git_url": "git://github.com/johannesboyne/nand2tetris.git", + "ssh_url": "git@github.com:johannesboyne/nand2tetris.git", + "clone_url": "https://github.com/johannesboyne/nand2tetris.git", + "svn_url": "https://github.com/johannesboyne/nand2tetris", + "homepage": null, + "size": 792, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 22325484, + "name": "nand2tetris", + "full_name": "sophiadavis/nand2tetris", + "owner": { + "login": "sophiadavis", + "id": 4664752, + "avatar_url": "https://avatars.githubusercontent.com/u/4664752?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sophiadavis", + "html_url": "https://github.com/sophiadavis", + "followers_url": "https://api.github.com/users/sophiadavis/followers", + "following_url": "https://api.github.com/users/sophiadavis/following{/other_user}", + "gists_url": "https://api.github.com/users/sophiadavis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sophiadavis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sophiadavis/subscriptions", + "organizations_url": "https://api.github.com/users/sophiadavis/orgs", + "repos_url": "https://api.github.com/users/sophiadavis/repos", + "events_url": "https://api.github.com/users/sophiadavis/events{/privacy}", + "received_events_url": "https://api.github.com/users/sophiadavis/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/sophiadavis/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/sophiadavis/nand2tetris", + "forks_url": "https://api.github.com/repos/sophiadavis/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/sophiadavis/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/sophiadavis/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/sophiadavis/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/sophiadavis/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/sophiadavis/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/sophiadavis/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/sophiadavis/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/sophiadavis/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/sophiadavis/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/sophiadavis/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/sophiadavis/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/sophiadavis/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/sophiadavis/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/sophiadavis/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/sophiadavis/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/sophiadavis/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/sophiadavis/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/sophiadavis/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/sophiadavis/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/sophiadavis/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/sophiadavis/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/sophiadavis/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/sophiadavis/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/sophiadavis/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/sophiadavis/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/sophiadavis/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/sophiadavis/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/sophiadavis/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/sophiadavis/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/sophiadavis/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/sophiadavis/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/sophiadavis/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/sophiadavis/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/sophiadavis/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/sophiadavis/nand2tetris/deployments", + "created_at": "2014-07-27T23:39:12Z", + "updated_at": "2014-09-06T23:58:25Z", + "pushed_at": "2014-09-14T02:04:54Z", + "git_url": "git://github.com/sophiadavis/nand2tetris.git", + "ssh_url": "git@github.com:sophiadavis/nand2tetris.git", + "clone_url": "https://github.com/sophiadavis/nand2tetris.git", + "svn_url": "https://github.com/sophiadavis/nand2tetris", + "homepage": null, + "size": 428, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 22178383, + "name": "nand2tetris", + "full_name": "Sl0vi/nand2tetris", + "owner": { + "login": "Sl0vi", + "id": 2778582, + "avatar_url": "https://avatars.githubusercontent.com/u/2778582?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Sl0vi", + "html_url": "https://github.com/Sl0vi", + "followers_url": "https://api.github.com/users/Sl0vi/followers", + "following_url": "https://api.github.com/users/Sl0vi/following{/other_user}", + "gists_url": "https://api.github.com/users/Sl0vi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Sl0vi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Sl0vi/subscriptions", + "organizations_url": "https://api.github.com/users/Sl0vi/orgs", + "repos_url": "https://api.github.com/users/Sl0vi/repos", + "events_url": "https://api.github.com/users/Sl0vi/events{/privacy}", + "received_events_url": "https://api.github.com/users/Sl0vi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Sl0vi/nand2tetris", + "description": "Working my way through http://www.nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/Sl0vi/nand2tetris", + "forks_url": "https://api.github.com/repos/Sl0vi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Sl0vi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Sl0vi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Sl0vi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Sl0vi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Sl0vi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Sl0vi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Sl0vi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Sl0vi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Sl0vi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Sl0vi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Sl0vi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Sl0vi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Sl0vi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Sl0vi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Sl0vi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Sl0vi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Sl0vi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Sl0vi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Sl0vi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Sl0vi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Sl0vi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Sl0vi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Sl0vi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Sl0vi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Sl0vi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Sl0vi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Sl0vi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Sl0vi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Sl0vi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Sl0vi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Sl0vi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Sl0vi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Sl0vi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Sl0vi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Sl0vi/nand2tetris/deployments", + "created_at": "2014-07-23T21:16:32Z", + "updated_at": "2014-07-24T13:10:09Z", + "pushed_at": "2014-08-31T14:51:06Z", + "git_url": "git://github.com/Sl0vi/nand2tetris.git", + "ssh_url": "git@github.com:Sl0vi/nand2tetris.git", + "clone_url": "https://github.com/Sl0vi/nand2tetris.git", + "svn_url": "https://github.com/Sl0vi/nand2tetris", + "homepage": null, + "size": 680, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 23454237, + "name": "nand2tetris", + "full_name": "charmeleon/nand2tetris", + "owner": { + "login": "charmeleon", + "id": 2086355, + "avatar_url": "https://avatars.githubusercontent.com/u/2086355?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/charmeleon", + "html_url": "https://github.com/charmeleon", + "followers_url": "https://api.github.com/users/charmeleon/followers", + "following_url": "https://api.github.com/users/charmeleon/following{/other_user}", + "gists_url": "https://api.github.com/users/charmeleon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/charmeleon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/charmeleon/subscriptions", + "organizations_url": "https://api.github.com/users/charmeleon/orgs", + "repos_url": "https://api.github.com/users/charmeleon/repos", + "events_url": "https://api.github.com/users/charmeleon/events{/privacy}", + "received_events_url": "https://api.github.com/users/charmeleon/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/charmeleon/nand2tetris", + "description": "Mini-projects for nand2tetris course", + "fork": false, + "url": "https://api.github.com/repos/charmeleon/nand2tetris", + "forks_url": "https://api.github.com/repos/charmeleon/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/charmeleon/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/charmeleon/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/charmeleon/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/charmeleon/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/charmeleon/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/charmeleon/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/charmeleon/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/charmeleon/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/charmeleon/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/charmeleon/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/charmeleon/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/charmeleon/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/charmeleon/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/charmeleon/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/charmeleon/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/charmeleon/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/charmeleon/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/charmeleon/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/charmeleon/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/charmeleon/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/charmeleon/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/charmeleon/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/charmeleon/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/charmeleon/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/charmeleon/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/charmeleon/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/charmeleon/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/charmeleon/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/charmeleon/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/charmeleon/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/charmeleon/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/charmeleon/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/charmeleon/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/charmeleon/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/charmeleon/nand2tetris/deployments", + "created_at": "2014-08-29T06:00:41Z", + "updated_at": "2014-09-02T16:04:36Z", + "pushed_at": "2014-10-04T02:47:14Z", + "git_url": "git://github.com/charmeleon/nand2tetris.git", + "ssh_url": "git@github.com:charmeleon/nand2tetris.git", + "clone_url": "https://github.com/charmeleon/nand2tetris.git", + "svn_url": "https://github.com/charmeleon/nand2tetris", + "homepage": null, + "size": 460, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 24538442, + "name": "nand2tetris", + "full_name": "Andrew-Max/nand2tetris", + "owner": { + "login": "Andrew-Max", + "id": 4232743, + "avatar_url": "https://avatars.githubusercontent.com/u/4232743?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Andrew-Max", + "html_url": "https://github.com/Andrew-Max", + "followers_url": "https://api.github.com/users/Andrew-Max/followers", + "following_url": "https://api.github.com/users/Andrew-Max/following{/other_user}", + "gists_url": "https://api.github.com/users/Andrew-Max/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Andrew-Max/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Andrew-Max/subscriptions", + "organizations_url": "https://api.github.com/users/Andrew-Max/orgs", + "repos_url": "https://api.github.com/users/Andrew-Max/repos", + "events_url": "https://api.github.com/users/Andrew-Max/events{/privacy}", + "received_events_url": "https://api.github.com/users/Andrew-Max/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Andrew-Max/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Andrew-Max/nand2tetris", + "forks_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Andrew-Max/nand2tetris/deployments", + "created_at": "2014-09-27T17:44:52Z", + "updated_at": "2014-09-27T17:51:59Z", + "pushed_at": "2014-11-06T00:54:33Z", + "git_url": "git://github.com/Andrew-Max/nand2tetris.git", + "ssh_url": "git@github.com:Andrew-Max/nand2tetris.git", + "clone_url": "https://github.com/Andrew-Max/nand2tetris.git", + "svn_url": "https://github.com/Andrew-Max/nand2tetris", + "homepage": null, + "size": 692, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 23922822, + "name": "nand2tetris", + "full_name": "vishparshav/nand2tetris", + "owner": { + "login": "vishparshav", + "id": 8737217, + "avatar_url": "https://avatars.githubusercontent.com/u/8737217?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vishparshav", + "html_url": "https://github.com/vishparshav", + "followers_url": "https://api.github.com/users/vishparshav/followers", + "following_url": "https://api.github.com/users/vishparshav/following{/other_user}", + "gists_url": "https://api.github.com/users/vishparshav/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vishparshav/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vishparshav/subscriptions", + "organizations_url": "https://api.github.com/users/vishparshav/orgs", + "repos_url": "https://api.github.com/users/vishparshav/repos", + "events_url": "https://api.github.com/users/vishparshav/events{/privacy}", + "received_events_url": "https://api.github.com/users/vishparshav/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/vishparshav/nand2tetris", + "description": "Repo for nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/vishparshav/nand2tetris", + "forks_url": "https://api.github.com/repos/vishparshav/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/vishparshav/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vishparshav/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vishparshav/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/vishparshav/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/vishparshav/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/vishparshav/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/vishparshav/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/vishparshav/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/vishparshav/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/vishparshav/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vishparshav/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vishparshav/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vishparshav/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vishparshav/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vishparshav/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/vishparshav/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/vishparshav/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/vishparshav/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/vishparshav/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/vishparshav/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vishparshav/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vishparshav/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vishparshav/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vishparshav/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/vishparshav/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vishparshav/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/vishparshav/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vishparshav/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/vishparshav/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/vishparshav/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vishparshav/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vishparshav/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vishparshav/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/vishparshav/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/vishparshav/nand2tetris/deployments", + "created_at": "2014-09-11T14:57:32Z", + "updated_at": "2014-09-11T14:59:36Z", + "pushed_at": "2014-09-11T14:59:35Z", + "git_url": "git://github.com/vishparshav/nand2tetris.git", + "ssh_url": "git@github.com:vishparshav/nand2tetris.git", + "clone_url": "https://github.com/vishparshav/nand2tetris.git", + "svn_url": "https://github.com/vishparshav/nand2tetris", + "homepage": null, + "size": 276, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 24090621, + "name": "nand2tetris", + "full_name": "epai/nand2tetris", + "owner": { + "login": "epai", + "id": 8680381, + "avatar_url": "https://avatars.githubusercontent.com/u/8680381?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/epai", + "html_url": "https://github.com/epai", + "followers_url": "https://api.github.com/users/epai/followers", + "following_url": "https://api.github.com/users/epai/following{/other_user}", + "gists_url": "https://api.github.com/users/epai/gists{/gist_id}", + "starred_url": "https://api.github.com/users/epai/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/epai/subscriptions", + "organizations_url": "https://api.github.com/users/epai/orgs", + "repos_url": "https://api.github.com/users/epai/repos", + "events_url": "https://api.github.com/users/epai/events{/privacy}", + "received_events_url": "https://api.github.com/users/epai/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/epai/nand2tetris", + "description": "Project description here: http://www.nand2tetris.org", + "fork": false, + "url": "https://api.github.com/repos/epai/nand2tetris", + "forks_url": "https://api.github.com/repos/epai/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/epai/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/epai/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/epai/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/epai/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/epai/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/epai/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/epai/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/epai/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/epai/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/epai/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/epai/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/epai/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/epai/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/epai/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/epai/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/epai/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/epai/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/epai/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/epai/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/epai/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/epai/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/epai/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/epai/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/epai/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/epai/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/epai/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/epai/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/epai/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/epai/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/epai/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/epai/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/epai/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/epai/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/epai/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/epai/nand2tetris/deployments", + "created_at": "2014-09-16T07:57:47Z", + "updated_at": "2014-09-16T08:00:26Z", + "pushed_at": "2014-09-16T08:00:25Z", + "git_url": "git://github.com/epai/nand2tetris.git", + "ssh_url": "git@github.com:epai/nand2tetris.git", + "clone_url": "https://github.com/epai/nand2tetris.git", + "svn_url": "https://github.com/epai/nand2tetris", + "homepage": null, + "size": 724, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 18865976, + "name": "nand2tetris", + "full_name": "dandorman/nand2tetris", + "owner": { + "login": "dandorman", + "id": 2452, + "avatar_url": "https://avatars.githubusercontent.com/u/2452?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dandorman", + "html_url": "https://github.com/dandorman", + "followers_url": "https://api.github.com/users/dandorman/followers", + "following_url": "https://api.github.com/users/dandorman/following{/other_user}", + "gists_url": "https://api.github.com/users/dandorman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dandorman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dandorman/subscriptions", + "organizations_url": "https://api.github.com/users/dandorman/orgs", + "repos_url": "https://api.github.com/users/dandorman/repos", + "events_url": "https://api.github.com/users/dandorman/events{/privacy}", + "received_events_url": "https://api.github.com/users/dandorman/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dandorman/nand2tetris", + "description": "Solutions to the problems in Nand2Tetris.", + "fork": false, + "url": "https://api.github.com/repos/dandorman/nand2tetris", + "forks_url": "https://api.github.com/repos/dandorman/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dandorman/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dandorman/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dandorman/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dandorman/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dandorman/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dandorman/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dandorman/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dandorman/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dandorman/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dandorman/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dandorman/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dandorman/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dandorman/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dandorman/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dandorman/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dandorman/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dandorman/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dandorman/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dandorman/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dandorman/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dandorman/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dandorman/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dandorman/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dandorman/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dandorman/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dandorman/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dandorman/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dandorman/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dandorman/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dandorman/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dandorman/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dandorman/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dandorman/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dandorman/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dandorman/nand2tetris/deployments", + "created_at": "2014-04-17T03:59:09Z", + "updated_at": "2014-05-15T04:07:49Z", + "pushed_at": "2014-05-15T04:07:48Z", + "git_url": "git://github.com/dandorman/nand2tetris.git", + "ssh_url": "git@github.com:dandorman/nand2tetris.git", + "clone_url": "https://github.com/dandorman/nand2tetris.git", + "svn_url": "https://github.com/dandorman/nand2tetris", + "homepage": null, + "size": 348, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 17948919, + "name": "nand2tetris", + "full_name": "omfgroflbbq/nand2tetris", + "owner": { + "login": "omfgroflbbq", + "id": 5622198, + "avatar_url": "https://avatars.githubusercontent.com/u/5622198?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/omfgroflbbq", + "html_url": "https://github.com/omfgroflbbq", + "followers_url": "https://api.github.com/users/omfgroflbbq/followers", + "following_url": "https://api.github.com/users/omfgroflbbq/following{/other_user}", + "gists_url": "https://api.github.com/users/omfgroflbbq/gists{/gist_id}", + "starred_url": "https://api.github.com/users/omfgroflbbq/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/omfgroflbbq/subscriptions", + "organizations_url": "https://api.github.com/users/omfgroflbbq/orgs", + "repos_url": "https://api.github.com/users/omfgroflbbq/repos", + "events_url": "https://api.github.com/users/omfgroflbbq/events{/privacy}", + "received_events_url": "https://api.github.com/users/omfgroflbbq/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/omfgroflbbq/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/omfgroflbbq/nand2tetris", + "forks_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/omfgroflbbq/nand2tetris/deployments", + "created_at": "2014-03-20T16:02:20Z", + "updated_at": "2014-03-20T16:03:48Z", + "pushed_at": "2014-03-20T16:03:49Z", + "git_url": "git://github.com/omfgroflbbq/nand2tetris.git", + "ssh_url": "git@github.com:omfgroflbbq/nand2tetris.git", + "clone_url": "https://github.com/omfgroflbbq/nand2tetris.git", + "svn_url": "https://github.com/omfgroflbbq/nand2tetris", + "homepage": null, + "size": 260, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 18185313, + "name": "nand2tetris", + "full_name": "Mr-Ultimate/nand2tetris", + "owner": { + "login": "Mr-Ultimate", + "id": 6710237, + "avatar_url": "https://avatars.githubusercontent.com/u/6710237?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Mr-Ultimate", + "html_url": "https://github.com/Mr-Ultimate", + "followers_url": "https://api.github.com/users/Mr-Ultimate/followers", + "following_url": "https://api.github.com/users/Mr-Ultimate/following{/other_user}", + "gists_url": "https://api.github.com/users/Mr-Ultimate/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mr-Ultimate/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mr-Ultimate/subscriptions", + "organizations_url": "https://api.github.com/users/Mr-Ultimate/orgs", + "repos_url": "https://api.github.com/users/Mr-Ultimate/repos", + "events_url": "https://api.github.com/users/Mr-Ultimate/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mr-Ultimate/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Mr-Ultimate/nand2tetris", + "description": "My work related to building a computer from first principles: http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris", + "forks_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Mr-Ultimate/nand2tetris/deployments", + "created_at": "2014-03-27T17:45:14Z", + "updated_at": "2015-05-17T02:29:44Z", + "pushed_at": "2014-01-31T16:14:48Z", + "git_url": "git://github.com/Mr-Ultimate/nand2tetris.git", + "ssh_url": "git@github.com:Mr-Ultimate/nand2tetris.git", + "clone_url": "https://github.com/Mr-Ultimate/nand2tetris.git", + "svn_url": "https://github.com/Mr-Ultimate/nand2tetris", + "homepage": null, + "size": 856, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": false, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "develop", + "score": 3.212811 + }, + { + "id": 20781622, + "name": "nand2tetris", + "full_name": "elicriffield/nand2tetris", + "owner": { + "login": "elicriffield", + "id": 3229810, + "avatar_url": "https://avatars.githubusercontent.com/u/3229810?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/elicriffield", + "html_url": "https://github.com/elicriffield", + "followers_url": "https://api.github.com/users/elicriffield/followers", + "following_url": "https://api.github.com/users/elicriffield/following{/other_user}", + "gists_url": "https://api.github.com/users/elicriffield/gists{/gist_id}", + "starred_url": "https://api.github.com/users/elicriffield/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/elicriffield/subscriptions", + "organizations_url": "https://api.github.com/users/elicriffield/orgs", + "repos_url": "https://api.github.com/users/elicriffield/repos", + "events_url": "https://api.github.com/users/elicriffield/events{/privacy}", + "received_events_url": "https://api.github.com/users/elicriffield/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/elicriffield/nand2tetris", + "description": "Homework from The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/elicriffield/nand2tetris", + "forks_url": "https://api.github.com/repos/elicriffield/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/elicriffield/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/elicriffield/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/elicriffield/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/elicriffield/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/elicriffield/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/elicriffield/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/elicriffield/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/elicriffield/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/elicriffield/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/elicriffield/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/elicriffield/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/elicriffield/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/elicriffield/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/elicriffield/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/elicriffield/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/elicriffield/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/elicriffield/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/elicriffield/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/elicriffield/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/elicriffield/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/elicriffield/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/elicriffield/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/elicriffield/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/elicriffield/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/elicriffield/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/elicriffield/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/elicriffield/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/elicriffield/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/elicriffield/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/elicriffield/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/elicriffield/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/elicriffield/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/elicriffield/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/elicriffield/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/elicriffield/nand2tetris/deployments", + "created_at": "2014-06-12T20:19:15Z", + "updated_at": "2014-06-16T06:16:25Z", + "pushed_at": "2014-06-12T20:19:54Z", + "git_url": "git://github.com/elicriffield/nand2tetris.git", + "ssh_url": "git@github.com:elicriffield/nand2tetris.git", + "clone_url": "https://github.com/elicriffield/nand2tetris.git", + "svn_url": "https://github.com/elicriffield/nand2tetris", + "homepage": null, + "size": 268, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 20911564, + "name": "Nand2tetris", + "full_name": "ak2909/Nand2tetris", + "owner": { + "login": "ak2909", + "id": 6450398, + "avatar_url": "https://avatars.githubusercontent.com/u/6450398?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ak2909", + "html_url": "https://github.com/ak2909", + "followers_url": "https://api.github.com/users/ak2909/followers", + "following_url": "https://api.github.com/users/ak2909/following{/other_user}", + "gists_url": "https://api.github.com/users/ak2909/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ak2909/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ak2909/subscriptions", + "organizations_url": "https://api.github.com/users/ak2909/orgs", + "repos_url": "https://api.github.com/users/ak2909/repos", + "events_url": "https://api.github.com/users/ak2909/events{/privacy}", + "received_events_url": "https://api.github.com/users/ak2909/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ak2909/Nand2tetris", + "description": "Nand2tetris project", + "fork": false, + "url": "https://api.github.com/repos/ak2909/Nand2tetris", + "forks_url": "https://api.github.com/repos/ak2909/Nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ak2909/Nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ak2909/Nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ak2909/Nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ak2909/Nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ak2909/Nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ak2909/Nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ak2909/Nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ak2909/Nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ak2909/Nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ak2909/Nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ak2909/Nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ak2909/Nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ak2909/Nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ak2909/Nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ak2909/Nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ak2909/Nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ak2909/Nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ak2909/Nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ak2909/Nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ak2909/Nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ak2909/Nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ak2909/Nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ak2909/Nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ak2909/Nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ak2909/Nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ak2909/Nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ak2909/Nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ak2909/Nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ak2909/Nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ak2909/Nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ak2909/Nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ak2909/Nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ak2909/Nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ak2909/Nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ak2909/Nand2tetris/deployments", + "created_at": "2014-06-17T05:37:07Z", + "updated_at": "2014-06-17T05:47:09Z", + "pushed_at": "2014-06-17T05:47:04Z", + "git_url": "git://github.com/ak2909/Nand2tetris.git", + "ssh_url": "git@github.com:ak2909/Nand2tetris.git", + "clone_url": "https://github.com/ak2909/Nand2tetris.git", + "svn_url": "https://github.com/ak2909/Nand2tetris", + "homepage": null, + "size": 360, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 26082835, + "name": "nand2tetris", + "full_name": "floehopper/nand2tetris", + "owner": { + "login": "floehopper", + "id": 3169, + "avatar_url": "https://avatars.githubusercontent.com/u/3169?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/floehopper", + "html_url": "https://github.com/floehopper", + "followers_url": "https://api.github.com/users/floehopper/followers", + "following_url": "https://api.github.com/users/floehopper/following{/other_user}", + "gists_url": "https://api.github.com/users/floehopper/gists{/gist_id}", + "starred_url": "https://api.github.com/users/floehopper/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/floehopper/subscriptions", + "organizations_url": "https://api.github.com/users/floehopper/orgs", + "repos_url": "https://api.github.com/users/floehopper/repos", + "events_url": "https://api.github.com/users/floehopper/events{/privacy}", + "received_events_url": "https://api.github.com/users/floehopper/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/floehopper/nand2tetris", + "description": "Projects from The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/floehopper/nand2tetris", + "forks_url": "https://api.github.com/repos/floehopper/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/floehopper/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/floehopper/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/floehopper/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/floehopper/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/floehopper/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/floehopper/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/floehopper/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/floehopper/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/floehopper/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/floehopper/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/floehopper/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/floehopper/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/floehopper/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/floehopper/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/floehopper/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/floehopper/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/floehopper/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/floehopper/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/floehopper/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/floehopper/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/floehopper/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/floehopper/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/floehopper/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/floehopper/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/floehopper/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/floehopper/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/floehopper/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/floehopper/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/floehopper/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/floehopper/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/floehopper/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/floehopper/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/floehopper/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/floehopper/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/floehopper/nand2tetris/deployments", + "created_at": "2014-11-02T14:35:00Z", + "updated_at": "2014-12-22T01:29:42Z", + "pushed_at": "2014-12-22T01:29:42Z", + "git_url": "git://github.com/floehopper/nand2tetris.git", + "ssh_url": "git@github.com:floehopper/nand2tetris.git", + "clone_url": "https://github.com/floehopper/nand2tetris.git", + "svn_url": "https://github.com/floehopper/nand2tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 356, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 31913829, + "name": "nand2tetris", + "full_name": "oschreib/nand2tetris", + "owner": { + "login": "oschreib", + "id": 7105897, + "avatar_url": "https://avatars.githubusercontent.com/u/7105897?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/oschreib", + "html_url": "https://github.com/oschreib", + "followers_url": "https://api.github.com/users/oschreib/followers", + "following_url": "https://api.github.com/users/oschreib/following{/other_user}", + "gists_url": "https://api.github.com/users/oschreib/gists{/gist_id}", + "starred_url": "https://api.github.com/users/oschreib/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/oschreib/subscriptions", + "organizations_url": "https://api.github.com/users/oschreib/orgs", + "repos_url": "https://api.github.com/users/oschreib/repos", + "events_url": "https://api.github.com/users/oschreib/events{/privacy}", + "received_events_url": "https://api.github.com/users/oschreib/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/oschreib/nand2tetris", + "description": "Nand2Tetris course", + "fork": false, + "url": "https://api.github.com/repos/oschreib/nand2tetris", + "forks_url": "https://api.github.com/repos/oschreib/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/oschreib/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/oschreib/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/oschreib/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/oschreib/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/oschreib/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/oschreib/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/oschreib/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/oschreib/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/oschreib/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/oschreib/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/oschreib/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/oschreib/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/oschreib/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/oschreib/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/oschreib/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/oschreib/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/oschreib/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/oschreib/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/oschreib/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/oschreib/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/oschreib/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/oschreib/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/oschreib/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/oschreib/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/oschreib/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/oschreib/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/oschreib/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/oschreib/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/oschreib/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/oschreib/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/oschreib/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/oschreib/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/oschreib/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/oschreib/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/oschreib/nand2tetris/deployments", + "created_at": "2015-03-09T17:55:52Z", + "updated_at": "2015-05-06T20:42:57Z", + "pushed_at": "2015-06-09T06:59:39Z", + "git_url": "git://github.com/oschreib/nand2tetris.git", + "ssh_url": "git@github.com:oschreib/nand2tetris.git", + "clone_url": "https://github.com/oschreib/nand2tetris.git", + "svn_url": "https://github.com/oschreib/nand2tetris", + "homepage": null, + "size": 1452, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 38599312, + "name": "nand2tetris", + "full_name": "MattTriano/nand2tetris", + "owner": { + "login": "MattTriano", + "id": 3400383, + "avatar_url": "https://avatars.githubusercontent.com/u/3400383?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MattTriano", + "html_url": "https://github.com/MattTriano", + "followers_url": "https://api.github.com/users/MattTriano/followers", + "following_url": "https://api.github.com/users/MattTriano/following{/other_user}", + "gists_url": "https://api.github.com/users/MattTriano/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MattTriano/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MattTriano/subscriptions", + "organizations_url": "https://api.github.com/users/MattTriano/orgs", + "repos_url": "https://api.github.com/users/MattTriano/repos", + "events_url": "https://api.github.com/users/MattTriano/events{/privacy}", + "received_events_url": "https://api.github.com/users/MattTriano/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/MattTriano/nand2tetris", + "description": "Work for the elements of computing book and the coursera course Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/MattTriano/nand2tetris", + "forks_url": "https://api.github.com/repos/MattTriano/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/MattTriano/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MattTriano/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MattTriano/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/MattTriano/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/MattTriano/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/MattTriano/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/MattTriano/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/MattTriano/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/MattTriano/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/MattTriano/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MattTriano/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MattTriano/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MattTriano/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MattTriano/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MattTriano/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/MattTriano/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/MattTriano/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/MattTriano/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/MattTriano/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/MattTriano/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MattTriano/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MattTriano/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MattTriano/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MattTriano/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/MattTriano/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MattTriano/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/MattTriano/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MattTriano/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/MattTriano/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/MattTriano/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MattTriano/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MattTriano/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MattTriano/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/MattTriano/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/MattTriano/nand2tetris/deployments", + "created_at": "2015-07-06T05:31:56Z", + "updated_at": "2015-07-06T05:43:13Z", + "pushed_at": "2015-07-17T13:42:06Z", + "git_url": "git://github.com/MattTriano/nand2tetris.git", + "ssh_url": "git@github.com:MattTriano/nand2tetris.git", + "clone_url": "https://github.com/MattTriano/nand2tetris.git", + "svn_url": "https://github.com/MattTriano/nand2tetris", + "homepage": null, + "size": 640, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 39269940, + "name": "nand2tetris-projects", + "full_name": "bauto17/nand2tetris-projects", + "owner": { + "login": "bauto17", + "id": 8044785, + "avatar_url": "https://avatars.githubusercontent.com/u/8044785?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bauto17", + "html_url": "https://github.com/bauto17", + "followers_url": "https://api.github.com/users/bauto17/followers", + "following_url": "https://api.github.com/users/bauto17/following{/other_user}", + "gists_url": "https://api.github.com/users/bauto17/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bauto17/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bauto17/subscriptions", + "organizations_url": "https://api.github.com/users/bauto17/orgs", + "repos_url": "https://api.github.com/users/bauto17/repos", + "events_url": "https://api.github.com/users/bauto17/events{/privacy}", + "received_events_url": "https://api.github.com/users/bauto17/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/bauto17/nand2tetris-projects", + "description": "curso de nand2teris", + "fork": false, + "url": "https://api.github.com/repos/bauto17/nand2tetris-projects", + "forks_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/forks", + "keys_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/teams", + "hooks_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/hooks", + "issue_events_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/issues/events{/number}", + "events_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/events", + "assignees_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/assignees{/user}", + "branches_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/branches{/branch}", + "tags_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/tags", + "blobs_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/languages", + "stargazers_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/stargazers", + "contributors_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/contributors", + "subscribers_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/subscribers", + "subscription_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/subscription", + "commits_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/contents/{+path}", + "compare_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/merges", + "archive_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/downloads", + "issues_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/issues{/number}", + "pulls_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/labels{/name}", + "releases_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/releases{/id}", + "deployments_url": "https://api.github.com/repos/bauto17/nand2tetris-projects/deployments", + "created_at": "2015-07-17T18:44:20Z", + "updated_at": "2015-07-17T18:44:35Z", + "pushed_at": "2015-07-21T09:40:06Z", + "git_url": "git://github.com/bauto17/nand2tetris-projects.git", + "ssh_url": "git@github.com:bauto17/nand2tetris-projects.git", + "clone_url": "https://github.com/bauto17/nand2tetris-projects.git", + "svn_url": "https://github.com/bauto17/nand2tetris-projects", + "homepage": null, + "size": 288, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 32873641, + "name": "nand2tetris", + "full_name": "oliverstaccato/nand2tetris", + "owner": { + "login": "oliverstaccato", + "id": 11650228, + "avatar_url": "https://avatars.githubusercontent.com/u/11650228?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/oliverstaccato", + "html_url": "https://github.com/oliverstaccato", + "followers_url": "https://api.github.com/users/oliverstaccato/followers", + "following_url": "https://api.github.com/users/oliverstaccato/following{/other_user}", + "gists_url": "https://api.github.com/users/oliverstaccato/gists{/gist_id}", + "starred_url": "https://api.github.com/users/oliverstaccato/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/oliverstaccato/subscriptions", + "organizations_url": "https://api.github.com/users/oliverstaccato/orgs", + "repos_url": "https://api.github.com/users/oliverstaccato/repos", + "events_url": "https://api.github.com/users/oliverstaccato/events{/privacy}", + "received_events_url": "https://api.github.com/users/oliverstaccato/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/oliverstaccato/nand2tetris", + "description": "Automatically exported from code.google.com/p/nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/oliverstaccato/nand2tetris", + "forks_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/oliverstaccato/nand2tetris/deployments", + "created_at": "2015-03-25T15:33:10Z", + "updated_at": "2015-03-25T15:34:23Z", + "pushed_at": "2015-03-25T15:36:18Z", + "git_url": "git://github.com/oliverstaccato/nand2tetris.git", + "ssh_url": "git@github.com:oliverstaccato/nand2tetris.git", + "clone_url": "https://github.com/oliverstaccato/nand2tetris.git", + "svn_url": "https://github.com/oliverstaccato/nand2tetris", + "homepage": null, + "size": 148, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": false, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 40811835, + "name": "nand2tetris", + "full_name": "encse/nand2tetris", + "owner": { + "login": "encse", + "id": 6275775, + "avatar_url": "https://avatars.githubusercontent.com/u/6275775?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/encse", + "html_url": "https://github.com/encse", + "followers_url": "https://api.github.com/users/encse/followers", + "following_url": "https://api.github.com/users/encse/following{/other_user}", + "gists_url": "https://api.github.com/users/encse/gists{/gist_id}", + "starred_url": "https://api.github.com/users/encse/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/encse/subscriptions", + "organizations_url": "https://api.github.com/users/encse/orgs", + "repos_url": "https://api.github.com/users/encse/repos", + "events_url": "https://api.github.com/users/encse/events{/privacy}", + "received_events_url": "https://api.github.com/users/encse/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/encse/nand2tetris", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/encse/nand2tetris", + "forks_url": "https://api.github.com/repos/encse/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/encse/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/encse/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/encse/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/encse/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/encse/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/encse/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/encse/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/encse/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/encse/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/encse/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/encse/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/encse/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/encse/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/encse/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/encse/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/encse/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/encse/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/encse/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/encse/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/encse/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/encse/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/encse/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/encse/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/encse/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/encse/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/encse/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/encse/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/encse/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/encse/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/encse/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/encse/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/encse/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/encse/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/encse/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/encse/nand2tetris/deployments", + "created_at": "2015-08-16T10:59:46Z", + "updated_at": "2015-08-16T10:59:51Z", + "pushed_at": "2015-08-16T10:59:49Z", + "git_url": "git://github.com/encse/nand2tetris.git", + "ssh_url": "git@github.com:encse/nand2tetris.git", + "clone_url": "https://github.com/encse/nand2tetris.git", + "svn_url": "https://github.com/encse/nand2tetris", + "homepage": null, + "size": 1068, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 38190340, + "name": "nand2tetris", + "full_name": "wanganjun/nand2tetris", + "owner": { + "login": "wanganjun", + "id": 7713237, + "avatar_url": "https://avatars.githubusercontent.com/u/7713237?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wanganjun", + "html_url": "https://github.com/wanganjun", + "followers_url": "https://api.github.com/users/wanganjun/followers", + "following_url": "https://api.github.com/users/wanganjun/following{/other_user}", + "gists_url": "https://api.github.com/users/wanganjun/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wanganjun/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wanganjun/subscriptions", + "organizations_url": "https://api.github.com/users/wanganjun/orgs", + "repos_url": "https://api.github.com/users/wanganjun/repos", + "events_url": "https://api.github.com/users/wanganjun/events{/privacy}", + "received_events_url": "https://api.github.com/users/wanganjun/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wanganjun/nand2tetris", + "description": "The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/wanganjun/nand2tetris", + "forks_url": "https://api.github.com/repos/wanganjun/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/wanganjun/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wanganjun/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wanganjun/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/wanganjun/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/wanganjun/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/wanganjun/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/wanganjun/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/wanganjun/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/wanganjun/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/wanganjun/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wanganjun/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wanganjun/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wanganjun/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wanganjun/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wanganjun/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/wanganjun/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/wanganjun/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/wanganjun/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/wanganjun/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/wanganjun/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wanganjun/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wanganjun/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wanganjun/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wanganjun/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/wanganjun/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wanganjun/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/wanganjun/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wanganjun/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/wanganjun/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/wanganjun/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wanganjun/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wanganjun/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wanganjun/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/wanganjun/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/wanganjun/nand2tetris/deployments", + "created_at": "2015-06-28T07:24:35Z", + "updated_at": "2015-06-28T08:09:28Z", + "pushed_at": "2015-07-14T14:39:05Z", + "git_url": "git://github.com/wanganjun/nand2tetris.git", + "ssh_url": "git@github.com:wanganjun/nand2tetris.git", + "clone_url": "https://github.com/wanganjun/nand2tetris.git", + "svn_url": "https://github.com/wanganjun/nand2tetris", + "homepage": null, + "size": 2508, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 33705143, + "name": "nand2tetris", + "full_name": "Lanzafame/nand2tetris", + "owner": { + "login": "Lanzafame", + "id": 5924712, + "avatar_url": "https://avatars.githubusercontent.com/u/5924712?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Lanzafame", + "html_url": "https://github.com/Lanzafame", + "followers_url": "https://api.github.com/users/Lanzafame/followers", + "following_url": "https://api.github.com/users/Lanzafame/following{/other_user}", + "gists_url": "https://api.github.com/users/Lanzafame/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Lanzafame/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Lanzafame/subscriptions", + "organizations_url": "https://api.github.com/users/Lanzafame/orgs", + "repos_url": "https://api.github.com/users/Lanzafame/repos", + "events_url": "https://api.github.com/users/Lanzafame/events{/privacy}", + "received_events_url": "https://api.github.com/users/Lanzafame/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Lanzafame/nand2tetris", + "description": "My attempt at the [Nand2Tetris](http://www.nand2tetris.org/) Course.", + "fork": false, + "url": "https://api.github.com/repos/Lanzafame/nand2tetris", + "forks_url": "https://api.github.com/repos/Lanzafame/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Lanzafame/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Lanzafame/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Lanzafame/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Lanzafame/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Lanzafame/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Lanzafame/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Lanzafame/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Lanzafame/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Lanzafame/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Lanzafame/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Lanzafame/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Lanzafame/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Lanzafame/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Lanzafame/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Lanzafame/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Lanzafame/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Lanzafame/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Lanzafame/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Lanzafame/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Lanzafame/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Lanzafame/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Lanzafame/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Lanzafame/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Lanzafame/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Lanzafame/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Lanzafame/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Lanzafame/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Lanzafame/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Lanzafame/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Lanzafame/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Lanzafame/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Lanzafame/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Lanzafame/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Lanzafame/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Lanzafame/nand2tetris/deployments", + "created_at": "2015-04-10T02:57:34Z", + "updated_at": "2015-04-13T13:46:03Z", + "pushed_at": "2015-04-13T13:46:03Z", + "git_url": "git://github.com/Lanzafame/nand2tetris.git", + "ssh_url": "git@github.com:Lanzafame/nand2tetris.git", + "clone_url": "https://github.com/Lanzafame/nand2tetris.git", + "svn_url": "https://github.com/Lanzafame/nand2tetris", + "homepage": null, + "size": 280, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 35322027, + "name": "nand2tetris", + "full_name": "IanDominey/nand2tetris", + "owner": { + "login": "IanDominey", + "id": 4990954, + "avatar_url": "https://avatars.githubusercontent.com/u/4990954?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/IanDominey", + "html_url": "https://github.com/IanDominey", + "followers_url": "https://api.github.com/users/IanDominey/followers", + "following_url": "https://api.github.com/users/IanDominey/following{/other_user}", + "gists_url": "https://api.github.com/users/IanDominey/gists{/gist_id}", + "starred_url": "https://api.github.com/users/IanDominey/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/IanDominey/subscriptions", + "organizations_url": "https://api.github.com/users/IanDominey/orgs", + "repos_url": "https://api.github.com/users/IanDominey/repos", + "events_url": "https://api.github.com/users/IanDominey/events{/privacy}", + "received_events_url": "https://api.github.com/users/IanDominey/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/IanDominey/nand2tetris", + "description": "Exercises from the Fundamentals of Computer Science", + "fork": false, + "url": "https://api.github.com/repos/IanDominey/nand2tetris", + "forks_url": "https://api.github.com/repos/IanDominey/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/IanDominey/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/IanDominey/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/IanDominey/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/IanDominey/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/IanDominey/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/IanDominey/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/IanDominey/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/IanDominey/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/IanDominey/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/IanDominey/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/IanDominey/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/IanDominey/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/IanDominey/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/IanDominey/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/IanDominey/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/IanDominey/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/IanDominey/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/IanDominey/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/IanDominey/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/IanDominey/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/IanDominey/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/IanDominey/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/IanDominey/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/IanDominey/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/IanDominey/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/IanDominey/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/IanDominey/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/IanDominey/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/IanDominey/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/IanDominey/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/IanDominey/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/IanDominey/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/IanDominey/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/IanDominey/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/IanDominey/nand2tetris/deployments", + "created_at": "2015-05-09T08:57:27Z", + "updated_at": "2015-05-09T09:17:03Z", + "pushed_at": "2015-05-16T09:22:38Z", + "git_url": "git://github.com/IanDominey/nand2tetris.git", + "ssh_url": "git@github.com:IanDominey/nand2tetris.git", + "clone_url": "https://github.com/IanDominey/nand2tetris.git", + "svn_url": "https://github.com/IanDominey/nand2tetris", + "homepage": null, + "size": 276, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 37713865, + "name": "nand2tetris", + "full_name": "draoullig/nand2tetris", + "owner": { + "login": "draoullig", + "id": 4171814, + "avatar_url": "https://avatars.githubusercontent.com/u/4171814?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/draoullig", + "html_url": "https://github.com/draoullig", + "followers_url": "https://api.github.com/users/draoullig/followers", + "following_url": "https://api.github.com/users/draoullig/following{/other_user}", + "gists_url": "https://api.github.com/users/draoullig/gists{/gist_id}", + "starred_url": "https://api.github.com/users/draoullig/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/draoullig/subscriptions", + "organizations_url": "https://api.github.com/users/draoullig/orgs", + "repos_url": "https://api.github.com/users/draoullig/repos", + "events_url": "https://api.github.com/users/draoullig/events{/privacy}", + "received_events_url": "https://api.github.com/users/draoullig/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/draoullig/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/draoullig/nand2tetris", + "forks_url": "https://api.github.com/repos/draoullig/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/draoullig/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/draoullig/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/draoullig/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/draoullig/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/draoullig/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/draoullig/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/draoullig/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/draoullig/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/draoullig/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/draoullig/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/draoullig/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/draoullig/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/draoullig/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/draoullig/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/draoullig/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/draoullig/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/draoullig/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/draoullig/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/draoullig/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/draoullig/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/draoullig/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/draoullig/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/draoullig/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/draoullig/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/draoullig/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/draoullig/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/draoullig/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/draoullig/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/draoullig/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/draoullig/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/draoullig/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/draoullig/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/draoullig/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/draoullig/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/draoullig/nand2tetris/deployments", + "created_at": "2015-06-19T09:36:51Z", + "updated_at": "2015-06-19T09:41:28Z", + "pushed_at": "2015-06-19T09:41:16Z", + "git_url": "git://github.com/draoullig/nand2tetris.git", + "ssh_url": "git@github.com:draoullig/nand2tetris.git", + "clone_url": "https://github.com/draoullig/nand2tetris.git", + "svn_url": "https://github.com/draoullig/nand2tetris", + "homepage": null, + "size": 672, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 37503747, + "name": "Nand2Tetris", + "full_name": "Past9/Nand2Tetris", + "owner": { + "login": "Past9", + "id": 7954699, + "avatar_url": "https://avatars.githubusercontent.com/u/7954699?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Past9", + "html_url": "https://github.com/Past9", + "followers_url": "https://api.github.com/users/Past9/followers", + "following_url": "https://api.github.com/users/Past9/following{/other_user}", + "gists_url": "https://api.github.com/users/Past9/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Past9/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Past9/subscriptions", + "organizations_url": "https://api.github.com/users/Past9/orgs", + "repos_url": "https://api.github.com/users/Past9/repos", + "events_url": "https://api.github.com/users/Past9/events{/privacy}", + "received_events_url": "https://api.github.com/users/Past9/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Past9/Nand2Tetris", + "description": "Coursework for Nand2Tetris course from http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/Past9/Nand2Tetris", + "forks_url": "https://api.github.com/repos/Past9/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/Past9/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Past9/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Past9/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/Past9/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Past9/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Past9/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/Past9/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Past9/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Past9/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/Past9/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Past9/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Past9/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Past9/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Past9/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Past9/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/Past9/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Past9/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Past9/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Past9/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/Past9/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Past9/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Past9/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Past9/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Past9/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Past9/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Past9/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/Past9/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Past9/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/Past9/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Past9/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Past9/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Past9/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Past9/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Past9/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Past9/Nand2Tetris/deployments", + "created_at": "2015-06-16T02:40:37Z", + "updated_at": "2015-06-16T02:41:36Z", + "pushed_at": "2015-06-17T01:55:22Z", + "git_url": "git://github.com/Past9/Nand2Tetris.git", + "ssh_url": "git@github.com:Past9/Nand2Tetris.git", + "clone_url": "https://github.com/Past9/Nand2Tetris.git", + "svn_url": "https://github.com/Past9/Nand2Tetris", + "homepage": null, + "size": 288, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 34896460, + "name": "nand2tetris", + "full_name": "jimmyok/nand2tetris", + "owner": { + "login": "jimmyok", + "id": 2794358, + "avatar_url": "https://avatars.githubusercontent.com/u/2794358?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jimmyok", + "html_url": "https://github.com/jimmyok", + "followers_url": "https://api.github.com/users/jimmyok/followers", + "following_url": "https://api.github.com/users/jimmyok/following{/other_user}", + "gists_url": "https://api.github.com/users/jimmyok/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jimmyok/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jimmyok/subscriptions", + "organizations_url": "https://api.github.com/users/jimmyok/orgs", + "repos_url": "https://api.github.com/users/jimmyok/repos", + "events_url": "https://api.github.com/users/jimmyok/events{/privacy}", + "received_events_url": "https://api.github.com/users/jimmyok/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jimmyok/nand2tetris", + "description": "Nand2tetris course work", + "fork": false, + "url": "https://api.github.com/repos/jimmyok/nand2tetris", + "forks_url": "https://api.github.com/repos/jimmyok/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/jimmyok/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jimmyok/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jimmyok/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/jimmyok/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/jimmyok/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/jimmyok/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/jimmyok/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/jimmyok/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/jimmyok/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/jimmyok/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jimmyok/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jimmyok/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jimmyok/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jimmyok/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jimmyok/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/jimmyok/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/jimmyok/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/jimmyok/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/jimmyok/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/jimmyok/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jimmyok/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jimmyok/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jimmyok/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jimmyok/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/jimmyok/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jimmyok/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/jimmyok/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jimmyok/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/jimmyok/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/jimmyok/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jimmyok/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jimmyok/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jimmyok/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/jimmyok/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/jimmyok/nand2tetris/deployments", + "created_at": "2015-05-01T09:21:43Z", + "updated_at": "2015-05-06T09:40:06Z", + "pushed_at": "2015-05-06T09:40:05Z", + "git_url": "git://github.com/jimmyok/nand2tetris.git", + "ssh_url": "git@github.com:jimmyok/nand2tetris.git", + "clone_url": "https://github.com/jimmyok/nand2tetris.git", + "svn_url": "https://github.com/jimmyok/nand2tetris", + "homepage": null, + "size": 276, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 35704717, + "name": "nand2tetris", + "full_name": "WalterCM/nand2tetris", + "owner": { + "login": "WalterCM", + "id": 8432202, + "avatar_url": "https://avatars.githubusercontent.com/u/8432202?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/WalterCM", + "html_url": "https://github.com/WalterCM", + "followers_url": "https://api.github.com/users/WalterCM/followers", + "following_url": "https://api.github.com/users/WalterCM/following{/other_user}", + "gists_url": "https://api.github.com/users/WalterCM/gists{/gist_id}", + "starred_url": "https://api.github.com/users/WalterCM/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/WalterCM/subscriptions", + "organizations_url": "https://api.github.com/users/WalterCM/orgs", + "repos_url": "https://api.github.com/users/WalterCM/repos", + "events_url": "https://api.github.com/users/WalterCM/events{/privacy}", + "received_events_url": "https://api.github.com/users/WalterCM/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/WalterCM/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/WalterCM/nand2tetris", + "forks_url": "https://api.github.com/repos/WalterCM/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/WalterCM/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/WalterCM/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/WalterCM/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/WalterCM/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/WalterCM/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/WalterCM/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/WalterCM/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/WalterCM/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/WalterCM/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/WalterCM/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/WalterCM/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/WalterCM/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/WalterCM/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/WalterCM/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/WalterCM/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/WalterCM/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/WalterCM/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/WalterCM/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/WalterCM/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/WalterCM/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/WalterCM/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/WalterCM/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/WalterCM/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/WalterCM/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/WalterCM/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/WalterCM/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/WalterCM/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/WalterCM/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/WalterCM/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/WalterCM/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/WalterCM/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/WalterCM/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/WalterCM/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/WalterCM/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/WalterCM/nand2tetris/deployments", + "created_at": "2015-05-16T01:25:49Z", + "updated_at": "2015-05-16T01:28:29Z", + "pushed_at": "2015-05-16T01:28:21Z", + "git_url": "git://github.com/WalterCM/nand2tetris.git", + "ssh_url": "git@github.com:WalterCM/nand2tetris.git", + "clone_url": "https://github.com/WalterCM/nand2tetris.git", + "svn_url": "https://github.com/WalterCM/nand2tetris", + "homepage": null, + "size": 264, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 36232446, + "name": "nand2tetris", + "full_name": "BATTZION/nand2tetris", + "owner": { + "login": "BATTZION", + "id": 7559361, + "avatar_url": "https://avatars.githubusercontent.com/u/7559361?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/BATTZION", + "html_url": "https://github.com/BATTZION", + "followers_url": "https://api.github.com/users/BATTZION/followers", + "following_url": "https://api.github.com/users/BATTZION/following{/other_user}", + "gists_url": "https://api.github.com/users/BATTZION/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BATTZION/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BATTZION/subscriptions", + "organizations_url": "https://api.github.com/users/BATTZION/orgs", + "repos_url": "https://api.github.com/users/BATTZION/repos", + "events_url": "https://api.github.com/users/BATTZION/events{/privacy}", + "received_events_url": "https://api.github.com/users/BATTZION/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/BATTZION/nand2tetris", + "description": "nand2tetris project (software)", + "fork": false, + "url": "https://api.github.com/repos/BATTZION/nand2tetris", + "forks_url": "https://api.github.com/repos/BATTZION/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/BATTZION/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/BATTZION/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/BATTZION/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/BATTZION/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/BATTZION/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/BATTZION/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/BATTZION/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/BATTZION/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/BATTZION/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/BATTZION/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/BATTZION/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/BATTZION/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/BATTZION/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/BATTZION/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/BATTZION/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/BATTZION/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/BATTZION/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/BATTZION/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/BATTZION/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/BATTZION/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/BATTZION/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/BATTZION/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/BATTZION/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/BATTZION/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/BATTZION/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/BATTZION/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/BATTZION/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/BATTZION/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/BATTZION/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/BATTZION/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/BATTZION/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/BATTZION/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/BATTZION/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/BATTZION/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/BATTZION/nand2tetris/deployments", + "created_at": "2015-05-25T13:20:15Z", + "updated_at": "2015-07-13T09:58:27Z", + "pushed_at": "2015-07-09T05:09:02Z", + "git_url": "git://github.com/BATTZION/nand2tetris.git", + "ssh_url": "git@github.com:BATTZION/nand2tetris.git", + "clone_url": "https://github.com/BATTZION/nand2tetris.git", + "svn_url": "https://github.com/BATTZION/nand2tetris", + "homepage": null, + "size": 332, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 34109586, + "name": "nand2tetris-1", + "full_name": "natashad/nand2tetris-1", + "owner": { + "login": "natashad", + "id": 1857154, + "avatar_url": "https://avatars.githubusercontent.com/u/1857154?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/natashad", + "html_url": "https://github.com/natashad", + "followers_url": "https://api.github.com/users/natashad/followers", + "following_url": "https://api.github.com/users/natashad/following{/other_user}", + "gists_url": "https://api.github.com/users/natashad/gists{/gist_id}", + "starred_url": "https://api.github.com/users/natashad/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/natashad/subscriptions", + "organizations_url": "https://api.github.com/users/natashad/orgs", + "repos_url": "https://api.github.com/users/natashad/repos", + "events_url": "https://api.github.com/users/natashad/events{/privacy}", + "received_events_url": "https://api.github.com/users/natashad/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/natashad/nand2tetris-1", + "description": "Projects for the nand2tetris course. This involves building a computer from the ground up starting from Boolean algebra and elementary logic gates to building a Central Processing Unit, a memory system, and a hardware platform, leading up to a general-purpose computer. For Reference: http://www.nand2tetris.org/", + "fork": false, + "url": "https://api.github.com/repos/natashad/nand2tetris-1", + "forks_url": "https://api.github.com/repos/natashad/nand2tetris-1/forks", + "keys_url": "https://api.github.com/repos/natashad/nand2tetris-1/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/natashad/nand2tetris-1/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/natashad/nand2tetris-1/teams", + "hooks_url": "https://api.github.com/repos/natashad/nand2tetris-1/hooks", + "issue_events_url": "https://api.github.com/repos/natashad/nand2tetris-1/issues/events{/number}", + "events_url": "https://api.github.com/repos/natashad/nand2tetris-1/events", + "assignees_url": "https://api.github.com/repos/natashad/nand2tetris-1/assignees{/user}", + "branches_url": "https://api.github.com/repos/natashad/nand2tetris-1/branches{/branch}", + "tags_url": "https://api.github.com/repos/natashad/nand2tetris-1/tags", + "blobs_url": "https://api.github.com/repos/natashad/nand2tetris-1/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/natashad/nand2tetris-1/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/natashad/nand2tetris-1/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/natashad/nand2tetris-1/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/natashad/nand2tetris-1/statuses/{sha}", + "languages_url": "https://api.github.com/repos/natashad/nand2tetris-1/languages", + "stargazers_url": "https://api.github.com/repos/natashad/nand2tetris-1/stargazers", + "contributors_url": "https://api.github.com/repos/natashad/nand2tetris-1/contributors", + "subscribers_url": "https://api.github.com/repos/natashad/nand2tetris-1/subscribers", + "subscription_url": "https://api.github.com/repos/natashad/nand2tetris-1/subscription", + "commits_url": "https://api.github.com/repos/natashad/nand2tetris-1/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/natashad/nand2tetris-1/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/natashad/nand2tetris-1/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/natashad/nand2tetris-1/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/natashad/nand2tetris-1/contents/{+path}", + "compare_url": "https://api.github.com/repos/natashad/nand2tetris-1/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/natashad/nand2tetris-1/merges", + "archive_url": "https://api.github.com/repos/natashad/nand2tetris-1/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/natashad/nand2tetris-1/downloads", + "issues_url": "https://api.github.com/repos/natashad/nand2tetris-1/issues{/number}", + "pulls_url": "https://api.github.com/repos/natashad/nand2tetris-1/pulls{/number}", + "milestones_url": "https://api.github.com/repos/natashad/nand2tetris-1/milestones{/number}", + "notifications_url": "https://api.github.com/repos/natashad/nand2tetris-1/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/natashad/nand2tetris-1/labels{/name}", + "releases_url": "https://api.github.com/repos/natashad/nand2tetris-1/releases{/id}", + "deployments_url": "https://api.github.com/repos/natashad/nand2tetris-1/deployments", + "created_at": "2015-04-17T09:59:08Z", + "updated_at": "2015-05-06T05:03:19Z", + "pushed_at": "2015-07-06T10:46:51Z", + "git_url": "git://github.com/natashad/nand2tetris-1.git", + "ssh_url": "git@github.com:natashad/nand2tetris-1.git", + "clone_url": "https://github.com/natashad/nand2tetris-1.git", + "svn_url": "https://github.com/natashad/nand2tetris-1", + "homepage": null, + "size": 2672, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 34587081, + "name": "nand2tetris", + "full_name": "hculpan/nand2tetris", + "owner": { + "login": "hculpan", + "id": 1928798, + "avatar_url": "https://avatars.githubusercontent.com/u/1928798?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hculpan", + "html_url": "https://github.com/hculpan", + "followers_url": "https://api.github.com/users/hculpan/followers", + "following_url": "https://api.github.com/users/hculpan/following{/other_user}", + "gists_url": "https://api.github.com/users/hculpan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hculpan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hculpan/subscriptions", + "organizations_url": "https://api.github.com/users/hculpan/orgs", + "repos_url": "https://api.github.com/users/hculpan/repos", + "events_url": "https://api.github.com/users/hculpan/events{/privacy}", + "received_events_url": "https://api.github.com/users/hculpan/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/hculpan/nand2tetris", + "description": "My work for the nand2tetris course", + "fork": false, + "url": "https://api.github.com/repos/hculpan/nand2tetris", + "forks_url": "https://api.github.com/repos/hculpan/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/hculpan/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/hculpan/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/hculpan/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/hculpan/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/hculpan/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/hculpan/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/hculpan/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/hculpan/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/hculpan/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/hculpan/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/hculpan/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/hculpan/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/hculpan/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/hculpan/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/hculpan/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/hculpan/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/hculpan/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/hculpan/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/hculpan/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/hculpan/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/hculpan/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/hculpan/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/hculpan/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/hculpan/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/hculpan/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/hculpan/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/hculpan/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/hculpan/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/hculpan/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/hculpan/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/hculpan/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/hculpan/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/hculpan/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/hculpan/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/hculpan/nand2tetris/deployments", + "created_at": "2015-04-25T21:33:12Z", + "updated_at": "2015-04-29T02:45:23Z", + "pushed_at": "2015-04-29T02:45:23Z", + "git_url": "git://github.com/hculpan/nand2tetris.git", + "ssh_url": "git@github.com:hculpan/nand2tetris.git", + "clone_url": "https://github.com/hculpan/nand2tetris.git", + "svn_url": "https://github.com/hculpan/nand2tetris", + "homepage": null, + "size": 316, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 35741949, + "name": "nand2tetris", + "full_name": "vingiarrusso/nand2tetris", + "owner": { + "login": "vingiarrusso", + "id": 4361490, + "avatar_url": "https://avatars.githubusercontent.com/u/4361490?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vingiarrusso", + "html_url": "https://github.com/vingiarrusso", + "followers_url": "https://api.github.com/users/vingiarrusso/followers", + "following_url": "https://api.github.com/users/vingiarrusso/following{/other_user}", + "gists_url": "https://api.github.com/users/vingiarrusso/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vingiarrusso/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vingiarrusso/subscriptions", + "organizations_url": "https://api.github.com/users/vingiarrusso/orgs", + "repos_url": "https://api.github.com/users/vingiarrusso/repos", + "events_url": "https://api.github.com/users/vingiarrusso/events{/privacy}", + "received_events_url": "https://api.github.com/users/vingiarrusso/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/vingiarrusso/nand2tetris", + "description": "Repo containing files used in the \"From Nand to Tetris Part 1\" coursera course written by Shimon Schocken, Noam Nisan", + "fork": false, + "url": "https://api.github.com/repos/vingiarrusso/nand2tetris", + "forks_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/vingiarrusso/nand2tetris/deployments", + "created_at": "2015-05-16T22:02:26Z", + "updated_at": "2015-05-16T23:35:07Z", + "pushed_at": "2015-05-19T05:41:13Z", + "git_url": "git://github.com/vingiarrusso/nand2tetris.git", + "ssh_url": "git@github.com:vingiarrusso/nand2tetris.git", + "clone_url": "https://github.com/vingiarrusso/nand2tetris.git", + "svn_url": "https://github.com/vingiarrusso/nand2tetris", + "homepage": "", + "size": 692, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 37161482, + "name": "nand2tetris_Assembler", + "full_name": "dannyrose42/nand2tetris_Assembler", + "owner": { + "login": "dannyrose42", + "id": 5464924, + "avatar_url": "https://avatars.githubusercontent.com/u/5464924?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dannyrose42", + "html_url": "https://github.com/dannyrose42", + "followers_url": "https://api.github.com/users/dannyrose42/followers", + "following_url": "https://api.github.com/users/dannyrose42/following{/other_user}", + "gists_url": "https://api.github.com/users/dannyrose42/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dannyrose42/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dannyrose42/subscriptions", + "organizations_url": "https://api.github.com/users/dannyrose42/orgs", + "repos_url": "https://api.github.com/users/dannyrose42/repos", + "events_url": "https://api.github.com/users/dannyrose42/events{/privacy}", + "received_events_url": "https://api.github.com/users/dannyrose42/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dannyrose42/nand2tetris_Assembler", + "description": "Assembler for the JACK machine written in C++", + "fork": false, + "url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler", + "forks_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/forks", + "keys_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/teams", + "hooks_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/hooks", + "issue_events_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/issues/events{/number}", + "events_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/events", + "assignees_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/assignees{/user}", + "branches_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/branches{/branch}", + "tags_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/tags", + "blobs_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/languages", + "stargazers_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/stargazers", + "contributors_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/contributors", + "subscribers_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/subscribers", + "subscription_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/subscription", + "commits_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/contents/{+path}", + "compare_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/merges", + "archive_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/downloads", + "issues_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/issues{/number}", + "pulls_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/labels{/name}", + "releases_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/releases{/id}", + "deployments_url": "https://api.github.com/repos/dannyrose42/nand2tetris_Assembler/deployments", + "created_at": "2015-06-09T22:12:28Z", + "updated_at": "2015-07-11T04:42:59Z", + "pushed_at": "2015-09-30T01:27:43Z", + "git_url": "git://github.com/dannyrose42/nand2tetris_Assembler.git", + "ssh_url": "git@github.com:dannyrose42/nand2tetris_Assembler.git", + "clone_url": "https://github.com/dannyrose42/nand2tetris_Assembler.git", + "svn_url": "https://github.com/dannyrose42/nand2tetris_Assembler", + "homepage": "", + "size": 920, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 43754999, + "name": "Nand2Tetris", + "full_name": "kmg8746/Nand2Tetris", + "owner": { + "login": "kmg8746", + "id": 10095986, + "avatar_url": "https://avatars.githubusercontent.com/u/10095986?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kmg8746", + "html_url": "https://github.com/kmg8746", + "followers_url": "https://api.github.com/users/kmg8746/followers", + "following_url": "https://api.github.com/users/kmg8746/following{/other_user}", + "gists_url": "https://api.github.com/users/kmg8746/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kmg8746/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kmg8746/subscriptions", + "organizations_url": "https://api.github.com/users/kmg8746/orgs", + "repos_url": "https://api.github.com/users/kmg8746/repos", + "events_url": "https://api.github.com/users/kmg8746/events{/privacy}", + "received_events_url": "https://api.github.com/users/kmg8746/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kmg8746/Nand2Tetris", + "description": "Building a modern computer with Nand2Tetris (Nand2Tetris.org)", + "fork": false, + "url": "https://api.github.com/repos/kmg8746/Nand2Tetris", + "forks_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kmg8746/Nand2Tetris/deployments", + "created_at": "2015-10-06T14:13:24Z", + "updated_at": "2015-10-06T14:49:16Z", + "pushed_at": "2015-10-06T14:55:30Z", + "git_url": "git://github.com/kmg8746/Nand2Tetris.git", + "ssh_url": "git@github.com:kmg8746/Nand2Tetris.git", + "clone_url": "https://github.com/kmg8746/Nand2Tetris.git", + "svn_url": "https://github.com/kmg8746/Nand2Tetris", + "homepage": null, + "size": 176, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 45802485, + "name": "nand2tetris", + "full_name": "Acedio/nand2tetris", + "owner": { + "login": "Acedio", + "id": 79978, + "avatar_url": "https://avatars.githubusercontent.com/u/79978?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Acedio", + "html_url": "https://github.com/Acedio", + "followers_url": "https://api.github.com/users/Acedio/followers", + "following_url": "https://api.github.com/users/Acedio/following{/other_user}", + "gists_url": "https://api.github.com/users/Acedio/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Acedio/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Acedio/subscriptions", + "organizations_url": "https://api.github.com/users/Acedio/orgs", + "repos_url": "https://api.github.com/users/Acedio/repos", + "events_url": "https://api.github.com/users/Acedio/events{/privacy}", + "received_events_url": "https://api.github.com/users/Acedio/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Acedio/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Acedio/nand2tetris", + "forks_url": "https://api.github.com/repos/Acedio/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/Acedio/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Acedio/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Acedio/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/Acedio/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/Acedio/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/Acedio/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/Acedio/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/Acedio/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/Acedio/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/Acedio/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Acedio/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Acedio/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Acedio/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Acedio/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Acedio/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/Acedio/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/Acedio/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/Acedio/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/Acedio/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/Acedio/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Acedio/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Acedio/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Acedio/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Acedio/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/Acedio/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Acedio/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/Acedio/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Acedio/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/Acedio/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/Acedio/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Acedio/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Acedio/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Acedio/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/Acedio/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/Acedio/nand2tetris/deployments", + "created_at": "2015-11-08T22:42:32Z", + "updated_at": "2016-01-18T22:29:19Z", + "pushed_at": "2016-01-30T05:06:17Z", + "git_url": "git://github.com/Acedio/nand2tetris.git", + "ssh_url": "git@github.com:Acedio/nand2tetris.git", + "clone_url": "https://github.com/Acedio/nand2tetris.git", + "svn_url": "https://github.com/Acedio/nand2tetris", + "homepage": null, + "size": 223, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 50171875, + "name": "nand2tetris", + "full_name": "timmdunker/nand2tetris", + "owner": { + "login": "timmdunker", + "id": 16814248, + "avatar_url": "https://avatars.githubusercontent.com/u/16814248?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/timmdunker", + "html_url": "https://github.com/timmdunker", + "followers_url": "https://api.github.com/users/timmdunker/followers", + "following_url": "https://api.github.com/users/timmdunker/following{/other_user}", + "gists_url": "https://api.github.com/users/timmdunker/gists{/gist_id}", + "starred_url": "https://api.github.com/users/timmdunker/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/timmdunker/subscriptions", + "organizations_url": "https://api.github.com/users/timmdunker/orgs", + "repos_url": "https://api.github.com/users/timmdunker/repos", + "events_url": "https://api.github.com/users/timmdunker/events{/privacy}", + "received_events_url": "https://api.github.com/users/timmdunker/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/timmdunker/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/timmdunker/nand2tetris", + "forks_url": "https://api.github.com/repos/timmdunker/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/timmdunker/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/timmdunker/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/timmdunker/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/timmdunker/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/timmdunker/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/timmdunker/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/timmdunker/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/timmdunker/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/timmdunker/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/timmdunker/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/timmdunker/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/timmdunker/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/timmdunker/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/timmdunker/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/timmdunker/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/timmdunker/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/timmdunker/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/timmdunker/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/timmdunker/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/timmdunker/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/timmdunker/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/timmdunker/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/timmdunker/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/timmdunker/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/timmdunker/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/timmdunker/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/timmdunker/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/timmdunker/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/timmdunker/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/timmdunker/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/timmdunker/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/timmdunker/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/timmdunker/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/timmdunker/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/timmdunker/nand2tetris/deployments", + "created_at": "2016-01-22T09:37:23Z", + "updated_at": "2016-01-22T09:40:03Z", + "pushed_at": "2016-01-22T09:40:01Z", + "git_url": "git://github.com/timmdunker/nand2tetris.git", + "ssh_url": "git@github.com:timmdunker/nand2tetris.git", + "clone_url": "https://github.com/timmdunker/nand2tetris.git", + "svn_url": "https://github.com/timmdunker/nand2tetris", + "homepage": null, + "size": 150, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 49342840, + "name": "nand2tetris", + "full_name": "AndreySBer/nand2tetris", + "owner": { + "login": "AndreySBer", + "id": 13121319, + "avatar_url": "https://avatars.githubusercontent.com/u/13121319?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/AndreySBer", + "html_url": "https://github.com/AndreySBer", + "followers_url": "https://api.github.com/users/AndreySBer/followers", + "following_url": "https://api.github.com/users/AndreySBer/following{/other_user}", + "gists_url": "https://api.github.com/users/AndreySBer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/AndreySBer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/AndreySBer/subscriptions", + "organizations_url": "https://api.github.com/users/AndreySBer/orgs", + "repos_url": "https://api.github.com/users/AndreySBer/repos", + "events_url": "https://api.github.com/users/AndreySBer/events{/privacy}", + "received_events_url": "https://api.github.com/users/AndreySBer/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/AndreySBer/nand2tetris", + "description": "Project 1: Boolean Logic", + "fork": false, + "url": "https://api.github.com/repos/AndreySBer/nand2tetris", + "forks_url": "https://api.github.com/repos/AndreySBer/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/AndreySBer/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/AndreySBer/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/AndreySBer/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/AndreySBer/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/AndreySBer/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/AndreySBer/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/AndreySBer/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/AndreySBer/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/AndreySBer/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/AndreySBer/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/AndreySBer/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/AndreySBer/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/AndreySBer/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/AndreySBer/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/AndreySBer/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/AndreySBer/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/AndreySBer/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/AndreySBer/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/AndreySBer/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/AndreySBer/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/AndreySBer/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/AndreySBer/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/AndreySBer/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/AndreySBer/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/AndreySBer/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/AndreySBer/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/AndreySBer/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/AndreySBer/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/AndreySBer/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/AndreySBer/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/AndreySBer/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/AndreySBer/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/AndreySBer/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/AndreySBer/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/AndreySBer/nand2tetris/deployments", + "created_at": "2016-01-09T21:52:54Z", + "updated_at": "2016-01-13T19:28:05Z", + "pushed_at": "2016-01-13T19:38:55Z", + "git_url": "git://github.com/AndreySBer/nand2tetris.git", + "ssh_url": "git@github.com:AndreySBer/nand2tetris.git", + "clone_url": "https://github.com/AndreySBer/nand2tetris.git", + "svn_url": "https://github.com/AndreySBer/nand2tetris", + "homepage": "", + "size": 1881, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 47327434, + "name": "nand2tetris", + "full_name": "msnak14909/nand2tetris", + "owner": { + "login": "msnak14909", + "id": 4802296, + "avatar_url": "https://avatars.githubusercontent.com/u/4802296?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/msnak14909", + "html_url": "https://github.com/msnak14909", + "followers_url": "https://api.github.com/users/msnak14909/followers", + "following_url": "https://api.github.com/users/msnak14909/following{/other_user}", + "gists_url": "https://api.github.com/users/msnak14909/gists{/gist_id}", + "starred_url": "https://api.github.com/users/msnak14909/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/msnak14909/subscriptions", + "organizations_url": "https://api.github.com/users/msnak14909/orgs", + "repos_url": "https://api.github.com/users/msnak14909/repos", + "events_url": "https://api.github.com/users/msnak14909/events{/privacy}", + "received_events_url": "https://api.github.com/users/msnak14909/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/msnak14909/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/msnak14909/nand2tetris", + "forks_url": "https://api.github.com/repos/msnak14909/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/msnak14909/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/msnak14909/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/msnak14909/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/msnak14909/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/msnak14909/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/msnak14909/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/msnak14909/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/msnak14909/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/msnak14909/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/msnak14909/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/msnak14909/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/msnak14909/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/msnak14909/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/msnak14909/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/msnak14909/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/msnak14909/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/msnak14909/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/msnak14909/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/msnak14909/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/msnak14909/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/msnak14909/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/msnak14909/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/msnak14909/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/msnak14909/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/msnak14909/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/msnak14909/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/msnak14909/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/msnak14909/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/msnak14909/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/msnak14909/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/msnak14909/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/msnak14909/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/msnak14909/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/msnak14909/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/msnak14909/nand2tetris/deployments", + "created_at": "2015-12-03T11:20:37Z", + "updated_at": "2015-12-03T11:27:07Z", + "pushed_at": "2016-01-02T10:26:11Z", + "git_url": "git://github.com/msnak14909/nand2tetris.git", + "ssh_url": "git@github.com:msnak14909/nand2tetris.git", + "clone_url": "https://github.com/msnak14909/nand2tetris.git", + "svn_url": "https://github.com/msnak14909/nand2tetris", + "homepage": null, + "size": 177, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 46321572, + "name": "nand2tetris", + "full_name": "deeparcher/nand2tetris", + "owner": { + "login": "deeparcher", + "id": 11221190, + "avatar_url": "https://avatars.githubusercontent.com/u/11221190?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/deeparcher", + "html_url": "https://github.com/deeparcher", + "followers_url": "https://api.github.com/users/deeparcher/followers", + "following_url": "https://api.github.com/users/deeparcher/following{/other_user}", + "gists_url": "https://api.github.com/users/deeparcher/gists{/gist_id}", + "starred_url": "https://api.github.com/users/deeparcher/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/deeparcher/subscriptions", + "organizations_url": "https://api.github.com/users/deeparcher/orgs", + "repos_url": "https://api.github.com/users/deeparcher/repos", + "events_url": "https://api.github.com/users/deeparcher/events{/privacy}", + "received_events_url": "https://api.github.com/users/deeparcher/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/deeparcher/nand2tetris", + "description": "My solutions for Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/deeparcher/nand2tetris", + "forks_url": "https://api.github.com/repos/deeparcher/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/deeparcher/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/deeparcher/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/deeparcher/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/deeparcher/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/deeparcher/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/deeparcher/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/deeparcher/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/deeparcher/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/deeparcher/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/deeparcher/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/deeparcher/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/deeparcher/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/deeparcher/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/deeparcher/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/deeparcher/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/deeparcher/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/deeparcher/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/deeparcher/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/deeparcher/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/deeparcher/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/deeparcher/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/deeparcher/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/deeparcher/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/deeparcher/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/deeparcher/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/deeparcher/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/deeparcher/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/deeparcher/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/deeparcher/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/deeparcher/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/deeparcher/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/deeparcher/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/deeparcher/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/deeparcher/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/deeparcher/nand2tetris/deployments", + "created_at": "2015-11-17T03:45:12Z", + "updated_at": "2015-11-17T03:45:47Z", + "pushed_at": "2015-12-13T00:16:00Z", + "git_url": "git://github.com/deeparcher/nand2tetris.git", + "ssh_url": "git@github.com:deeparcher/nand2tetris.git", + "clone_url": "https://github.com/deeparcher/nand2tetris.git", + "svn_url": "https://github.com/deeparcher/nand2tetris", + "homepage": null, + "size": 193, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 48465113, + "name": "Nand2Tetris", + "full_name": "roycocup/Nand2Tetris", + "owner": { + "login": "roycocup", + "id": 132394, + "avatar_url": "https://avatars.githubusercontent.com/u/132394?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/roycocup", + "html_url": "https://github.com/roycocup", + "followers_url": "https://api.github.com/users/roycocup/followers", + "following_url": "https://api.github.com/users/roycocup/following{/other_user}", + "gists_url": "https://api.github.com/users/roycocup/gists{/gist_id}", + "starred_url": "https://api.github.com/users/roycocup/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/roycocup/subscriptions", + "organizations_url": "https://api.github.com/users/roycocup/orgs", + "repos_url": "https://api.github.com/users/roycocup/repos", + "events_url": "https://api.github.com/users/roycocup/events{/privacy}", + "received_events_url": "https://api.github.com/users/roycocup/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/roycocup/Nand2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/roycocup/Nand2Tetris", + "forks_url": "https://api.github.com/repos/roycocup/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/roycocup/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/roycocup/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/roycocup/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/roycocup/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/roycocup/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/roycocup/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/roycocup/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/roycocup/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/roycocup/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/roycocup/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/roycocup/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/roycocup/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/roycocup/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/roycocup/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/roycocup/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/roycocup/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/roycocup/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/roycocup/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/roycocup/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/roycocup/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/roycocup/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/roycocup/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/roycocup/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/roycocup/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/roycocup/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/roycocup/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/roycocup/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/roycocup/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/roycocup/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/roycocup/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/roycocup/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/roycocup/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/roycocup/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/roycocup/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/roycocup/Nand2Tetris/deployments", + "created_at": "2015-12-23T02:43:18Z", + "updated_at": "2015-12-23T02:43:56Z", + "pushed_at": "2015-12-23T14:29:37Z", + "git_url": "git://github.com/roycocup/Nand2Tetris.git", + "ssh_url": "git@github.com:roycocup/Nand2Tetris.git", + "clone_url": "https://github.com/roycocup/Nand2Tetris.git", + "svn_url": "https://github.com/roycocup/Nand2Tetris", + "homepage": null, + "size": 170, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 48654885, + "name": "NAND2TETRIS", + "full_name": "Mikevin/NAND2TETRIS", + "owner": { + "login": "Mikevin", + "id": 1011429, + "avatar_url": "https://avatars.githubusercontent.com/u/1011429?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Mikevin", + "html_url": "https://github.com/Mikevin", + "followers_url": "https://api.github.com/users/Mikevin/followers", + "following_url": "https://api.github.com/users/Mikevin/following{/other_user}", + "gists_url": "https://api.github.com/users/Mikevin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mikevin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mikevin/subscriptions", + "organizations_url": "https://api.github.com/users/Mikevin/orgs", + "repos_url": "https://api.github.com/users/Mikevin/repos", + "events_url": "https://api.github.com/users/Mikevin/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mikevin/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Mikevin/NAND2TETRIS", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/Mikevin/NAND2TETRIS", + "forks_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/forks", + "keys_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/teams", + "hooks_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/hooks", + "issue_events_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/issues/events{/number}", + "events_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/events", + "assignees_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/assignees{/user}", + "branches_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/branches{/branch}", + "tags_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/tags", + "blobs_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/languages", + "stargazers_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/stargazers", + "contributors_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/contributors", + "subscribers_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/subscribers", + "subscription_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/subscription", + "commits_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/contents/{+path}", + "compare_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/merges", + "archive_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/downloads", + "issues_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/issues{/number}", + "pulls_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/labels{/name}", + "releases_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/releases{/id}", + "deployments_url": "https://api.github.com/repos/Mikevin/NAND2TETRIS/deployments", + "created_at": "2015-12-27T18:02:26Z", + "updated_at": "2015-12-27T18:05:36Z", + "pushed_at": "2015-12-27T18:05:33Z", + "git_url": "git://github.com/Mikevin/NAND2TETRIS.git", + "ssh_url": "git@github.com:Mikevin/NAND2TETRIS.git", + "clone_url": "https://github.com/Mikevin/NAND2TETRIS.git", + "svn_url": "https://github.com/Mikevin/NAND2TETRIS", + "homepage": null, + "size": 608, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 45140361, + "name": "nand2tetris", + "full_name": "torchhound/nand2tetris", + "owner": { + "login": "torchhound", + "id": 5600929, + "avatar_url": "https://avatars.githubusercontent.com/u/5600929?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/torchhound", + "html_url": "https://github.com/torchhound", + "followers_url": "https://api.github.com/users/torchhound/followers", + "following_url": "https://api.github.com/users/torchhound/following{/other_user}", + "gists_url": "https://api.github.com/users/torchhound/gists{/gist_id}", + "starred_url": "https://api.github.com/users/torchhound/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/torchhound/subscriptions", + "organizations_url": "https://api.github.com/users/torchhound/orgs", + "repos_url": "https://api.github.com/users/torchhound/repos", + "events_url": "https://api.github.com/users/torchhound/events{/privacy}", + "received_events_url": "https://api.github.com/users/torchhound/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/torchhound/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/torchhound/nand2tetris", + "forks_url": "https://api.github.com/repos/torchhound/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/torchhound/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/torchhound/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/torchhound/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/torchhound/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/torchhound/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/torchhound/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/torchhound/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/torchhound/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/torchhound/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/torchhound/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/torchhound/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/torchhound/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/torchhound/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/torchhound/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/torchhound/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/torchhound/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/torchhound/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/torchhound/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/torchhound/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/torchhound/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/torchhound/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/torchhound/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/torchhound/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/torchhound/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/torchhound/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/torchhound/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/torchhound/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/torchhound/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/torchhound/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/torchhound/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/torchhound/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/torchhound/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/torchhound/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/torchhound/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/torchhound/nand2tetris/deployments", + "created_at": "2015-10-28T20:38:41Z", + "updated_at": "2015-10-28T20:42:11Z", + "pushed_at": "2015-12-04T00:30:19Z", + "git_url": "git://github.com/torchhound/nand2tetris.git", + "ssh_url": "git@github.com:torchhound/nand2tetris.git", + "clone_url": "https://github.com/torchhound/nand2tetris.git", + "svn_url": "https://github.com/torchhound/nand2tetris", + "homepage": null, + "size": 4838, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 46528719, + "name": "nand2tetris", + "full_name": "delatorrejuanchi/nand2tetris", + "owner": { + "login": "delatorrejuanchi", + "id": 6722188, + "avatar_url": "https://avatars.githubusercontent.com/u/6722188?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/delatorrejuanchi", + "html_url": "https://github.com/delatorrejuanchi", + "followers_url": "https://api.github.com/users/delatorrejuanchi/followers", + "following_url": "https://api.github.com/users/delatorrejuanchi/following{/other_user}", + "gists_url": "https://api.github.com/users/delatorrejuanchi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/delatorrejuanchi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/delatorrejuanchi/subscriptions", + "organizations_url": "https://api.github.com/users/delatorrejuanchi/orgs", + "repos_url": "https://api.github.com/users/delatorrejuanchi/repos", + "events_url": "https://api.github.com/users/delatorrejuanchi/events{/privacy}", + "received_events_url": "https://api.github.com/users/delatorrejuanchi/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/delatorrejuanchi/nand2tetris", + "description": "Code written for Coursera's Nand2Tetris course.", + "fork": false, + "url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris", + "forks_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/delatorrejuanchi/nand2tetris/deployments", + "created_at": "2015-11-20T00:25:45Z", + "updated_at": "2015-11-20T00:26:53Z", + "pushed_at": "2015-11-27T17:14:27Z", + "git_url": "git://github.com/delatorrejuanchi/nand2tetris.git", + "ssh_url": "git@github.com:delatorrejuanchi/nand2tetris.git", + "clone_url": "https://github.com/delatorrejuanchi/nand2tetris.git", + "svn_url": "https://github.com/delatorrejuanchi/nand2tetris", + "homepage": null, + "size": 157, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 46113199, + "name": "nand2tetris", + "full_name": "zanders3/nand2tetris", + "owner": { + "login": "zanders3", + "id": 3011266, + "avatar_url": "https://avatars.githubusercontent.com/u/3011266?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/zanders3", + "html_url": "https://github.com/zanders3", + "followers_url": "https://api.github.com/users/zanders3/followers", + "following_url": "https://api.github.com/users/zanders3/following{/other_user}", + "gists_url": "https://api.github.com/users/zanders3/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zanders3/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zanders3/subscriptions", + "organizations_url": "https://api.github.com/users/zanders3/orgs", + "repos_url": "https://api.github.com/users/zanders3/repos", + "events_url": "https://api.github.com/users/zanders3/events{/privacy}", + "received_events_url": "https://api.github.com/users/zanders3/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/zanders3/nand2tetris", + "description": "Building a computer from first principles", + "fork": false, + "url": "https://api.github.com/repos/zanders3/nand2tetris", + "forks_url": "https://api.github.com/repos/zanders3/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/zanders3/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/zanders3/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/zanders3/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/zanders3/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/zanders3/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/zanders3/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/zanders3/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/zanders3/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/zanders3/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/zanders3/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/zanders3/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/zanders3/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/zanders3/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/zanders3/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/zanders3/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/zanders3/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/zanders3/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/zanders3/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/zanders3/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/zanders3/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/zanders3/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/zanders3/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/zanders3/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/zanders3/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/zanders3/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/zanders3/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/zanders3/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/zanders3/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/zanders3/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/zanders3/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/zanders3/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/zanders3/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/zanders3/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/zanders3/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/zanders3/nand2tetris/deployments", + "created_at": "2015-11-13T09:38:30Z", + "updated_at": "2015-11-18T23:25:53Z", + "pushed_at": "2015-11-24T23:48:25Z", + "git_url": "git://github.com/zanders3/nand2tetris.git", + "ssh_url": "git@github.com:zanders3/nand2tetris.git", + "clone_url": "https://github.com/zanders3/nand2tetris.git", + "svn_url": "https://github.com/zanders3/nand2tetris", + "homepage": "http://www.nand2tetris.org/", + "size": 604, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 45667435, + "name": "nand2tetris", + "full_name": "gshaw/nand2tetris", + "owner": { + "login": "gshaw", + "id": 33321, + "avatar_url": "https://avatars.githubusercontent.com/u/33321?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gshaw", + "html_url": "https://github.com/gshaw", + "followers_url": "https://api.github.com/users/gshaw/followers", + "following_url": "https://api.github.com/users/gshaw/following{/other_user}", + "gists_url": "https://api.github.com/users/gshaw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gshaw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gshaw/subscriptions", + "organizations_url": "https://api.github.com/users/gshaw/orgs", + "repos_url": "https://api.github.com/users/gshaw/repos", + "events_url": "https://api.github.com/users/gshaw/events{/privacy}", + "received_events_url": "https://api.github.com/users/gshaw/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/gshaw/nand2tetris", + "description": "Project solutions for Nand2Tetris course", + "fork": false, + "url": "https://api.github.com/repos/gshaw/nand2tetris", + "forks_url": "https://api.github.com/repos/gshaw/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/gshaw/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/gshaw/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/gshaw/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/gshaw/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/gshaw/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/gshaw/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/gshaw/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/gshaw/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/gshaw/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/gshaw/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/gshaw/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/gshaw/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/gshaw/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/gshaw/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/gshaw/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/gshaw/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/gshaw/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/gshaw/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/gshaw/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/gshaw/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/gshaw/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/gshaw/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/gshaw/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/gshaw/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/gshaw/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/gshaw/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/gshaw/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/gshaw/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/gshaw/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/gshaw/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/gshaw/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/gshaw/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/gshaw/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/gshaw/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/gshaw/nand2tetris/deployments", + "created_at": "2015-11-06T07:48:19Z", + "updated_at": "2015-11-06T07:53:17Z", + "pushed_at": "2015-11-23T06:58:20Z", + "git_url": "git://github.com/gshaw/nand2tetris.git", + "ssh_url": "git@github.com:gshaw/nand2tetris.git", + "clone_url": "https://github.com/gshaw/nand2tetris.git", + "svn_url": "https://github.com/gshaw/nand2tetris", + "homepage": "http://nand2tetris.org", + "size": 237, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 23497643, + "name": "01_nand2tetris", + "full_name": "cashstramel/01_nand2tetris", + "owner": { + "login": "cashstramel", + "id": 4407796, + "avatar_url": "https://avatars.githubusercontent.com/u/4407796?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cashstramel", + "html_url": "https://github.com/cashstramel", + "followers_url": "https://api.github.com/users/cashstramel/followers", + "following_url": "https://api.github.com/users/cashstramel/following{/other_user}", + "gists_url": "https://api.github.com/users/cashstramel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cashstramel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cashstramel/subscriptions", + "organizations_url": "https://api.github.com/users/cashstramel/orgs", + "repos_url": "https://api.github.com/users/cashstramel/repos", + "events_url": "https://api.github.com/users/cashstramel/events{/privacy}", + "received_events_url": "https://api.github.com/users/cashstramel/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cashstramel/01_nand2tetris", + "description": "TECS Code", + "fork": false, + "url": "https://api.github.com/repos/cashstramel/01_nand2tetris", + "forks_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/forks", + "keys_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/events", + "assignees_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/merges", + "archive_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/cashstramel/01_nand2tetris/deployments", + "created_at": "2014-08-30T18:07:54Z", + "updated_at": "2016-03-19T17:00:29Z", + "pushed_at": "2014-08-30T18:13:24Z", + "git_url": "git://github.com/cashstramel/01_nand2tetris.git", + "ssh_url": "git@github.com:cashstramel/01_nand2tetris.git", + "clone_url": "https://github.com/cashstramel/01_nand2tetris.git", + "svn_url": "https://github.com/cashstramel/01_nand2tetris", + "homepage": null, + "size": 6796, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 51472139, + "name": "nand2tetris", + "full_name": "ksullivan2/nand2tetris", + "owner": { + "login": "ksullivan2", + "id": 15851031, + "avatar_url": "https://avatars.githubusercontent.com/u/15851031?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ksullivan2", + "html_url": "https://github.com/ksullivan2", + "followers_url": "https://api.github.com/users/ksullivan2/followers", + "following_url": "https://api.github.com/users/ksullivan2/following{/other_user}", + "gists_url": "https://api.github.com/users/ksullivan2/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ksullivan2/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ksullivan2/subscriptions", + "organizations_url": "https://api.github.com/users/ksullivan2/orgs", + "repos_url": "https://api.github.com/users/ksullivan2/repos", + "events_url": "https://api.github.com/users/ksullivan2/events{/privacy}", + "received_events_url": "https://api.github.com/users/ksullivan2/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/ksullivan2/nand2tetris", + "description": "going through problem in book....", + "fork": false, + "url": "https://api.github.com/repos/ksullivan2/nand2tetris", + "forks_url": "https://api.github.com/repos/ksullivan2/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/ksullivan2/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/ksullivan2/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/ksullivan2/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/ksullivan2/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/ksullivan2/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/ksullivan2/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/ksullivan2/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/ksullivan2/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/ksullivan2/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/ksullivan2/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/ksullivan2/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/ksullivan2/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/ksullivan2/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/ksullivan2/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/ksullivan2/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/ksullivan2/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/ksullivan2/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/ksullivan2/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/ksullivan2/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/ksullivan2/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/ksullivan2/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/ksullivan2/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/ksullivan2/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/ksullivan2/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/ksullivan2/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/ksullivan2/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/ksullivan2/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/ksullivan2/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/ksullivan2/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/ksullivan2/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/ksullivan2/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/ksullivan2/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/ksullivan2/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/ksullivan2/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/ksullivan2/nand2tetris/deployments", + "created_at": "2016-02-10T21:05:55Z", + "updated_at": "2016-02-10T22:28:12Z", + "pushed_at": "2016-02-23T04:06:20Z", + "git_url": "git://github.com/ksullivan2/nand2tetris.git", + "ssh_url": "git@github.com:ksullivan2/nand2tetris.git", + "clone_url": "https://github.com/ksullivan2/nand2tetris.git", + "svn_url": "https://github.com/ksullivan2/nand2tetris", + "homepage": null, + "size": 506, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 52894637, + "name": "nad2tetris-course", + "full_name": "dannyduc/nad2tetris-course", + "owner": { + "login": "dannyduc", + "id": 957278, + "avatar_url": "https://avatars.githubusercontent.com/u/957278?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dannyduc", + "html_url": "https://github.com/dannyduc", + "followers_url": "https://api.github.com/users/dannyduc/followers", + "following_url": "https://api.github.com/users/dannyduc/following{/other_user}", + "gists_url": "https://api.github.com/users/dannyduc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dannyduc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dannyduc/subscriptions", + "organizations_url": "https://api.github.com/users/dannyduc/orgs", + "repos_url": "https://api.github.com/users/dannyduc/repos", + "events_url": "https://api.github.com/users/dannyduc/events{/privacy}", + "received_events_url": "https://api.github.com/users/dannyduc/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dannyduc/nad2tetris-course", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dannyduc/nad2tetris-course", + "forks_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/forks", + "keys_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/teams", + "hooks_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/hooks", + "issue_events_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/issues/events{/number}", + "events_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/events", + "assignees_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/assignees{/user}", + "branches_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/branches{/branch}", + "tags_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/tags", + "blobs_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/languages", + "stargazers_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/stargazers", + "contributors_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/contributors", + "subscribers_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/subscribers", + "subscription_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/subscription", + "commits_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/contents/{+path}", + "compare_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/merges", + "archive_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/downloads", + "issues_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/issues{/number}", + "pulls_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/labels{/name}", + "releases_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/releases{/id}", + "deployments_url": "https://api.github.com/repos/dannyduc/nad2tetris-course/deployments", + "created_at": "2016-03-01T17:08:54Z", + "updated_at": "2016-03-01T17:15:59Z", + "pushed_at": "2016-03-03T17:34:12Z", + "git_url": "git://github.com/dannyduc/nad2tetris-course.git", + "ssh_url": "git@github.com:dannyduc/nad2tetris-course.git", + "clone_url": "https://github.com/dannyduc/nad2tetris-course.git", + "svn_url": "https://github.com/dannyduc/nad2tetris-course", + "homepage": null, + "size": 9206, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 51025160, + "name": "nand2tetris", + "full_name": "chrisvittal/nand2tetris", + "owner": { + "login": "chrisvittal", + "id": 15916123, + "avatar_url": "https://avatars.githubusercontent.com/u/15916123?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/chrisvittal", + "html_url": "https://github.com/chrisvittal", + "followers_url": "https://api.github.com/users/chrisvittal/followers", + "following_url": "https://api.github.com/users/chrisvittal/following{/other_user}", + "gists_url": "https://api.github.com/users/chrisvittal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/chrisvittal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/chrisvittal/subscriptions", + "organizations_url": "https://api.github.com/users/chrisvittal/orgs", + "repos_url": "https://api.github.com/users/chrisvittal/repos", + "events_url": "https://api.github.com/users/chrisvittal/events{/privacy}", + "received_events_url": "https://api.github.com/users/chrisvittal/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/chrisvittal/nand2tetris", + "description": "Project files for projects in Nisan and Schocken's \"The Elements of Computing Systems\"", + "fork": false, + "url": "https://api.github.com/repos/chrisvittal/nand2tetris", + "forks_url": "https://api.github.com/repos/chrisvittal/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/chrisvittal/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/chrisvittal/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/chrisvittal/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/chrisvittal/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/chrisvittal/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/chrisvittal/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/chrisvittal/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/chrisvittal/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/chrisvittal/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/chrisvittal/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/chrisvittal/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/chrisvittal/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/chrisvittal/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/chrisvittal/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/chrisvittal/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/chrisvittal/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/chrisvittal/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/chrisvittal/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/chrisvittal/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/chrisvittal/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/chrisvittal/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/chrisvittal/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/chrisvittal/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/chrisvittal/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/chrisvittal/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/chrisvittal/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/chrisvittal/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/chrisvittal/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/chrisvittal/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/chrisvittal/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/chrisvittal/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/chrisvittal/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/chrisvittal/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/chrisvittal/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/chrisvittal/nand2tetris/deployments", + "created_at": "2016-02-03T19:36:35Z", + "updated_at": "2016-02-03T20:08:42Z", + "pushed_at": "2016-03-03T06:01:52Z", + "git_url": "git://github.com/chrisvittal/nand2tetris.git", + "ssh_url": "git@github.com:chrisvittal/nand2tetris.git", + "clone_url": "https://github.com/chrisvittal/nand2tetris.git", + "svn_url": "https://github.com/chrisvittal/nand2tetris", + "homepage": null, + "size": 189, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 53259792, + "name": "nand2tetris", + "full_name": "wivren/nand2tetris", + "owner": { + "login": "wivren", + "id": 9570672, + "avatar_url": "https://avatars.githubusercontent.com/u/9570672?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wivren", + "html_url": "https://github.com/wivren", + "followers_url": "https://api.github.com/users/wivren/followers", + "following_url": "https://api.github.com/users/wivren/following{/other_user}", + "gists_url": "https://api.github.com/users/wivren/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wivren/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wivren/subscriptions", + "organizations_url": "https://api.github.com/users/wivren/orgs", + "repos_url": "https://api.github.com/users/wivren/repos", + "events_url": "https://api.github.com/users/wivren/events{/privacy}", + "received_events_url": "https://api.github.com/users/wivren/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/wivren/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/wivren/nand2tetris", + "forks_url": "https://api.github.com/repos/wivren/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/wivren/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/wivren/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/wivren/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/wivren/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/wivren/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/wivren/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/wivren/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/wivren/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/wivren/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/wivren/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/wivren/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/wivren/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/wivren/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/wivren/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/wivren/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/wivren/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/wivren/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/wivren/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/wivren/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/wivren/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/wivren/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/wivren/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/wivren/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/wivren/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/wivren/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/wivren/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/wivren/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/wivren/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/wivren/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/wivren/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/wivren/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/wivren/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/wivren/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/wivren/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/wivren/nand2tetris/deployments", + "created_at": "2016-03-06T14:47:56Z", + "updated_at": "2016-03-09T11:03:37Z", + "pushed_at": "2016-03-09T11:03:35Z", + "git_url": "git://github.com/wivren/nand2tetris.git", + "ssh_url": "git@github.com:wivren/nand2tetris.git", + "clone_url": "https://github.com/wivren/nand2tetris.git", + "svn_url": "https://github.com/wivren/nand2tetris", + "homepage": null, + "size": 205, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 35060558, + "name": "nand2tetris", + "full_name": "parmarmanojkumar/nand2tetris", + "owner": { + "login": "parmarmanojkumar", + "id": 10676690, + "avatar_url": "https://avatars.githubusercontent.com/u/10676690?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/parmarmanojkumar", + "html_url": "https://github.com/parmarmanojkumar", + "followers_url": "https://api.github.com/users/parmarmanojkumar/followers", + "following_url": "https://api.github.com/users/parmarmanojkumar/following{/other_user}", + "gists_url": "https://api.github.com/users/parmarmanojkumar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/parmarmanojkumar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/parmarmanojkumar/subscriptions", + "organizations_url": "https://api.github.com/users/parmarmanojkumar/orgs", + "repos_url": "https://api.github.com/users/parmarmanojkumar/repos", + "events_url": "https://api.github.com/users/parmarmanojkumar/events{/privacy}", + "received_events_url": "https://api.github.com/users/parmarmanojkumar/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/parmarmanojkumar/nand2tetris", + "description": "Coursework of nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris", + "forks_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/parmarmanojkumar/nand2tetris/deployments", + "created_at": "2015-05-04T21:24:53Z", + "updated_at": "2016-03-22T16:56:05Z", + "pushed_at": "2016-03-22T16:56:03Z", + "git_url": "git://github.com/parmarmanojkumar/nand2tetris.git", + "ssh_url": "git@github.com:parmarmanojkumar/nand2tetris.git", + "clone_url": "https://github.com/parmarmanojkumar/nand2tetris.git", + "svn_url": "https://github.com/parmarmanojkumar/nand2tetris", + "homepage": null, + "size": 336, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 51479059, + "name": "nand2tetris", + "full_name": "nebkor/nand2tetris", + "owner": { + "login": "nebkor", + "id": 517215, + "avatar_url": "https://avatars.githubusercontent.com/u/517215?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nebkor", + "html_url": "https://github.com/nebkor", + "followers_url": "https://api.github.com/users/nebkor/followers", + "following_url": "https://api.github.com/users/nebkor/following{/other_user}", + "gists_url": "https://api.github.com/users/nebkor/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nebkor/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nebkor/subscriptions", + "organizations_url": "https://api.github.com/users/nebkor/orgs", + "repos_url": "https://api.github.com/users/nebkor/repos", + "events_url": "https://api.github.com/users/nebkor/events{/privacy}", + "received_events_url": "https://api.github.com/users/nebkor/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nebkor/nand2tetris", + "description": "Repository of my work for \"The Elements of Computing Systems\".", + "fork": false, + "url": "https://api.github.com/repos/nebkor/nand2tetris", + "forks_url": "https://api.github.com/repos/nebkor/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/nebkor/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nebkor/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nebkor/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/nebkor/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/nebkor/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/nebkor/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/nebkor/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/nebkor/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/nebkor/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/nebkor/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nebkor/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nebkor/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nebkor/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nebkor/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nebkor/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/nebkor/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/nebkor/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/nebkor/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/nebkor/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/nebkor/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nebkor/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nebkor/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nebkor/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nebkor/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/nebkor/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nebkor/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/nebkor/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nebkor/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/nebkor/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/nebkor/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nebkor/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nebkor/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nebkor/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/nebkor/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/nebkor/nand2tetris/deployments", + "created_at": "2016-02-10T22:59:37Z", + "updated_at": "2016-02-10T23:00:30Z", + "pushed_at": "2016-03-22T17:30:08Z", + "git_url": "git://github.com/nebkor/nand2tetris.git", + "ssh_url": "git@github.com:nebkor/nand2tetris.git", + "clone_url": "https://github.com/nebkor/nand2tetris.git", + "svn_url": "https://github.com/nebkor/nand2tetris", + "homepage": null, + "size": 182, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 53137977, + "name": "nand2tetris", + "full_name": "tinylic/nand2tetris", + "owner": { + "login": "tinylic", + "id": 7011260, + "avatar_url": "https://avatars.githubusercontent.com/u/7011260?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tinylic", + "html_url": "https://github.com/tinylic", + "followers_url": "https://api.github.com/users/tinylic/followers", + "following_url": "https://api.github.com/users/tinylic/following{/other_user}", + "gists_url": "https://api.github.com/users/tinylic/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tinylic/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tinylic/subscriptions", + "organizations_url": "https://api.github.com/users/tinylic/orgs", + "repos_url": "https://api.github.com/users/tinylic/repos", + "events_url": "https://api.github.com/users/tinylic/events{/privacy}", + "received_events_url": "https://api.github.com/users/tinylic/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/tinylic/nand2tetris", + "description": "projects for the course nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/tinylic/nand2tetris", + "forks_url": "https://api.github.com/repos/tinylic/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/tinylic/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tinylic/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tinylic/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/tinylic/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/tinylic/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/tinylic/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/tinylic/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/tinylic/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/tinylic/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/tinylic/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tinylic/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tinylic/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tinylic/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tinylic/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tinylic/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/tinylic/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/tinylic/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/tinylic/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/tinylic/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/tinylic/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tinylic/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tinylic/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tinylic/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tinylic/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/tinylic/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tinylic/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/tinylic/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tinylic/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/tinylic/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/tinylic/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tinylic/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tinylic/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tinylic/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/tinylic/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/tinylic/nand2tetris/deployments", + "created_at": "2016-03-04T13:41:23Z", + "updated_at": "2016-03-04T13:44:27Z", + "pushed_at": "2016-03-24T10:01:24Z", + "git_url": "git://github.com/tinylic/nand2tetris.git", + "ssh_url": "git@github.com:tinylic/nand2tetris.git", + "clone_url": "https://github.com/tinylic/nand2tetris.git", + "svn_url": "https://github.com/tinylic/nand2tetris", + "homepage": null, + "size": 166, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 53109295, + "name": "nand2tetris", + "full_name": "kenvifire/nand2tetris", + "owner": { + "login": "kenvifire", + "id": 1464416, + "avatar_url": "https://avatars.githubusercontent.com/u/1464416?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kenvifire", + "html_url": "https://github.com/kenvifire", + "followers_url": "https://api.github.com/users/kenvifire/followers", + "following_url": "https://api.github.com/users/kenvifire/following{/other_user}", + "gists_url": "https://api.github.com/users/kenvifire/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kenvifire/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kenvifire/subscriptions", + "organizations_url": "https://api.github.com/users/kenvifire/orgs", + "repos_url": "https://api.github.com/users/kenvifire/repos", + "events_url": "https://api.github.com/users/kenvifire/events{/privacy}", + "received_events_url": "https://api.github.com/users/kenvifire/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kenvifire/nand2tetris", + "description": "projects for nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/kenvifire/nand2tetris", + "forks_url": "https://api.github.com/repos/kenvifire/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kenvifire/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kenvifire/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kenvifire/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kenvifire/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kenvifire/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kenvifire/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kenvifire/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kenvifire/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kenvifire/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kenvifire/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kenvifire/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kenvifire/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kenvifire/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kenvifire/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kenvifire/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kenvifire/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kenvifire/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kenvifire/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kenvifire/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kenvifire/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kenvifire/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kenvifire/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kenvifire/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kenvifire/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kenvifire/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kenvifire/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kenvifire/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kenvifire/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kenvifire/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kenvifire/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kenvifire/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kenvifire/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kenvifire/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kenvifire/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kenvifire/nand2tetris/deployments", + "created_at": "2016-03-04T05:15:17Z", + "updated_at": "2016-03-04T05:17:00Z", + "pushed_at": "2016-04-05T03:23:58Z", + "git_url": "git://github.com/kenvifire/nand2tetris.git", + "ssh_url": "git@github.com:kenvifire/nand2tetris.git", + "clone_url": "https://github.com/kenvifire/nand2tetris.git", + "svn_url": "https://github.com/kenvifire/nand2tetris", + "homepage": null, + "size": 172, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 54350821, + "name": "nand2tetris", + "full_name": "dewyze/nand2tetris", + "owner": { + "login": "dewyze", + "id": 1312168, + "avatar_url": "https://avatars.githubusercontent.com/u/1312168?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dewyze", + "html_url": "https://github.com/dewyze", + "followers_url": "https://api.github.com/users/dewyze/followers", + "following_url": "https://api.github.com/users/dewyze/following{/other_user}", + "gists_url": "https://api.github.com/users/dewyze/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dewyze/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dewyze/subscriptions", + "organizations_url": "https://api.github.com/users/dewyze/orgs", + "repos_url": "https://api.github.com/users/dewyze/repos", + "events_url": "https://api.github.com/users/dewyze/events{/privacy}", + "received_events_url": "https://api.github.com/users/dewyze/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dewyze/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/dewyze/nand2tetris", + "forks_url": "https://api.github.com/repos/dewyze/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/dewyze/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dewyze/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dewyze/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/dewyze/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/dewyze/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/dewyze/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/dewyze/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/dewyze/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/dewyze/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/dewyze/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dewyze/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dewyze/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dewyze/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dewyze/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dewyze/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/dewyze/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/dewyze/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/dewyze/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/dewyze/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/dewyze/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dewyze/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dewyze/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dewyze/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dewyze/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/dewyze/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dewyze/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/dewyze/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dewyze/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/dewyze/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/dewyze/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dewyze/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dewyze/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dewyze/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/dewyze/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/dewyze/nand2tetris/deployments", + "created_at": "2016-03-21T01:29:51Z", + "updated_at": "2016-03-21T01:30:56Z", + "pushed_at": "2016-04-05T04:07:44Z", + "git_url": "git://github.com/dewyze/nand2tetris.git", + "ssh_url": "git@github.com:dewyze/nand2tetris.git", + "clone_url": "https://github.com/dewyze/nand2tetris.git", + "svn_url": "https://github.com/dewyze/nand2tetris", + "homepage": null, + "size": 155, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 54179875, + "name": "nand2tetris", + "full_name": "xavierzip/nand2tetris", + "owner": { + "login": "xavierzip", + "id": 2385917, + "avatar_url": "https://avatars.githubusercontent.com/u/2385917?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/xavierzip", + "html_url": "https://github.com/xavierzip", + "followers_url": "https://api.github.com/users/xavierzip/followers", + "following_url": "https://api.github.com/users/xavierzip/following{/other_user}", + "gists_url": "https://api.github.com/users/xavierzip/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xavierzip/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xavierzip/subscriptions", + "organizations_url": "https://api.github.com/users/xavierzip/orgs", + "repos_url": "https://api.github.com/users/xavierzip/repos", + "events_url": "https://api.github.com/users/xavierzip/events{/privacy}", + "received_events_url": "https://api.github.com/users/xavierzip/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/xavierzip/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/xavierzip/nand2tetris", + "forks_url": "https://api.github.com/repos/xavierzip/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/xavierzip/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/xavierzip/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/xavierzip/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/xavierzip/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/xavierzip/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/xavierzip/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/xavierzip/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/xavierzip/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/xavierzip/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/xavierzip/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/xavierzip/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/xavierzip/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/xavierzip/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/xavierzip/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/xavierzip/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/xavierzip/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/xavierzip/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/xavierzip/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/xavierzip/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/xavierzip/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/xavierzip/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/xavierzip/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/xavierzip/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/xavierzip/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/xavierzip/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/xavierzip/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/xavierzip/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/xavierzip/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/xavierzip/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/xavierzip/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/xavierzip/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/xavierzip/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/xavierzip/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/xavierzip/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/xavierzip/nand2tetris/deployments", + "created_at": "2016-03-18T06:42:23Z", + "updated_at": "2016-03-21T05:55:15Z", + "pushed_at": "2016-04-03T12:35:06Z", + "git_url": "git://github.com/xavierzip/nand2tetris.git", + "ssh_url": "git@github.com:xavierzip/nand2tetris.git", + "clone_url": "https://github.com/xavierzip/nand2tetris.git", + "svn_url": "https://github.com/xavierzip/nand2tetris", + "homepage": null, + "size": 158, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 29760532, + "name": "nand2Tetris", + "full_name": "elauzel/nand2Tetris", + "owner": { + "login": "elauzel", + "id": 3578537, + "avatar_url": "https://avatars.githubusercontent.com/u/3578537?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/elauzel", + "html_url": "https://github.com/elauzel", + "followers_url": "https://api.github.com/users/elauzel/followers", + "following_url": "https://api.github.com/users/elauzel/following{/other_user}", + "gists_url": "https://api.github.com/users/elauzel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/elauzel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/elauzel/subscriptions", + "organizations_url": "https://api.github.com/users/elauzel/orgs", + "repos_url": "https://api.github.com/users/elauzel/repos", + "events_url": "https://api.github.com/users/elauzel/events{/privacy}", + "received_events_url": "https://api.github.com/users/elauzel/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/elauzel/nand2Tetris", + "description": "From NAND gates to an assembler, VM, OS, compiler, high-level OO language, and game", + "fork": false, + "url": "https://api.github.com/repos/elauzel/nand2Tetris", + "forks_url": "https://api.github.com/repos/elauzel/nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/elauzel/nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/elauzel/nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/elauzel/nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/elauzel/nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/elauzel/nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/elauzel/nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/elauzel/nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/elauzel/nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/elauzel/nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/elauzel/nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/elauzel/nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/elauzel/nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/elauzel/nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/elauzel/nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/elauzel/nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/elauzel/nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/elauzel/nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/elauzel/nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/elauzel/nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/elauzel/nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/elauzel/nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/elauzel/nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/elauzel/nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/elauzel/nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/elauzel/nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/elauzel/nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/elauzel/nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/elauzel/nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/elauzel/nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/elauzel/nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/elauzel/nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/elauzel/nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/elauzel/nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/elauzel/nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/elauzel/nand2Tetris/deployments", + "created_at": "2015-01-24T00:56:52Z", + "updated_at": "2016-04-03T01:29:24Z", + "pushed_at": "2016-04-03T01:29:23Z", + "git_url": "git://github.com/elauzel/nand2Tetris.git", + "ssh_url": "git@github.com:elauzel/nand2Tetris.git", + "clone_url": "https://github.com/elauzel/nand2Tetris.git", + "svn_url": "https://github.com/elauzel/nand2Tetris", + "homepage": "", + "size": 770, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 56945023, + "name": "nand2tetris_projects", + "full_name": "mariana-LJ/nand2tetris_projects", + "owner": { + "login": "mariana-LJ", + "id": 6962666, + "avatar_url": "https://avatars.githubusercontent.com/u/6962666?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mariana-LJ", + "html_url": "https://github.com/mariana-LJ", + "followers_url": "https://api.github.com/users/mariana-LJ/followers", + "following_url": "https://api.github.com/users/mariana-LJ/following{/other_user}", + "gists_url": "https://api.github.com/users/mariana-LJ/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mariana-LJ/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mariana-LJ/subscriptions", + "organizations_url": "https://api.github.com/users/mariana-LJ/orgs", + "repos_url": "https://api.github.com/users/mariana-LJ/repos", + "events_url": "https://api.github.com/users/mariana-LJ/events{/privacy}", + "received_events_url": "https://api.github.com/users/mariana-LJ/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/mariana-LJ/nand2tetris_projects", + "description": "My code for the projects of the course From Nand to Tetris: Building a Computer from Scratch.", + "fork": false, + "url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects", + "forks_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/forks", + "keys_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/teams", + "hooks_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/hooks", + "issue_events_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/issues/events{/number}", + "events_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/events", + "assignees_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/assignees{/user}", + "branches_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/branches{/branch}", + "tags_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/tags", + "blobs_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/statuses/{sha}", + "languages_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/languages", + "stargazers_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/stargazers", + "contributors_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/contributors", + "subscribers_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/subscribers", + "subscription_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/subscription", + "commits_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/contents/{+path}", + "compare_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/merges", + "archive_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/downloads", + "issues_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/issues{/number}", + "pulls_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/pulls{/number}", + "milestones_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/milestones{/number}", + "notifications_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/labels{/name}", + "releases_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/releases{/id}", + "deployments_url": "https://api.github.com/repos/mariana-LJ/nand2tetris_projects/deployments", + "created_at": "2016-04-23T23:18:24Z", + "updated_at": "2016-04-23T23:23:44Z", + "pushed_at": "2016-04-23T23:23:42Z", + "git_url": "git://github.com/mariana-LJ/nand2tetris_projects.git", + "ssh_url": "git@github.com:mariana-LJ/nand2tetris_projects.git", + "clone_url": "https://github.com/mariana-LJ/nand2tetris_projects.git", + "svn_url": "https://github.com/mariana-LJ/nand2tetris_projects", + "homepage": null, + "size": 248, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 38838356, + "name": "Nadn2Tetris", + "full_name": "maru-n/Nadn2Tetris", + "owner": { + "login": "maru-n", + "id": 1583412, + "avatar_url": "https://avatars.githubusercontent.com/u/1583412?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/maru-n", + "html_url": "https://github.com/maru-n", + "followers_url": "https://api.github.com/users/maru-n/followers", + "following_url": "https://api.github.com/users/maru-n/following{/other_user}", + "gists_url": "https://api.github.com/users/maru-n/gists{/gist_id}", + "starred_url": "https://api.github.com/users/maru-n/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/maru-n/subscriptions", + "organizations_url": "https://api.github.com/users/maru-n/orgs", + "repos_url": "https://api.github.com/users/maru-n/repos", + "events_url": "https://api.github.com/users/maru-n/events{/privacy}", + "received_events_url": "https://api.github.com/users/maru-n/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/maru-n/Nadn2Tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/maru-n/Nadn2Tetris", + "forks_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/forks", + "keys_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/teams", + "hooks_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/events", + "assignees_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/tags", + "blobs_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/subscription", + "commits_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/merges", + "archive_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/downloads", + "issues_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/maru-n/Nadn2Tetris/deployments", + "created_at": "2015-07-09T18:35:12Z", + "updated_at": "2016-04-04T16:44:24Z", + "pushed_at": "2016-04-20T10:17:34Z", + "git_url": "git://github.com/maru-n/Nadn2Tetris.git", + "ssh_url": "git@github.com:maru-n/Nadn2Tetris.git", + "clone_url": "https://github.com/maru-n/Nadn2Tetris.git", + "svn_url": "https://github.com/maru-n/Nadn2Tetris", + "homepage": null, + "size": 265, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "open_issues_count": 0, + "forks": 1, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 56413407, + "name": "nand2tetris", + "full_name": "eugenefedoto/nand2tetris", + "owner": { + "login": "eugenefedoto", + "id": 14006633, + "avatar_url": "https://avatars.githubusercontent.com/u/14006633?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/eugenefedoto", + "html_url": "https://github.com/eugenefedoto", + "followers_url": "https://api.github.com/users/eugenefedoto/followers", + "following_url": "https://api.github.com/users/eugenefedoto/following{/other_user}", + "gists_url": "https://api.github.com/users/eugenefedoto/gists{/gist_id}", + "starred_url": "https://api.github.com/users/eugenefedoto/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/eugenefedoto/subscriptions", + "organizations_url": "https://api.github.com/users/eugenefedoto/orgs", + "repos_url": "https://api.github.com/users/eugenefedoto/repos", + "events_url": "https://api.github.com/users/eugenefedoto/events{/privacy}", + "received_events_url": "https://api.github.com/users/eugenefedoto/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/eugenefedoto/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/eugenefedoto/nand2tetris", + "forks_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/eugenefedoto/nand2tetris/deployments", + "created_at": "2016-04-17T01:26:05Z", + "updated_at": "2016-04-17T15:14:28Z", + "pushed_at": "2016-04-27T19:01:44Z", + "git_url": "git://github.com/eugenefedoto/nand2tetris.git", + "ssh_url": "git@github.com:eugenefedoto/nand2tetris.git", + "clone_url": "https://github.com/eugenefedoto/nand2tetris.git", + "svn_url": "https://github.com/eugenefedoto/nand2tetris", + "homepage": null, + "size": 161, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 52641086, + "name": "nand2tetris", + "full_name": "lzh2nix/nand2tetris", + "owner": { + "login": "lzh2nix", + "id": 7421004, + "avatar_url": "https://avatars.githubusercontent.com/u/7421004?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lzh2nix", + "html_url": "https://github.com/lzh2nix", + "followers_url": "https://api.github.com/users/lzh2nix/followers", + "following_url": "https://api.github.com/users/lzh2nix/following{/other_user}", + "gists_url": "https://api.github.com/users/lzh2nix/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lzh2nix/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lzh2nix/subscriptions", + "organizations_url": "https://api.github.com/users/lzh2nix/orgs", + "repos_url": "https://api.github.com/users/lzh2nix/repos", + "events_url": "https://api.github.com/users/lzh2nix/events{/privacy}", + "received_events_url": "https://api.github.com/users/lzh2nix/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/lzh2nix/nand2tetris", + "description": "course implement of nand2tetris", + "fork": false, + "url": "https://api.github.com/repos/lzh2nix/nand2tetris", + "forks_url": "https://api.github.com/repos/lzh2nix/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/lzh2nix/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/lzh2nix/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/lzh2nix/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/lzh2nix/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/lzh2nix/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/lzh2nix/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/lzh2nix/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/lzh2nix/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/lzh2nix/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/lzh2nix/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/lzh2nix/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/lzh2nix/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/lzh2nix/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/lzh2nix/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/lzh2nix/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/lzh2nix/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/lzh2nix/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/lzh2nix/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/lzh2nix/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/lzh2nix/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/lzh2nix/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/lzh2nix/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/lzh2nix/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/lzh2nix/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/lzh2nix/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/lzh2nix/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/lzh2nix/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/lzh2nix/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/lzh2nix/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/lzh2nix/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/lzh2nix/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/lzh2nix/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/lzh2nix/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/lzh2nix/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/lzh2nix/nand2tetris/deployments", + "created_at": "2016-02-27T00:09:34Z", + "updated_at": "2016-02-27T00:13:14Z", + "pushed_at": "2016-04-08T23:34:28Z", + "git_url": "git://github.com/lzh2nix/nand2tetris.git", + "ssh_url": "git@github.com:lzh2nix/nand2tetris.git", + "clone_url": "https://github.com/lzh2nix/nand2tetris.git", + "svn_url": "https://github.com/lzh2nix/nand2tetris", + "homepage": null, + "size": 523, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 43603208, + "name": "NandToTetris", + "full_name": "kxiao1415/NandToTetris", + "owner": { + "login": "kxiao1415", + "id": 6510045, + "avatar_url": "https://avatars.githubusercontent.com/u/6510045?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kxiao1415", + "html_url": "https://github.com/kxiao1415", + "followers_url": "https://api.github.com/users/kxiao1415/followers", + "following_url": "https://api.github.com/users/kxiao1415/following{/other_user}", + "gists_url": "https://api.github.com/users/kxiao1415/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kxiao1415/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kxiao1415/subscriptions", + "organizations_url": "https://api.github.com/users/kxiao1415/orgs", + "repos_url": "https://api.github.com/users/kxiao1415/repos", + "events_url": "https://api.github.com/users/kxiao1415/events{/privacy}", + "received_events_url": "https://api.github.com/users/kxiao1415/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kxiao1415/NandToTetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/kxiao1415/NandToTetris", + "forks_url": "https://api.github.com/repos/kxiao1415/NandToTetris/forks", + "keys_url": "https://api.github.com/repos/kxiao1415/NandToTetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kxiao1415/NandToTetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kxiao1415/NandToTetris/teams", + "hooks_url": "https://api.github.com/repos/kxiao1415/NandToTetris/hooks", + "issue_events_url": "https://api.github.com/repos/kxiao1415/NandToTetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kxiao1415/NandToTetris/events", + "assignees_url": "https://api.github.com/repos/kxiao1415/NandToTetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kxiao1415/NandToTetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kxiao1415/NandToTetris/tags", + "blobs_url": "https://api.github.com/repos/kxiao1415/NandToTetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kxiao1415/NandToTetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kxiao1415/NandToTetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kxiao1415/NandToTetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kxiao1415/NandToTetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kxiao1415/NandToTetris/languages", + "stargazers_url": "https://api.github.com/repos/kxiao1415/NandToTetris/stargazers", + "contributors_url": "https://api.github.com/repos/kxiao1415/NandToTetris/contributors", + "subscribers_url": "https://api.github.com/repos/kxiao1415/NandToTetris/subscribers", + "subscription_url": "https://api.github.com/repos/kxiao1415/NandToTetris/subscription", + "commits_url": "https://api.github.com/repos/kxiao1415/NandToTetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kxiao1415/NandToTetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kxiao1415/NandToTetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kxiao1415/NandToTetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kxiao1415/NandToTetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kxiao1415/NandToTetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kxiao1415/NandToTetris/merges", + "archive_url": "https://api.github.com/repos/kxiao1415/NandToTetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kxiao1415/NandToTetris/downloads", + "issues_url": "https://api.github.com/repos/kxiao1415/NandToTetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kxiao1415/NandToTetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kxiao1415/NandToTetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kxiao1415/NandToTetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kxiao1415/NandToTetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kxiao1415/NandToTetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kxiao1415/NandToTetris/deployments", + "created_at": "2015-10-03T15:15:54Z", + "updated_at": "2016-05-09T12:49:55Z", + "pushed_at": "2016-05-13T17:53:30Z", + "git_url": "git://github.com/kxiao1415/NandToTetris.git", + "ssh_url": "git@github.com:kxiao1415/NandToTetris.git", + "clone_url": "https://github.com/kxiao1415/NandToTetris.git", + "svn_url": "https://github.com/kxiao1415/NandToTetris", + "homepage": null, + "size": 532, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 50959927, + "name": "Nand2Tetris", + "full_name": "christopherdumas/Nand2Tetris", + "owner": { + "login": "christopherdumas", + "id": 1920151, + "avatar_url": "https://avatars.githubusercontent.com/u/1920151?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/christopherdumas", + "html_url": "https://github.com/christopherdumas", + "followers_url": "https://api.github.com/users/christopherdumas/followers", + "following_url": "https://api.github.com/users/christopherdumas/following{/other_user}", + "gists_url": "https://api.github.com/users/christopherdumas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/christopherdumas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/christopherdumas/subscriptions", + "organizations_url": "https://api.github.com/users/christopherdumas/orgs", + "repos_url": "https://api.github.com/users/christopherdumas/repos", + "events_url": "https://api.github.com/users/christopherdumas/events{/privacy}", + "received_events_url": "https://api.github.com/users/christopherdumas/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/christopherdumas/Nand2Tetris", + "description": "My work on \"The Elements of Computing Systems\" book (nand2tetris.org). All of my code that I had a choice on is in Racket.", + "fork": false, + "url": "https://api.github.com/repos/christopherdumas/Nand2Tetris", + "forks_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/christopherdumas/Nand2Tetris/deployments", + "created_at": "2016-02-02T23:38:43Z", + "updated_at": "2016-02-02T23:39:27Z", + "pushed_at": "2016-05-13T21:04:13Z", + "git_url": "git://github.com/christopherdumas/Nand2Tetris.git", + "ssh_url": "git@github.com:christopherdumas/Nand2Tetris.git", + "clone_url": "https://github.com/christopherdumas/Nand2Tetris.git", + "svn_url": "https://github.com/christopherdumas/Nand2Tetris", + "homepage": null, + "size": 609, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 58115372, + "name": "nand2tetris", + "full_name": "cath0d/nand2tetris", + "owner": { + "login": "cath0d", + "id": 12177451, + "avatar_url": "https://avatars.githubusercontent.com/u/12177451?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cath0d", + "html_url": "https://github.com/cath0d", + "followers_url": "https://api.github.com/users/cath0d/followers", + "following_url": "https://api.github.com/users/cath0d/following{/other_user}", + "gists_url": "https://api.github.com/users/cath0d/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cath0d/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cath0d/subscriptions", + "organizations_url": "https://api.github.com/users/cath0d/orgs", + "repos_url": "https://api.github.com/users/cath0d/repos", + "events_url": "https://api.github.com/users/cath0d/events{/privacy}", + "received_events_url": "https://api.github.com/users/cath0d/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cath0d/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/cath0d/nand2tetris", + "forks_url": "https://api.github.com/repos/cath0d/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/cath0d/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cath0d/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cath0d/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/cath0d/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/cath0d/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/cath0d/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/cath0d/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/cath0d/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/cath0d/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/cath0d/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cath0d/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cath0d/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cath0d/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cath0d/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cath0d/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/cath0d/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/cath0d/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/cath0d/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/cath0d/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/cath0d/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cath0d/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cath0d/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cath0d/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cath0d/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/cath0d/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cath0d/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/cath0d/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cath0d/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/cath0d/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/cath0d/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cath0d/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cath0d/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cath0d/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/cath0d/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/cath0d/nand2tetris/deployments", + "created_at": "2016-05-05T08:15:09Z", + "updated_at": "2016-05-05T08:30:02Z", + "pushed_at": "2016-05-09T22:29:40Z", + "git_url": "git://github.com/cath0d/nand2tetris.git", + "ssh_url": "git@github.com:cath0d/nand2tetris.git", + "clone_url": "https://github.com/cath0d/nand2tetris.git", + "svn_url": "https://github.com/cath0d/nand2tetris", + "homepage": null, + "size": 247, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 56733501, + "name": "nand2tetris", + "full_name": "HelloRambo/nand2tetris", + "owner": { + "login": "HelloRambo", + "id": 15681050, + "avatar_url": "https://avatars.githubusercontent.com/u/15681050?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/HelloRambo", + "html_url": "https://github.com/HelloRambo", + "followers_url": "https://api.github.com/users/HelloRambo/followers", + "following_url": "https://api.github.com/users/HelloRambo/following{/other_user}", + "gists_url": "https://api.github.com/users/HelloRambo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/HelloRambo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/HelloRambo/subscriptions", + "organizations_url": "https://api.github.com/users/HelloRambo/orgs", + "repos_url": "https://api.github.com/users/HelloRambo/repos", + "events_url": "https://api.github.com/users/HelloRambo/events{/privacy}", + "received_events_url": "https://api.github.com/users/HelloRambo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/HelloRambo/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/HelloRambo/nand2tetris", + "forks_url": "https://api.github.com/repos/HelloRambo/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/HelloRambo/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/HelloRambo/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/HelloRambo/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/HelloRambo/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/HelloRambo/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/HelloRambo/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/HelloRambo/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/HelloRambo/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/HelloRambo/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/HelloRambo/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/HelloRambo/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/HelloRambo/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/HelloRambo/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/HelloRambo/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/HelloRambo/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/HelloRambo/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/HelloRambo/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/HelloRambo/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/HelloRambo/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/HelloRambo/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/HelloRambo/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/HelloRambo/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/HelloRambo/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/HelloRambo/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/HelloRambo/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/HelloRambo/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/HelloRambo/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/HelloRambo/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/HelloRambo/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/HelloRambo/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/HelloRambo/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/HelloRambo/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/HelloRambo/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/HelloRambo/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/HelloRambo/nand2tetris/deployments", + "created_at": "2016-04-21T01:40:43Z", + "updated_at": "2016-04-21T01:43:18Z", + "pushed_at": "2016-05-05T13:42:33Z", + "git_url": "git://github.com/HelloRambo/nand2tetris.git", + "ssh_url": "git@github.com:HelloRambo/nand2tetris.git", + "clone_url": "https://github.com/HelloRambo/nand2tetris.git", + "svn_url": "https://github.com/HelloRambo/nand2tetris", + "homepage": null, + "size": 168, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 59108481, + "name": "nand2tetris", + "full_name": "kielthecoder/nand2tetris", + "owner": { + "login": "kielthecoder", + "id": 3535809, + "avatar_url": "https://avatars.githubusercontent.com/u/3535809?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kielthecoder", + "html_url": "https://github.com/kielthecoder", + "followers_url": "https://api.github.com/users/kielthecoder/followers", + "following_url": "https://api.github.com/users/kielthecoder/following{/other_user}", + "gists_url": "https://api.github.com/users/kielthecoder/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kielthecoder/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kielthecoder/subscriptions", + "organizations_url": "https://api.github.com/users/kielthecoder/orgs", + "repos_url": "https://api.github.com/users/kielthecoder/repos", + "events_url": "https://api.github.com/users/kielthecoder/events{/privacy}", + "received_events_url": "https://api.github.com/users/kielthecoder/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/kielthecoder/nand2tetris", + "description": "Coursework from The Elements of Computing Systems", + "fork": false, + "url": "https://api.github.com/repos/kielthecoder/nand2tetris", + "forks_url": "https://api.github.com/repos/kielthecoder/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/kielthecoder/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/kielthecoder/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/kielthecoder/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/kielthecoder/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/kielthecoder/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/kielthecoder/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/kielthecoder/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/kielthecoder/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/kielthecoder/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/kielthecoder/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/kielthecoder/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/kielthecoder/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/kielthecoder/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/kielthecoder/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/kielthecoder/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/kielthecoder/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/kielthecoder/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/kielthecoder/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/kielthecoder/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/kielthecoder/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/kielthecoder/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/kielthecoder/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/kielthecoder/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/kielthecoder/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/kielthecoder/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/kielthecoder/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/kielthecoder/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/kielthecoder/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/kielthecoder/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/kielthecoder/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/kielthecoder/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/kielthecoder/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/kielthecoder/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/kielthecoder/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/kielthecoder/nand2tetris/deployments", + "created_at": "2016-05-18T11:12:53Z", + "updated_at": "2016-05-18T11:39:10Z", + "pushed_at": "2016-05-18T20:22:36Z", + "git_url": "git://github.com/kielthecoder/nand2tetris.git", + "ssh_url": "git@github.com:kielthecoder/nand2tetris.git", + "clone_url": "https://github.com/kielthecoder/nand2tetris.git", + "svn_url": "https://github.com/kielthecoder/nand2tetris", + "homepage": null, + "size": 44, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 60982423, + "name": "nand2tetris", + "full_name": "simmonmt/nand2tetris", + "owner": { + "login": "simmonmt", + "id": 1419588, + "avatar_url": "https://avatars.githubusercontent.com/u/1419588?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/simmonmt", + "html_url": "https://github.com/simmonmt", + "followers_url": "https://api.github.com/users/simmonmt/followers", + "following_url": "https://api.github.com/users/simmonmt/following{/other_user}", + "gists_url": "https://api.github.com/users/simmonmt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/simmonmt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/simmonmt/subscriptions", + "organizations_url": "https://api.github.com/users/simmonmt/orgs", + "repos_url": "https://api.github.com/users/simmonmt/repos", + "events_url": "https://api.github.com/users/simmonmt/events{/privacy}", + "received_events_url": "https://api.github.com/users/simmonmt/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/simmonmt/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/simmonmt/nand2tetris", + "forks_url": "https://api.github.com/repos/simmonmt/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/simmonmt/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/simmonmt/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/simmonmt/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/simmonmt/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/simmonmt/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/simmonmt/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/simmonmt/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/simmonmt/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/simmonmt/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/simmonmt/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/simmonmt/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/simmonmt/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/simmonmt/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/simmonmt/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/simmonmt/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/simmonmt/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/simmonmt/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/simmonmt/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/simmonmt/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/simmonmt/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/simmonmt/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/simmonmt/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/simmonmt/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/simmonmt/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/simmonmt/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/simmonmt/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/simmonmt/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/simmonmt/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/simmonmt/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/simmonmt/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/simmonmt/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/simmonmt/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/simmonmt/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/simmonmt/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/simmonmt/nand2tetris/deployments", + "created_at": "2016-06-12T18:21:10Z", + "updated_at": "2016-06-12T18:33:21Z", + "pushed_at": "2016-06-12T18:33:19Z", + "git_url": "git://github.com/simmonmt/nand2tetris.git", + "ssh_url": "git@github.com:simmonmt/nand2tetris.git", + "clone_url": "https://github.com/simmonmt/nand2tetris.git", + "svn_url": "https://github.com/simmonmt/nand2tetris", + "homepage": null, + "size": 105, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 56410675, + "name": "nand2tetris", + "full_name": "grantbot/nand2tetris", + "owner": { + "login": "grantbot", + "id": 4099071, + "avatar_url": "https://avatars.githubusercontent.com/u/4099071?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/grantbot", + "html_url": "https://github.com/grantbot", + "followers_url": "https://api.github.com/users/grantbot/followers", + "following_url": "https://api.github.com/users/grantbot/following{/other_user}", + "gists_url": "https://api.github.com/users/grantbot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/grantbot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/grantbot/subscriptions", + "organizations_url": "https://api.github.com/users/grantbot/orgs", + "repos_url": "https://api.github.com/users/grantbot/repos", + "events_url": "https://api.github.com/users/grantbot/events{/privacy}", + "received_events_url": "https://api.github.com/users/grantbot/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/grantbot/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/grantbot/nand2tetris", + "forks_url": "https://api.github.com/repos/grantbot/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/grantbot/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/grantbot/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/grantbot/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/grantbot/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/grantbot/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/grantbot/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/grantbot/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/grantbot/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/grantbot/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/grantbot/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/grantbot/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/grantbot/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/grantbot/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/grantbot/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/grantbot/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/grantbot/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/grantbot/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/grantbot/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/grantbot/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/grantbot/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/grantbot/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/grantbot/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/grantbot/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/grantbot/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/grantbot/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/grantbot/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/grantbot/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/grantbot/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/grantbot/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/grantbot/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/grantbot/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/grantbot/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/grantbot/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/grantbot/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/grantbot/nand2tetris/deployments", + "created_at": "2016-04-16T23:44:42Z", + "updated_at": "2016-04-16T23:45:05Z", + "pushed_at": "2016-06-13T15:27:43Z", + "git_url": "git://github.com/grantbot/nand2tetris.git", + "ssh_url": "git@github.com:grantbot/nand2tetris.git", + "clone_url": "https://github.com/grantbot/nand2tetris.git", + "svn_url": "https://github.com/grantbot/nand2tetris", + "homepage": null, + "size": 514, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 58231737, + "name": "Nand2Tetris", + "full_name": "cthach/Nand2Tetris", + "owner": { + "login": "cthach", + "id": 12981621, + "avatar_url": "https://avatars.githubusercontent.com/u/12981621?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cthach", + "html_url": "https://github.com/cthach", + "followers_url": "https://api.github.com/users/cthach/followers", + "following_url": "https://api.github.com/users/cthach/following{/other_user}", + "gists_url": "https://api.github.com/users/cthach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cthach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cthach/subscriptions", + "organizations_url": "https://api.github.com/users/cthach/orgs", + "repos_url": "https://api.github.com/users/cthach/repos", + "events_url": "https://api.github.com/users/cthach/events{/privacy}", + "received_events_url": "https://api.github.com/users/cthach/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/cthach/Nand2Tetris", + "description": "A repository of projects assigned in the Nand to Tetris course by Professor Shimon Schocken and Professor Noam Nisan of the Hebrew University of Jerusalem", + "fork": false, + "url": "https://api.github.com/repos/cthach/Nand2Tetris", + "forks_url": "https://api.github.com/repos/cthach/Nand2Tetris/forks", + "keys_url": "https://api.github.com/repos/cthach/Nand2Tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/cthach/Nand2Tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/cthach/Nand2Tetris/teams", + "hooks_url": "https://api.github.com/repos/cthach/Nand2Tetris/hooks", + "issue_events_url": "https://api.github.com/repos/cthach/Nand2Tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/cthach/Nand2Tetris/events", + "assignees_url": "https://api.github.com/repos/cthach/Nand2Tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/cthach/Nand2Tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/cthach/Nand2Tetris/tags", + "blobs_url": "https://api.github.com/repos/cthach/Nand2Tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/cthach/Nand2Tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/cthach/Nand2Tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/cthach/Nand2Tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/cthach/Nand2Tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/cthach/Nand2Tetris/languages", + "stargazers_url": "https://api.github.com/repos/cthach/Nand2Tetris/stargazers", + "contributors_url": "https://api.github.com/repos/cthach/Nand2Tetris/contributors", + "subscribers_url": "https://api.github.com/repos/cthach/Nand2Tetris/subscribers", + "subscription_url": "https://api.github.com/repos/cthach/Nand2Tetris/subscription", + "commits_url": "https://api.github.com/repos/cthach/Nand2Tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/cthach/Nand2Tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/cthach/Nand2Tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/cthach/Nand2Tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/cthach/Nand2Tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/cthach/Nand2Tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/cthach/Nand2Tetris/merges", + "archive_url": "https://api.github.com/repos/cthach/Nand2Tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/cthach/Nand2Tetris/downloads", + "issues_url": "https://api.github.com/repos/cthach/Nand2Tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/cthach/Nand2Tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/cthach/Nand2Tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/cthach/Nand2Tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/cthach/Nand2Tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/cthach/Nand2Tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/cthach/Nand2Tetris/deployments", + "created_at": "2016-05-06T19:58:50Z", + "updated_at": "2016-06-05T03:16:48Z", + "pushed_at": "2016-06-05T03:19:52Z", + "git_url": "git://github.com/cthach/Nand2Tetris.git", + "ssh_url": "git@github.com:cthach/Nand2Tetris.git", + "clone_url": "https://github.com/cthach/Nand2Tetris.git", + "svn_url": "https://github.com/cthach/Nand2Tetris", + "homepage": "http://christopherthach.com", + "size": 135, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 57235969, + "name": "nand2tetris", + "full_name": "takosuke/nand2tetris", + "owner": { + "login": "takosuke", + "id": 640028, + "avatar_url": "https://avatars.githubusercontent.com/u/640028?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/takosuke", + "html_url": "https://github.com/takosuke", + "followers_url": "https://api.github.com/users/takosuke/followers", + "following_url": "https://api.github.com/users/takosuke/following{/other_user}", + "gists_url": "https://api.github.com/users/takosuke/gists{/gist_id}", + "starred_url": "https://api.github.com/users/takosuke/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/takosuke/subscriptions", + "organizations_url": "https://api.github.com/users/takosuke/orgs", + "repos_url": "https://api.github.com/users/takosuke/repos", + "events_url": "https://api.github.com/users/takosuke/events{/privacy}", + "received_events_url": "https://api.github.com/users/takosuke/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/takosuke/nand2tetris", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/takosuke/nand2tetris", + "forks_url": "https://api.github.com/repos/takosuke/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/takosuke/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/takosuke/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/takosuke/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/takosuke/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/takosuke/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/takosuke/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/takosuke/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/takosuke/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/takosuke/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/takosuke/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/takosuke/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/takosuke/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/takosuke/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/takosuke/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/takosuke/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/takosuke/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/takosuke/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/takosuke/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/takosuke/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/takosuke/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/takosuke/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/takosuke/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/takosuke/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/takosuke/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/takosuke/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/takosuke/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/takosuke/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/takosuke/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/takosuke/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/takosuke/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/takosuke/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/takosuke/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/takosuke/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/takosuke/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/takosuke/nand2tetris/deployments", + "created_at": "2016-04-27T18:19:59Z", + "updated_at": "2016-04-27T18:32:50Z", + "pushed_at": "2016-06-17T15:13:27Z", + "git_url": "git://github.com/takosuke/nand2tetris.git", + "ssh_url": "git@github.com:takosuke/nand2tetris.git", + "clone_url": "https://github.com/takosuke/nand2tetris.git", + "svn_url": "https://github.com/takosuke/nand2tetris", + "homepage": null, + "size": 182, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 53214713, + "name": "nand2tetris", + "full_name": "geekygirl76/nand2tetris", + "owner": { + "login": "geekygirl76", + "id": 6955218, + "avatar_url": "https://avatars.githubusercontent.com/u/6955218?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/geekygirl76", + "html_url": "https://github.com/geekygirl76", + "followers_url": "https://api.github.com/users/geekygirl76/followers", + "following_url": "https://api.github.com/users/geekygirl76/following{/other_user}", + "gists_url": "https://api.github.com/users/geekygirl76/gists{/gist_id}", + "starred_url": "https://api.github.com/users/geekygirl76/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/geekygirl76/subscriptions", + "organizations_url": "https://api.github.com/users/geekygirl76/orgs", + "repos_url": "https://api.github.com/users/geekygirl76/repos", + "events_url": "https://api.github.com/users/geekygirl76/events{/privacy}", + "received_events_url": "https://api.github.com/users/geekygirl76/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/geekygirl76/nand2tetris", + "description": "build a modern computer from ground up, including hardware, software, complier, OS, etc", + "fork": false, + "url": "https://api.github.com/repos/geekygirl76/nand2tetris", + "forks_url": "https://api.github.com/repos/geekygirl76/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/geekygirl76/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/geekygirl76/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/geekygirl76/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/geekygirl76/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/geekygirl76/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/geekygirl76/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/geekygirl76/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/geekygirl76/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/geekygirl76/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/geekygirl76/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/geekygirl76/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/geekygirl76/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/geekygirl76/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/geekygirl76/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/geekygirl76/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/geekygirl76/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/geekygirl76/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/geekygirl76/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/geekygirl76/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/geekygirl76/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/geekygirl76/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/geekygirl76/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/geekygirl76/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/geekygirl76/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/geekygirl76/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/geekygirl76/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/geekygirl76/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/geekygirl76/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/geekygirl76/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/geekygirl76/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/geekygirl76/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/geekygirl76/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/geekygirl76/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/geekygirl76/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/geekygirl76/nand2tetris/deployments", + "created_at": "2016-03-05T17:49:20Z", + "updated_at": "2016-06-19T17:02:28Z", + "pushed_at": "2016-06-19T17:02:26Z", + "git_url": "git://github.com/geekygirl76/nand2tetris.git", + "ssh_url": "git@github.com:geekygirl76/nand2tetris.git", + "clone_url": "https://github.com/geekygirl76/nand2tetris.git", + "svn_url": "https://github.com/geekygirl76/nand2tetris", + "homepage": null, + "size": 508, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 50663738, + "name": "nand2tetris", + "full_name": "benkoo/nand2tetris", + "owner": { + "login": "benkoo", + "id": 16219073, + "avatar_url": "https://avatars.githubusercontent.com/u/16219073?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/benkoo", + "html_url": "https://github.com/benkoo", + "followers_url": "https://api.github.com/users/benkoo/followers", + "following_url": "https://api.github.com/users/benkoo/following{/other_user}", + "gists_url": "https://api.github.com/users/benkoo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/benkoo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/benkoo/subscriptions", + "organizations_url": "https://api.github.com/users/benkoo/orgs", + "repos_url": "https://api.github.com/users/benkoo/repos", + "events_url": "https://api.github.com/users/benkoo/events{/privacy}", + "received_events_url": "https://api.github.com/users/benkoo/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/benkoo/nand2tetris", + "description": "Personal Exercise for the course: Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/benkoo/nand2tetris", + "forks_url": "https://api.github.com/repos/benkoo/nand2tetris/forks", + "keys_url": "https://api.github.com/repos/benkoo/nand2tetris/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/benkoo/nand2tetris/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/benkoo/nand2tetris/teams", + "hooks_url": "https://api.github.com/repos/benkoo/nand2tetris/hooks", + "issue_events_url": "https://api.github.com/repos/benkoo/nand2tetris/issues/events{/number}", + "events_url": "https://api.github.com/repos/benkoo/nand2tetris/events", + "assignees_url": "https://api.github.com/repos/benkoo/nand2tetris/assignees{/user}", + "branches_url": "https://api.github.com/repos/benkoo/nand2tetris/branches{/branch}", + "tags_url": "https://api.github.com/repos/benkoo/nand2tetris/tags", + "blobs_url": "https://api.github.com/repos/benkoo/nand2tetris/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/benkoo/nand2tetris/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/benkoo/nand2tetris/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/benkoo/nand2tetris/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/benkoo/nand2tetris/statuses/{sha}", + "languages_url": "https://api.github.com/repos/benkoo/nand2tetris/languages", + "stargazers_url": "https://api.github.com/repos/benkoo/nand2tetris/stargazers", + "contributors_url": "https://api.github.com/repos/benkoo/nand2tetris/contributors", + "subscribers_url": "https://api.github.com/repos/benkoo/nand2tetris/subscribers", + "subscription_url": "https://api.github.com/repos/benkoo/nand2tetris/subscription", + "commits_url": "https://api.github.com/repos/benkoo/nand2tetris/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/benkoo/nand2tetris/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/benkoo/nand2tetris/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/benkoo/nand2tetris/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/benkoo/nand2tetris/contents/{+path}", + "compare_url": "https://api.github.com/repos/benkoo/nand2tetris/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/benkoo/nand2tetris/merges", + "archive_url": "https://api.github.com/repos/benkoo/nand2tetris/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/benkoo/nand2tetris/downloads", + "issues_url": "https://api.github.com/repos/benkoo/nand2tetris/issues{/number}", + "pulls_url": "https://api.github.com/repos/benkoo/nand2tetris/pulls{/number}", + "milestones_url": "https://api.github.com/repos/benkoo/nand2tetris/milestones{/number}", + "notifications_url": "https://api.github.com/repos/benkoo/nand2tetris/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/benkoo/nand2tetris/labels{/name}", + "releases_url": "https://api.github.com/repos/benkoo/nand2tetris/releases{/id}", + "deployments_url": "https://api.github.com/repos/benkoo/nand2tetris/deployments", + "created_at": "2016-01-29T13:23:30Z", + "updated_at": "2016-05-12T03:47:37Z", + "pushed_at": "2016-06-21T13:19:48Z", + "git_url": "git://github.com/benkoo/nand2tetris.git", + "ssh_url": "git@github.com:benkoo/nand2tetris.git", + "clone_url": "https://github.com/benkoo/nand2tetris.git", + "svn_url": "https://github.com/benkoo/nand2tetris", + "homepage": null, + "size": 56262, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 3.212811 + }, + { + "id": 16621283, + "name": "nand2tetris-project6", + "full_name": "davidsmithmke/nand2tetris-project6", + "owner": { + "login": "davidsmithmke", + "id": 3876502, + "avatar_url": "https://avatars.githubusercontent.com/u/3876502?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/davidsmithmke", + "html_url": "https://github.com/davidsmithmke", + "followers_url": "https://api.github.com/users/davidsmithmke/followers", + "following_url": "https://api.github.com/users/davidsmithmke/following{/other_user}", + "gists_url": "https://api.github.com/users/davidsmithmke/gists{/gist_id}", + "starred_url": "https://api.github.com/users/davidsmithmke/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/davidsmithmke/subscriptions", + "organizations_url": "https://api.github.com/users/davidsmithmke/orgs", + "repos_url": "https://api.github.com/users/davidsmithmke/repos", + "events_url": "https://api.github.com/users/davidsmithmke/events{/privacy}", + "received_events_url": "https://api.github.com/users/davidsmithmke/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/davidsmithmke/nand2tetris-project6", + "description": "Project 6 of Nand2Tetris", + "fork": false, + "url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6", + "forks_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/forks", + "keys_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/teams", + "hooks_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/hooks", + "issue_events_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/issues/events{/number}", + "events_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/events", + "assignees_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/assignees{/user}", + "branches_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/branches{/branch}", + "tags_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/tags", + "blobs_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/statuses/{sha}", + "languages_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/languages", + "stargazers_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/stargazers", + "contributors_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/contributors", + "subscribers_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/subscribers", + "subscription_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/subscription", + "commits_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/contents/{+path}", + "compare_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/merges", + "archive_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/downloads", + "issues_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/issues{/number}", + "pulls_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/pulls{/number}", + "milestones_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/milestones{/number}", + "notifications_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/labels{/name}", + "releases_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/releases{/id}", + "deployments_url": "https://api.github.com/repos/davidsmithmke/nand2tetris-project6/deployments", + "created_at": "2014-02-07T17:02:17Z", + "updated_at": "2014-02-09T01:28:24Z", + "pushed_at": "2014-02-08T21:25:45Z", + "git_url": "git://github.com/davidsmithmke/nand2tetris-project6.git", + "ssh_url": "git@github.com:davidsmithmke/nand2tetris-project6.git", + "clone_url": "https://github.com/davidsmithmke/nand2tetris-project6.git", + "svn_url": "https://github.com/davidsmithmke/nand2tetris-project6", + "homepage": "", + "size": 168, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 2.8274386 + }, + { + "id": 54303167, + "name": "CourseraNandToTetris1", + "full_name": "Anveshan3175/CourseraNandToTetris1", + "owner": { + "login": "Anveshan3175", + "id": 16539528, + "avatar_url": "https://avatars.githubusercontent.com/u/16539528?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Anveshan3175", + "html_url": "https://github.com/Anveshan3175", + "followers_url": "https://api.github.com/users/Anveshan3175/followers", + "following_url": "https://api.github.com/users/Anveshan3175/following{/other_user}", + "gists_url": "https://api.github.com/users/Anveshan3175/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anveshan3175/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anveshan3175/subscriptions", + "organizations_url": "https://api.github.com/users/Anveshan3175/orgs", + "repos_url": "https://api.github.com/users/Anveshan3175/repos", + "events_url": "https://api.github.com/users/Anveshan3175/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anveshan3175/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/Anveshan3175/CourseraNandToTetris1", + "description": "How to build a computer", + "fork": false, + "url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1", + "forks_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/forks", + "keys_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/teams", + "hooks_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/hooks", + "issue_events_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/issues/events{/number}", + "events_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/events", + "assignees_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/assignees{/user}", + "branches_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/branches{/branch}", + "tags_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/tags", + "blobs_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/statuses/{sha}", + "languages_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/languages", + "stargazers_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/stargazers", + "contributors_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/contributors", + "subscribers_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/subscribers", + "subscription_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/subscription", + "commits_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/contents/{+path}", + "compare_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/merges", + "archive_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/downloads", + "issues_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/issues{/number}", + "pulls_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/pulls{/number}", + "milestones_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/milestones{/number}", + "notifications_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/labels{/name}", + "releases_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/releases{/id}", + "deployments_url": "https://api.github.com/repos/Anveshan3175/CourseraNandToTetris1/deployments", + "created_at": "2016-03-20T05:59:39Z", + "updated_at": "2016-03-20T14:03:42Z", + "pushed_at": "2016-03-29T02:49:34Z", + "git_url": "git://github.com/Anveshan3175/CourseraNandToTetris1.git", + "ssh_url": "git@github.com:Anveshan3175/CourseraNandToTetris1.git", + "clone_url": "https://github.com/Anveshan3175/CourseraNandToTetris1.git", + "svn_url": "https://github.com/Anveshan3175/CourseraNandToTetris1", + "homepage": null, + "size": 159, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 2.8274386 + }, + { + "id": 26594368, + "name": "nand2tetrisHDL-tutorial", + "full_name": "MikeBBarreiro/nand2tetrisHDL-tutorial", + "owner": { + "login": "MikeBBarreiro", + "id": 7136454, + "avatar_url": "https://avatars.githubusercontent.com/u/7136454?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MikeBBarreiro", + "html_url": "https://github.com/MikeBBarreiro", + "followers_url": "https://api.github.com/users/MikeBBarreiro/followers", + "following_url": "https://api.github.com/users/MikeBBarreiro/following{/other_user}", + "gists_url": "https://api.github.com/users/MikeBBarreiro/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MikeBBarreiro/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MikeBBarreiro/subscriptions", + "organizations_url": "https://api.github.com/users/MikeBBarreiro/orgs", + "repos_url": "https://api.github.com/users/MikeBBarreiro/repos", + "events_url": "https://api.github.com/users/MikeBBarreiro/events{/privacy}", + "received_events_url": "https://api.github.com/users/MikeBBarreiro/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/MikeBBarreiro/nand2tetrisHDL-tutorial", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial", + "forks_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/forks", + "keys_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/teams", + "hooks_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/hooks", + "issue_events_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/issues/events{/number}", + "events_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/events", + "assignees_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/assignees{/user}", + "branches_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/branches{/branch}", + "tags_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/tags", + "blobs_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/statuses/{sha}", + "languages_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/languages", + "stargazers_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/stargazers", + "contributors_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/contributors", + "subscribers_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/subscribers", + "subscription_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/subscription", + "commits_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/contents/{+path}", + "compare_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/merges", + "archive_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/downloads", + "issues_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/issues{/number}", + "pulls_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/pulls{/number}", + "milestones_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/milestones{/number}", + "notifications_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/labels{/name}", + "releases_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/releases{/id}", + "deployments_url": "https://api.github.com/repos/MikeBBarreiro/nand2tetrisHDL-tutorial/deployments", + "created_at": "2014-11-13T15:33:54Z", + "updated_at": "2014-11-13T15:34:39Z", + "pushed_at": "2014-11-13T15:34:38Z", + "git_url": "git://github.com/MikeBBarreiro/nand2tetrisHDL-tutorial.git", + "ssh_url": "git@github.com:MikeBBarreiro/nand2tetrisHDL-tutorial.git", + "clone_url": "https://github.com/MikeBBarreiro/nand2tetrisHDL-tutorial.git", + "svn_url": "https://github.com/MikeBBarreiro/nand2tetrisHDL-tutorial", + "homepage": null, + "size": 616, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 2.8248417 + }, + { + "id": 37904479, + "name": "From-Nand-to-Tetris-Part-I", + "full_name": "amrsekilly/From-Nand-to-Tetris-Part-I", + "owner": { + "login": "amrsekilly", + "id": 4142276, + "avatar_url": "https://avatars.githubusercontent.com/u/4142276?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/amrsekilly", + "html_url": "https://github.com/amrsekilly", + "followers_url": "https://api.github.com/users/amrsekilly/followers", + "following_url": "https://api.github.com/users/amrsekilly/following{/other_user}", + "gists_url": "https://api.github.com/users/amrsekilly/gists{/gist_id}", + "starred_url": "https://api.github.com/users/amrsekilly/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/amrsekilly/subscriptions", + "organizations_url": "https://api.github.com/users/amrsekilly/orgs", + "repos_url": "https://api.github.com/users/amrsekilly/repos", + "events_url": "https://api.github.com/users/amrsekilly/events{/privacy}", + "received_events_url": "https://api.github.com/users/amrsekilly/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/amrsekilly/From-Nand-to-Tetris-Part-I", + "description": "", + "fork": false, + "url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I", + "forks_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/forks", + "keys_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/teams", + "hooks_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/hooks", + "issue_events_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/issues/events{/number}", + "events_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/events", + "assignees_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/assignees{/user}", + "branches_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/branches{/branch}", + "tags_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/tags", + "blobs_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/statuses/{sha}", + "languages_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/languages", + "stargazers_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/stargazers", + "contributors_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/contributors", + "subscribers_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/subscribers", + "subscription_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/subscription", + "commits_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/contents/{+path}", + "compare_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/merges", + "archive_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/downloads", + "issues_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/issues{/number}", + "pulls_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/pulls{/number}", + "milestones_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/milestones{/number}", + "notifications_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/labels{/name}", + "releases_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/releases{/id}", + "deployments_url": "https://api.github.com/repos/amrsekilly/From-Nand-to-Tetris-Part-I/deployments", + "created_at": "2015-06-23T07:40:36Z", + "updated_at": "2015-06-23T07:42:02Z", + "pushed_at": "2015-06-23T07:42:01Z", + "git_url": "git://github.com/amrsekilly/From-Nand-to-Tetris-Part-I.git", + "ssh_url": "git@github.com:amrsekilly/From-Nand-to-Tetris-Part-I.git", + "clone_url": "https://github.com/amrsekilly/From-Nand-to-Tetris-Part-I.git", + "svn_url": "https://github.com/amrsekilly/From-Nand-to-Tetris-Part-I", + "homepage": null, + "size": 1164, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Assembly", + "has_issues": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master", + "score": 2.4212928 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:22 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "354580", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "25", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "link": "; rel=\"first\", ; rel=\"prev\"", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "bd82876e9bf04990f289ba22f246ee9b", + "x-github-request-id": "AE1408AB:F64F:5FC3B3B:5769F4B9" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/code?q=addClass+in:file+language:js+repo:jquery%2Fjquery&type=all&sort=updated&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 8, + "incomplete_results": false, + "items": [ + { + "name": "classes.js", + "path": "src/attributes/classes.js", + "sha": "2e8a8caba3568840e71eeb6fee802d091e0dc8b9", + "url": "https://api.github.com/repositories/167174/contents/src/attributes/classes.js?ref=305f193aa57014dc7d8fa0739a3fefd47166cd44", + "git_url": "https://api.github.com/repositories/167174/git/blobs/2e8a8caba3568840e71eeb6fee802d091e0dc8b9", + "html_url": "https://github.com/jquery/jquery/blob/305f193aa57014dc7d8fa0739a3fefd47166cd44/src/attributes/classes.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.5231211 + }, + { + "name": "attributes.js", + "path": "test/unit/attributes.js", + "sha": "771d31cb870040d060cca4c1e44502fc4169a8b3", + "url": "https://api.github.com/repositories/167174/contents/test/unit/attributes.js?ref=58c6ca9822afa42d3b40cca8edb0abe90a2bcb34", + "git_url": "https://api.github.com/repositories/167174/git/blobs/771d31cb870040d060cca4c1e44502fc4169a8b3", + "html_url": "https://github.com/jquery/jquery/blob/58c6ca9822afa42d3b40cca8edb0abe90a2bcb34/test/unit/attributes.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.34103322 + }, + { + "name": "effects.js", + "path": "test/unit/effects.js", + "sha": "eafe4b116eea4fd65de1621101d45fef914f05a2", + "url": "https://api.github.com/repositories/167174/contents/test/unit/effects.js?ref=58c6ca9822afa42d3b40cca8edb0abe90a2bcb34", + "git_url": "https://api.github.com/repositories/167174/git/blobs/eafe4b116eea4fd65de1621101d45fef914f05a2", + "html_url": "https://github.com/jquery/jquery/blob/58c6ca9822afa42d3b40cca8edb0abe90a2bcb34/test/unit/effects.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.19397852 + }, + { + "name": "basic.js", + "path": "test/unit/basic.js", + "sha": "5a2f5abc2b3293b7cd4e5418ec4c57cf21538597", + "url": "https://api.github.com/repositories/167174/contents/test/unit/basic.js?ref=055cb7534e2dcf7ee8ad145be83cb2d74b5331c7", + "git_url": "https://api.github.com/repositories/167174/git/blobs/5a2f5abc2b3293b7cd4e5418ec4c57cf21538597", + "html_url": "https://github.com/jquery/jquery/blob/055cb7534e2dcf7ee8ad145be83cb2d74b5331c7/test/unit/basic.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.16376281 + }, + { + "name": "qunit.js", + "path": "external/qunit/qunit.js", + "sha": "904943f088edfd3ecb0e7cf2cc70bc4a5876c3da", + "url": "https://api.github.com/repositories/167174/contents/external/qunit/qunit.js?ref=055cb7534e2dcf7ee8ad145be83cb2d74b5331c7", + "git_url": "https://api.github.com/repositories/167174/git/blobs/904943f088edfd3ecb0e7cf2cc70bc4a5876c3da", + "html_url": "https://github.com/jquery/jquery/blob/055cb7534e2dcf7ee8ad145be83cb2d74b5331c7/external/qunit/qunit.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.14796099 + }, + { + "name": "manipulation.js", + "path": "test/unit/manipulation.js", + "sha": "b8fdb8e79c583763243a7e8d8cf4ffac0801cc67", + "url": "https://api.github.com/repositories/167174/contents/test/unit/manipulation.js?ref=58c6ca9822afa42d3b40cca8edb0abe90a2bcb34", + "git_url": "https://api.github.com/repositories/167174/git/blobs/b8fdb8e79c583763243a7e8d8cf4ffac0801cc67", + "html_url": "https://github.com/jquery/jquery/blob/58c6ca9822afa42d3b40cca8edb0abe90a2bcb34/test/unit/manipulation.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.10462422 + }, + { + "name": "jquery-1.9.1.js", + "path": "test/data/jquery-1.9.1.js", + "sha": "80c97a226a9833674b06d341ca9f8e93389e9d33", + "url": "https://api.github.com/repositories/167174/contents/test/data/jquery-1.9.1.js?ref=055cb7534e2dcf7ee8ad145be83cb2d74b5331c7", + "git_url": "https://api.github.com/repositories/167174/git/blobs/80c97a226a9833674b06d341ca9f8e93389e9d33", + "html_url": "https://github.com/jquery/jquery/blob/055cb7534e2dcf7ee8ad145be83cb2d74b5331c7/test/data/jquery-1.9.1.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.05848672 + }, + { + "name": "css.js", + "path": "test/unit/css.js", + "sha": "ad8b808ffe0501f8de52ad955e6cb4809f5ac56d", + "url": "https://api.github.com/repositories/167174/contents/test/unit/css.js?ref=58c6ca9822afa42d3b40cca8edb0abe90a2bcb34", + "git_url": "https://api.github.com/repositories/167174/git/blobs/ad8b808ffe0501f8de52ad955e6cb4809f5ac56d", + "html_url": "https://github.com/jquery/jquery/blob/58c6ca9822afa42d3b40cca8edb0abe90a2bcb34/test/unit/css.js", + "repository": { + "id": 167174, + "name": "jquery", + "full_name": "jquery/jquery", + "owner": { + "login": "jquery", + "id": 70142, + "avatar_url": "https://avatars.githubusercontent.com/u/70142?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jquery", + "html_url": "https://github.com/jquery", + "followers_url": "https://api.github.com/users/jquery/followers", + "following_url": "https://api.github.com/users/jquery/following{/other_user}", + "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", + "organizations_url": "https://api.github.com/users/jquery/orgs", + "repos_url": "https://api.github.com/users/jquery/repos", + "events_url": "https://api.github.com/users/jquery/events{/privacy}", + "received_events_url": "https://api.github.com/users/jquery/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/jquery/jquery", + "description": "jQuery JavaScript Library", + "fork": false, + "url": "https://api.github.com/repos/jquery/jquery", + "forks_url": "https://api.github.com/repos/jquery/jquery/forks", + "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/jquery/jquery/teams", + "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", + "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", + "events_url": "https://api.github.com/repos/jquery/jquery/events", + "assignees_url": "https://api.github.com/repos/jquery/jquery/assignees{/user}", + "branches_url": "https://api.github.com/repos/jquery/jquery/branches{/branch}", + "tags_url": "https://api.github.com/repos/jquery/jquery/tags", + "blobs_url": "https://api.github.com/repos/jquery/jquery/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/jquery/jquery/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/jquery/jquery/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/jquery/jquery/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/jquery/jquery/statuses/{sha}", + "languages_url": "https://api.github.com/repos/jquery/jquery/languages", + "stargazers_url": "https://api.github.com/repos/jquery/jquery/stargazers", + "contributors_url": "https://api.github.com/repos/jquery/jquery/contributors", + "subscribers_url": "https://api.github.com/repos/jquery/jquery/subscribers", + "subscription_url": "https://api.github.com/repos/jquery/jquery/subscription", + "commits_url": "https://api.github.com/repos/jquery/jquery/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/jquery/jquery/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/jquery/jquery/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/jquery/jquery/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/jquery/jquery/contents/{+path}", + "compare_url": "https://api.github.com/repos/jquery/jquery/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/jquery/jquery/merges", + "archive_url": "https://api.github.com/repos/jquery/jquery/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/jquery/jquery/downloads", + "issues_url": "https://api.github.com/repos/jquery/jquery/issues{/number}", + "pulls_url": "https://api.github.com/repos/jquery/jquery/pulls{/number}", + "milestones_url": "https://api.github.com/repos/jquery/jquery/milestones{/number}", + "notifications_url": "https://api.github.com/repos/jquery/jquery/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/jquery/jquery/labels{/name}", + "releases_url": "https://api.github.com/repos/jquery/jquery/releases{/id}", + "deployments_url": "https://api.github.com/repos/jquery/jquery/deployments" + }, + "score": 0.05848672 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:23 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "34383", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "24", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "76d9828c7e4f1d910f7ba069e90ce976", + "x-github-request-id": "AE1408AB:F651:91B9F5F:5769F4BB" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/issues?q=windows+pip+label:bug+language:python+state:open+&sort=created&order=asc&type=all&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 161, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/sympy/sympy/issues/5259", + "repository_url": "https://api.github.com/repos/sympy/sympy", + "labels_url": "https://api.github.com/repos/sympy/sympy/issues/5259/labels{/name}", + "comments_url": "https://api.github.com/repos/sympy/sympy/issues/5259/comments", + "events_url": "https://api.github.com/repos/sympy/sympy/issues/5259/events", + "html_url": "https://github.com/sympy/sympy/issues/5259", + "id": 28950761, + "number": 5259, + "title": "List of dependencies", + "user": { + "login": "asmeurer", + "id": 71486, + "avatar_url": "https://avatars.githubusercontent.com/u/71486?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/asmeurer", + "html_url": "https://github.com/asmeurer", + "followers_url": "https://api.github.com/users/asmeurer/followers", + "following_url": "https://api.github.com/users/asmeurer/following{/other_user}", + "gists_url": "https://api.github.com/users/asmeurer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/asmeurer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/asmeurer/subscriptions", + "organizations_url": "https://api.github.com/users/asmeurer/orgs", + "repos_url": "https://api.github.com/users/asmeurer/repos", + "events_url": "https://api.github.com/users/asmeurer/events{/privacy}", + "received_events_url": "https://api.github.com/users/asmeurer/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/sympy/sympy/labels/bug", + "name": "bug", + "color": "ededed" + }, + { + "url": "https://api.github.com/repos/sympy/sympy/labels/Documentation", + "name": "Documentation", + "color": "c7def8" + }, + { + "url": "https://api.github.com/repos/sympy/sympy/labels/Easy%20to%20Fix", + "name": "Easy to Fix", + "color": "009800" + }, + { + "url": "https://api.github.com/repos/sympy/sympy/labels/imported", + "name": "imported", + "color": "ededed" + }, + { + "url": "https://api.github.com/repos/sympy/sympy/labels/valid", + "name": "valid", + "color": "d4c5f9" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "asmeurer", + "id": 71486, + "avatar_url": "https://avatars.githubusercontent.com/u/71486?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/asmeurer", + "html_url": "https://github.com/asmeurer", + "followers_url": "https://api.github.com/users/asmeurer/followers", + "following_url": "https://api.github.com/users/asmeurer/following{/other_user}", + "gists_url": "https://api.github.com/users/asmeurer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/asmeurer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/asmeurer/subscriptions", + "organizations_url": "https://api.github.com/users/asmeurer/orgs", + "repos_url": "https://api.github.com/users/asmeurer/repos", + "events_url": "https://api.github.com/users/asmeurer/events{/privacy}", + "received_events_url": "https://api.github.com/users/asmeurer/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 18, + "created_at": "2011-01-23T07:28:49Z", + "updated_at": "2015-12-23T16:27:21Z", + "closed_at": null, + "body": "```\r\nWe should include in the README, and probably in the docs somewhere too, a list of all the \"dependencies\" of SymPy. Now, obviously, SymPy's only dependency is Python, but there are several optional dependencies like IPython and gmpy that are not required but extent the capabilities of SymPy if they are installed. \r\n\r\nI am putting this here instead of just doing it and making a pull request because I don't know exactly how things work with things like numpy and scipy, and I also don't know if I am forgetting anything. So far, I have this:\r\n\r\n\"\"\"\r\nDependencies\r\n------------\r\n\r\nOne of the fundamental design decisions behind SymPy is that it should not have any external dependencies besides Python to install. Therefore, the only real \"dependency\" of SymPy is an installation of Python 2.4, 2.5, 2.6, or 2.7 (note that Python 2.4 support is deprecated and will no longer work in the next release).\r\n\r\nHowever, there are several packages that are not required to use SymPy, but that will enhance SymPy if they are installed. These packages are:\r\n\r\n- IPython ( http://ipython.scipy.org/moin/ ). IPython is a third party Python interactive shell that has many more features over the built-in Python interactive shell, such as tab-completetion and [what other important features should I mention here?]. If IPython is installed, isympy will automatically use it. Otherwise, it will fall back to the regular Python interactive shell. You can override this behavior by setting the -c option to isympy, like `isympy -c python`.\r\n\r\n- gmpy ( http://code.google.com/p/gmpy/ ). gmpy is a Python wrapper around the GNU Multiple Precision Arithmetic Library (GMP). If gmpy is installed, it may make certain operations in SymPy faster, because it will use gmpy as the ground type instead of the built-in Python ground types. If gmpy is not installed, it will fall back to the default Python ground types. You can override this behavior by setting the SYMPY_GROUND_TYPES environment variable, such as `SYMPY_GROUND_TYPES=python isympy`. [Note: this should be an option to isympy!]\r\n\r\n- Cython. [What exactly is the situation with Cython?]\r\n\r\n- Numpy. [Ditto]\r\n\r\n- Scipy. [Ditto]\r\n\r\n- [Code generation dependencies?]\r\n\r\n- [Other dependencies?]\r\n\r\nNote that mpmath and pyglet, our floating point and plotting libraries respectively, are included with SymPy, so it is unnecessary to install them. Indeed, SymPy will always use the version of mpmath or pyglet that comes with SymPy, even if a newer version is installed in the system. This is done for compatibility reasons.\r\n\r\n\"\"\"\r\n\r\nOK, the text in [] are comments. I need help from others writing the rest of this. Note that I do not want to include any development dependencies here (like Sphinx), because the user does not care about that (maybe we could have that list somewhere else in our development docs). \r\n\r\nBut basically for the others, explain what happens when they are installed and what happens when they are not (and how to override, if relevant). \r\n\r\nI just realized that the best way to do this would be through the wiki. So if anyone has anything to add to this, please do it at https://github.com/sympy/sympy/wiki/Dependencies . And then when we have it finished we can add it to the README and regular docs.\r\n```\r\nOriginal issue for #5259: http://code.google.com/p/sympy/issues/detail?id=2160\r\nOriginal author: https://code.google.com/u/asmeurer@gmail.com/\r\nReferenced issues: #4887\r\nOriginal owner: https://code.google.com/u/asmeurer@gmail.com/\r\n", + "score": 0.23398635 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/3", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/3/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/3/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/3/events", + "html_url": "https://github.com/pypa/pip/issues/3", + "id": 670386, + "number": 3, + "title": "pip install --editable and pip install clash for namespace packages", + "user": { + "login": "mitsuhiko", + "id": 7396, + "avatar_url": "https://avatars.githubusercontent.com/u/7396?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mitsuhiko", + "html_url": "https://github.com/mitsuhiko", + "followers_url": "https://api.github.com/users/mitsuhiko/followers", + "following_url": "https://api.github.com/users/mitsuhiko/following{/other_user}", + "gists_url": "https://api.github.com/users/mitsuhiko/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mitsuhiko/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mitsuhiko/subscriptions", + "organizations_url": "https://api.github.com/users/mitsuhiko/orgs", + "repos_url": "https://api.github.com/users/mitsuhiko/repos", + "events_url": "https://api.github.com/users/mitsuhiko/events{/privacy}", + "received_events_url": "https://api.github.com/users/mitsuhiko/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 29, + "created_at": "2011-03-14T01:04:31Z", + "updated_at": "2016-02-09T07:25:34Z", + "closed_at": null, + "body": "A namespace package installed editable and another one installed regularly don't work well together.", + "score": 7.6143475 + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/issues/10", + "repository_url": "https://api.github.com/repos/pypa/virtualenv", + "labels_url": "https://api.github.com/repos/pypa/virtualenv/issues/10/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/virtualenv/issues/10/comments", + "events_url": "https://api.github.com/repos/pypa/virtualenv/issues/10/events", + "html_url": "https://github.com/pypa/virtualenv/issues/10", + "id": 673430, + "number": 10, + "title": "Fails to install \"activate\" when running win32 Python from cygwin bash", + "user": { + "login": "vbabiy", + "id": 15382, + "avatar_url": "https://avatars.githubusercontent.com/u/15382?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vbabiy", + "html_url": "https://github.com/vbabiy", + "followers_url": "https://api.github.com/users/vbabiy/followers", + "following_url": "https://api.github.com/users/vbabiy/following{/other_user}", + "gists_url": "https://api.github.com/users/vbabiy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vbabiy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vbabiy/subscriptions", + "organizations_url": "https://api.github.com/users/vbabiy/orgs", + "repos_url": "https://api.github.com/users/vbabiy/repos", + "events_url": "https://api.github.com/users/vbabiy/events{/privacy}", + "received_events_url": "https://api.github.com/users/vbabiy/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/bug", + "name": "bug", + "color": "ededed" + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/import", + "name": "import", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 4, + "created_at": "2011-03-14T21:29:13Z", + "updated_at": "2011-03-14T21:29:16Z", + "closed_at": null, + "body": "When running the win32 Python from cygwin's bash shell, \"virtualenv test\" installs \"test/Scripts/activate.bat\" but not \"test/Scripts/activate\". It looks like this is because \"OSTYPE\" is not set in the environment and so the check at virtualenv.py line 866 fails.\n\nAs a hack, I check both \"OSTYPE\" and \"TERM\" (diff attached). This works for me, but I don't know how universal it is. For example it won't work if running from inside the emacs shell (TERM=emacs).\n\nThis seems to work for easy_intall and pip in the new virtualenv, I'm not sure if there are other issues.\n\n---------------------------------------\n- Bitbucket: https://bitbucket.org/ianb/virtualenv/issue/22\n- Originally Reported By: \n- Originally Created At: 2010-02-06 21:36:32\n", + "score": 0.8024541 + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/issues/11", + "repository_url": "https://api.github.com/repos/pypa/virtualenv", + "labels_url": "https://api.github.com/repos/pypa/virtualenv/issues/11/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/virtualenv/issues/11/comments", + "events_url": "https://api.github.com/repos/pypa/virtualenv/issues/11/events", + "html_url": "https://github.com/pypa/virtualenv/issues/11", + "id": 673431, + "number": 11, + "title": "--relocatable does not point activate script to the correct path", + "user": { + "login": "vbabiy", + "id": 15382, + "avatar_url": "https://avatars.githubusercontent.com/u/15382?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vbabiy", + "html_url": "https://github.com/vbabiy", + "followers_url": "https://api.github.com/users/vbabiy/followers", + "following_url": "https://api.github.com/users/vbabiy/following{/other_user}", + "gists_url": "https://api.github.com/users/vbabiy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vbabiy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vbabiy/subscriptions", + "organizations_url": "https://api.github.com/users/vbabiy/orgs", + "repos_url": "https://api.github.com/users/vbabiy/repos", + "events_url": "https://api.github.com/users/vbabiy/events{/privacy}", + "received_events_url": "https://api.github.com/users/vbabiy/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/bug", + "name": "bug", + "color": "ededed" + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/import", + "name": "import", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 9, + "created_at": "2011-03-14T21:29:17Z", + "updated_at": "2012-03-06T19:38:50Z", + "closed_at": null, + "body": "Using Ubuntu 10.04, --relocatable works if I directly invoke the python binary or the setuptools-generated scripts. However, bin/activate still reflects the old path:\n\n \n > pwd\n /home/jhammel\n > virtualenv.py foo\n New python executable in foo/bin/python\n Installing setuptools............done.\n > virtualenv.py --relocatable foo\n Making script foo/bin/easy_install relative\n Making script foo/bin/easy_install-2.6 relative\n Making script foo/bin/pip relative\n > mv foo bar\n > cd bar\n > . bin/activate\n (foo)> echo $VIRTUAL_ENV\n /home/jhammel/foo\n (foo)> which python\n /usr/bin/python\n (foo)>\n \n\nThis is because VIRTUAL_ENV is set to an absolute path in the script. Instead, this should be made relative when --relocatable is called. \n\nSince the activate script must be sourced, it is a bit more complicated to get the path than just (e.g.) `dirname $0`. The following seems to work in bash:\n\n \n command=$(history 1) # this should go at the top of the file\n parent_path() {\n DIRECTORY=$(dirname ${!#})\n cd $DIRECTORY/..\n pwd\n }\n VIRTUAL_ENV=$(parent_path $command)\n \n\nIf this meets with your approval, Ian, I'm glad to write a patch.\n\n---------------------------------------\n- Bitbucket: https://bitbucket.org/ianb/virtualenv/issue/37\n- Originally Reported By: Jeff Hammel\n- Originally Created At: 2010-05-05 19:48:03\n", + "score": 0.6847486 + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/issues/53", + "repository_url": "https://api.github.com/repos/pypa/virtualenv", + "labels_url": "https://api.github.com/repos/pypa/virtualenv/issues/53/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/virtualenv/issues/53/comments", + "events_url": "https://api.github.com/repos/pypa/virtualenv/issues/53/events", + "html_url": "https://github.com/pypa/virtualenv/issues/53", + "id": 673493, + "number": 53, + "title": "Whitespace in root path of virtualenv breaks scripts", + "user": { + "login": "vbabiy", + "id": 15382, + "avatar_url": "https://avatars.githubusercontent.com/u/15382?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vbabiy", + "html_url": "https://github.com/vbabiy", + "followers_url": "https://api.github.com/users/vbabiy/followers", + "following_url": "https://api.github.com/users/vbabiy/following{/other_user}", + "gists_url": "https://api.github.com/users/vbabiy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vbabiy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vbabiy/subscriptions", + "organizations_url": "https://api.github.com/users/vbabiy/orgs", + "repos_url": "https://api.github.com/users/vbabiy/repos", + "events_url": "https://api.github.com/users/vbabiy/events{/privacy}", + "received_events_url": "https://api.github.com/users/vbabiy/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/bug", + "name": "bug", + "color": "ededed" + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/import", + "name": "import", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 16, + "created_at": "2011-03-14T21:35:00Z", + "updated_at": "2015-08-06T11:42:34Z", + "closed_at": null, + "body": "I'm not really sure if this is a distribute/setuptools/virtualenv but,\n\nIf I install virtualenv in\n\n**/var/lib/hudson/home/jobs/Minification WebHelpers/workspace/python/2.4**\n\nthen run ./bin/easy_install:\n\n**bash: ./bin/easy_install: \"/var/lib/hudson/home/jobs/Minification: bad interpreter: No such file or directory**\n\nSeems like something does not obey whitespace in path names correctly.\n\n---------------------------------------\n- Bitbucket: https://bitbucket.org/ianb/virtualenv/issue/38\n- Originally Reported By: Domen Kožar\n- Originally Created At: 2010-05-07 14:57:32\n", + "score": 0.5561179 + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/issues/72", + "repository_url": "https://api.github.com/repos/pypa/virtualenv", + "labels_url": "https://api.github.com/repos/pypa/virtualenv/issues/72/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/virtualenv/issues/72/comments", + "events_url": "https://api.github.com/repos/pypa/virtualenv/issues/72/events", + "html_url": "https://github.com/pypa/virtualenv/issues/72", + "id": 673526, + "number": 72, + "title": "Windows issue", + "user": { + "login": "vbabiy", + "id": 15382, + "avatar_url": "https://avatars.githubusercontent.com/u/15382?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vbabiy", + "html_url": "https://github.com/vbabiy", + "followers_url": "https://api.github.com/users/vbabiy/followers", + "following_url": "https://api.github.com/users/vbabiy/following{/other_user}", + "gists_url": "https://api.github.com/users/vbabiy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vbabiy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vbabiy/subscriptions", + "organizations_url": "https://api.github.com/users/vbabiy/orgs", + "repos_url": "https://api.github.com/users/vbabiy/repos", + "events_url": "https://api.github.com/users/vbabiy/events{/privacy}", + "received_events_url": "https://api.github.com/users/vbabiy/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/bug", + "name": "bug", + "color": "ededed" + }, + { + "url": "https://api.github.com/repos/pypa/virtualenv/labels/import", + "name": "import", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 22, + "created_at": "2011-03-14T21:38:07Z", + "updated_at": "2014-01-28T16:07:22Z", + "closed_at": null, + "body": "I have Windows XP and Python 2.6. When I run the VirtualEnv script, here's what I get:\n\n \n #!text\n C:\\sandboxes>python virtualenv-new.py test-env\n New python executable in test-env\\Scripts\\python.exe\n Installing setuptools..............\n Complete output from command C:\\sandboxes\\test-env\\Scripts\\python.exe -c \"#!python\n \\\"\\\"\\\"Bootstrap setuptoo...\n \n \n \n \n \" --always-copy -U setuptools:\n Traceback (most recent call last):\n File \"\", line 278, in \n File \"\", line 210, in main\n File \"\", line 132, in download_setuptools\n File \"C:\\Python26\\Lib\\urllib2.py\", line 92, in \n import httplib\n File \"C:\\Python26\\Lib\\httplib.py\", line 70, in \n import socket\n File \"C:\\Python26\\Lib\\socket.py\", line 46, in \n import _socket\n ImportError: No module named _socket\n ----------------------------------------\n ...Installing setuptools...done.\n Traceback (most recent call last):\n File \"virtualenv-new.py\", line 1475, in \n main()\n File \"virtualenv-new.py\", line 528, in main\n use_distribute=options.use_distribute)\n File \"virtualenv-new.py\", line 618, in create_environment\n install_setuptools(py_executable, unzip=unzip_setuptools)\n File \"virtualenv-new.py\", line 361, in install_setuptools\n _install_req(py_executable, unzip)\n File \"virtualenv-new.py\", line 337, in _install_req\n cwd=cwd)\n File \"virtualenv-new.py\", line 589, in call_subprocess\n % (cmd_desc, proc.returncode))\n OSError: Command C:\\sandboxes\\test-env\\Scripts\\python.exe -c \"#!python\n \\\"\\\"\\\"Bootstrap setuptoo...\n \n \" --always-copy -U setuptools failed with error code 1\n \n \n\n\nIf I manually copy C:\\Python26\\DLLs to C:\\sandboxes\\test-env\\DLLs and re-run VirtualEnv script:\nC:\\sandboxes>python virtualenv-new.py test-env\n *** No error this time\n\n\n---------------------------------------\n- Bitbucket: https://bitbucket.org/ianb/virtualenv/issue/11\n- Originally Reported By: Anonymous\n- Originally Created At: 2009-11-14 22:19:35\n", + "score": 4.7436476 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/18", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/18/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/18/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/18/events", + "html_url": "https://github.com/pypa/pip/issues/18", + "id": 674438, + "number": 18, + "title": "--compiler build option on windows", + "user": { + "login": "vbabiy", + "id": 15382, + "avatar_url": "https://avatars.githubusercontent.com/u/15382?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vbabiy", + "html_url": "https://github.com/vbabiy", + "followers_url": "https://api.github.com/users/vbabiy/followers", + "following_url": "https://api.github.com/users/vbabiy/following{/other_user}", + "gists_url": "https://api.github.com/users/vbabiy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vbabiy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vbabiy/subscriptions", + "organizations_url": "https://api.github.com/users/vbabiy/orgs", + "repos_url": "https://api.github.com/users/vbabiy/repos", + "events_url": "https://api.github.com/users/vbabiy/events{/privacy}", + "received_events_url": "https://api.github.com/users/vbabiy/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 17, + "created_at": "2011-03-15T06:00:07Z", + "updated_at": "2015-02-10T14:04:42Z", + "closed_at": null, + "body": "On Windows while installing from source code several packages (psycopg2, PIL, ...) emit an error:\n\n \n error: Unable to find vcvarsall.bat\n \n\nThe issue is being fixed by installing MinGW and using mingw32 compiler like this:\n \n setup.py install build --compiler=mingw32\n \n\nAs far as I see, it would be very good for PIP to have \"--build-option\" like \"--install-option\", so that one could use PIP with mingw32 compiler:\n \n pip install --build-option=\"--compiler=mingw32\" psycopg2\n \n\n---------------------------------------\n- Bitbucket: https://bitbucket.org/ianb/pip/issue/191\n- Originally Reported By: Anonymous\n- Originally Created At: 2010-11-23 03:20:59\n", + "score": 4.4473963 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/168", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/168/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/168/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/168/events", + "html_url": "https://github.com/pypa/pip/issues/168", + "id": 674610, + "number": 168, + "title": "test_freeze:test_freeze_with_local_option is broken", + "user": { + "login": "vbabiy", + "id": 15382, + "avatar_url": "https://avatars.githubusercontent.com/u/15382?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/vbabiy", + "html_url": "https://github.com/vbabiy", + "followers_url": "https://api.github.com/users/vbabiy/followers", + "following_url": "https://api.github.com/users/vbabiy/following{/other_user}", + "gists_url": "https://api.github.com/users/vbabiy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/vbabiy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/vbabiy/subscriptions", + "organizations_url": "https://api.github.com/users/vbabiy/orgs", + "repos_url": "https://api.github.com/users/vbabiy/repos", + "events_url": "https://api.github.com/users/vbabiy/events{/privacy}", + "received_events_url": "https://api.github.com/users/vbabiy/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/tests", + "name": "tests", + "color": "eb6420" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 4, + "created_at": "2011-03-15T06:25:55Z", + "updated_at": "2015-10-09T08:17:41Z", + "closed_at": null, + "body": "As you can see from the bottom of [[http://boostpro.com:8010/builders/win2003-server-builder/builds/77/steps/test/logs/stdio|this test log]], the test is failing on windows, but it's not specific to that platform: as far as I can tell it will also fail on Fedora. The common cause is that there is no `wsgiref.egg-info` in these installations, so `pkg_resources` doesn't find wsgiref when building its WorkingSet.\n\nFedora explicitly removes all the `.egg-info` files on line 558 of [[http://cvs.fedoraproject.org/viewvc/F-12/python/python.spec?revision=1.157&view=markup#558|their spec file]], however they also [[https://bugzilla.redhat.com/show_bug.cgi?id=414711|consider that a bug and have fixed it]], so it's not clear how best to address this issue. Workardounds just for Windows and old Fedora? Yuck.\n\n---------------------------------------\n- Bitbucket: https://bitbucket.org/ianb/pip/issue/110\n- Originally Reported By: Dave Abrahams\n- Originally Created At: 2010-05-03 18:00:51\n", + "score": 1.1060739 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/256", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/256/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/256/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/256/events", + "html_url": "https://github.com/pypa/pip/issues/256", + "id": 774910, + "number": 256, + "title": "Windows: pip's 'DOS' window closes automatically, error msgs lost", + "user": { + "login": "mcow", + "id": 731991, + "avatar_url": "https://avatars.githubusercontent.com/u/731991?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mcow", + "html_url": "https://github.com/mcow", + "followers_url": "https://api.github.com/users/mcow/followers", + "following_url": "https://api.github.com/users/mcow/following{/other_user}", + "gists_url": "https://api.github.com/users/mcow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mcow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mcow/subscriptions", + "organizations_url": "https://api.github.com/users/mcow/orgs", + "repos_url": "https://api.github.com/users/mcow/repos", + "events_url": "https://api.github.com/users/mcow/events{/privacy}", + "received_events_url": "https://api.github.com/users/mcow/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 4, + "created_at": "2011-04-15T17:08:40Z", + "updated_at": "2013-08-08T05:30:09Z", + "closed_at": null, + "body": "This may be specific to Windows Vista and Windows 7, I think. I am using 64-bit Windows 7; see also this page for similar problem with Vista:\r\n\r\nIt seems that Windows forces pip (and easy_install) to open into a new cmd shell, when run from a command shell. When the install program completes, the cmd shell closes. If there are any problems with the install, the program errors are lost, making troubleshooting difficult.\r\n\r\nThe hack of elevating to Administrator described there as working under Vista doesn't work for me on W7/64.\r\n\r\nI don't expect anyone to figure out how to keep Windows from launching into a new window, but, as a workaround: I'd like a command-line switch I can add to pip which would pause at the end of the install and print something like \"Hit any key to continue\" and then wait for that activity.", + "score": 6.7493997 + }, + { + "url": "https://api.github.com/repos/kartograph/kartograph.py/issues/21", + "repository_url": "https://api.github.com/repos/kartograph/kartograph.py", + "labels_url": "https://api.github.com/repos/kartograph/kartograph.py/issues/21/labels{/name}", + "comments_url": "https://api.github.com/repos/kartograph/kartograph.py/issues/21/comments", + "events_url": "https://api.github.com/repos/kartograph/kartograph.py/issues/21/events", + "html_url": "https://github.com/kartograph/kartograph.py/issues/21", + "id": 3607344, + "number": 21, + "title": "Make setup.py work on all major systems", + "user": { + "login": "gka", + "id": 617518, + "avatar_url": "https://avatars.githubusercontent.com/u/617518?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gka", + "html_url": "https://github.com/gka", + "followers_url": "https://api.github.com/users/gka/followers", + "following_url": "https://api.github.com/users/gka/following{/other_user}", + "gists_url": "https://api.github.com/users/gka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gka/subscriptions", + "organizations_url": "https://api.github.com/users/gka/orgs", + "repos_url": "https://api.github.com/users/gka/repos", + "events_url": "https://api.github.com/users/gka/events{/privacy}", + "received_events_url": "https://api.github.com/users/gka/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/kartograph/kartograph.py/labels/bug", + "name": "bug", + "color": "e10c02" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/kartograph/kartograph.py/milestones/1", + "html_url": "https://github.com/kartograph/kartograph.py/milestones/1.0.0", + "labels_url": "https://api.github.com/repos/kartograph/kartograph.py/milestones/1/labels", + "id": 94761, + "number": 1, + "title": "1.0.0", + "description": "first stable release", + "creator": { + "login": "gka", + "id": 617518, + "avatar_url": "https://avatars.githubusercontent.com/u/617518?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gka", + "html_url": "https://github.com/gka", + "followers_url": "https://api.github.com/users/gka/followers", + "following_url": "https://api.github.com/users/gka/following{/other_user}", + "gists_url": "https://api.github.com/users/gka/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gka/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gka/subscriptions", + "organizations_url": "https://api.github.com/users/gka/orgs", + "repos_url": "https://api.github.com/users/gka/repos", + "events_url": "https://api.github.com/users/gka/events{/privacy}", + "received_events_url": "https://api.github.com/users/gka/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 9, + "closed_issues": 16, + "state": "open", + "created_at": "2012-03-10T23:50:43Z", + "updated_at": "2012-07-19T12:11:34Z", + "due_on": null, + "closed_at": null + }, + "comments": 7, + "created_at": "2012-03-12T07:58:01Z", + "updated_at": "2014-02-04T19:18:05Z", + "closed_at": null, + "body": "Currently setup.py install doesn't work on some systems (especially not on windows).", + "score": 0.821238 + }, + { + "url": "https://api.github.com/repos/mlt/schwinn810/issues/17", + "repository_url": "https://api.github.com/repos/mlt/schwinn810", + "labels_url": "https://api.github.com/repos/mlt/schwinn810/issues/17/labels{/name}", + "comments_url": "https://api.github.com/repos/mlt/schwinn810/issues/17/comments", + "events_url": "https://api.github.com/repos/mlt/schwinn810/issues/17/events", + "html_url": "https://github.com/mlt/schwinn810/issues/17", + "id": 5895906, + "number": 17, + "title": "Missing Cresta PM808 support", + "user": { + "login": "jomu", + "id": 2057910, + "avatar_url": "https://avatars.githubusercontent.com/u/2057910?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jomu", + "html_url": "https://github.com/jomu", + "followers_url": "https://api.github.com/users/jomu/followers", + "following_url": "https://api.github.com/users/jomu/following{/other_user}", + "gists_url": "https://api.github.com/users/jomu/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jomu/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jomu/subscriptions", + "organizations_url": "https://api.github.com/users/jomu/orgs", + "repos_url": "https://api.github.com/users/jomu/repos", + "events_url": "https://api.github.com/users/jomu/events{/privacy}", + "received_events_url": "https://api.github.com/users/jomu/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/mlt/schwinn810/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 16, + "created_at": "2012-07-28T20:21:50Z", + "updated_at": "2013-06-24T16:49:39Z", + "closed_at": null, + "body": "I bought a Cresta PM808 GPS watch and I think that the watch is from the NEWCO family. I can read data from the included software (from NEWCO) and from the MIO software. So I think my watch has the same communication like the MIO. I have installed the CP210x USB to UART Bridge and can communicate via this port.\n\nBut your software replies mistakes. Maybe the same problem like MIO.\n\nI made this on you advice:\n...\nAnother alternative is to leave everything as is and make sure you have a --debug option in your schwinn810.cmd . With that option you should get schwinn810.bin in your temporary folder like %USERPROFILE%\\Local Settings\\TEMP . See [2] for details. Apparently this file is incomplete but there is a chance that it has enough data for me to see what needs to be adjusted. Just send me that file. It is probably just 72 bytes long or alike.\n...\nSend you the schwinn810.bin via mail\n", + "score": 0.31309116 + }, + { + "url": "https://api.github.com/repos/pinax/django-forms-bootstrap/issues/3", + "repository_url": "https://api.github.com/repos/pinax/django-forms-bootstrap", + "labels_url": "https://api.github.com/repos/pinax/django-forms-bootstrap/issues/3/labels{/name}", + "comments_url": "https://api.github.com/repos/pinax/django-forms-bootstrap/issues/3/comments", + "events_url": "https://api.github.com/repos/pinax/django-forms-bootstrap/issues/3/events", + "html_url": "https://github.com/pinax/django-forms-bootstrap/issues/3", + "id": 6180723, + "number": 3, + "title": "Exception Type: \tTemplateSyntaxError Exception Value: \t Invalid filter: 'css_class'", + "user": { + "login": "camdenroberts", + "id": 2141331, + "avatar_url": "https://avatars.githubusercontent.com/u/2141331?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/camdenroberts", + "html_url": "https://github.com/camdenroberts", + "followers_url": "https://api.github.com/users/camdenroberts/followers", + "following_url": "https://api.github.com/users/camdenroberts/following{/other_user}", + "gists_url": "https://api.github.com/users/camdenroberts/gists{/gist_id}", + "starred_url": "https://api.github.com/users/camdenroberts/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/camdenroberts/subscriptions", + "organizations_url": "https://api.github.com/users/camdenroberts/orgs", + "repos_url": "https://api.github.com/users/camdenroberts/repos", + "events_url": "https://api.github.com/users/camdenroberts/events{/privacy}", + "received_events_url": "https://api.github.com/users/camdenroberts/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pinax/django-forms-bootstrap/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2012-08-12T23:12:37Z", + "updated_at": "2016-01-06T15:37:42Z", + "closed_at": null, + "body": "I am getting the following error:\n\nTemplate error\n\nIn template c:\\users\\wings\\fg-env\\lib\\site-packages\\django_forms_bootstrap\\templates\\bootstrap\\field.html, error at line 8\nInvalid filter: 'css_class'\n\n1 \t{% load bootstrap_tags %}\n2 \t\n3 \t{% if field.is_hidden %}\n4 \t{{ field }}\n5 \t{% else %}\n6 \t
\n7 \t\n8 \t{% if field.label and not field|css_class == \"checkboxinput\" %}\n\n\n\n\nTemplateSyntaxError at /naturel/naturelcalendar/calendar/month/calendar/\n\nInvalid filter: 'css_class'\n\nRequest Method: \tGET\nRequest URL: \thttp://localhost:8000/naturel/naturelcalendar/calendar/month/calendar/\nDjango Version: \t1.3.3\nException Type: \tTemplateSyntaxError\nException Value: \t\n\nInvalid filter: 'css_class'\n\nException Location: \tC:\\Users\\Wings\\fg-env\\lib\\site-packages\\django-1.3.3-py2.7.egg\\django\\template\\base.py in find_filter, line 320\nPython Executable: \tC:\\Users\\Wings\\fg-env\\Scripts\\python.exe\nPython Version: \t2.7.3\nPython Path: \t\n\n['C:\\\\Users\\\\Wings\\\\bumpmd\\\\apps',\n 'C:\\\\Users\\\\Wings\\\\bumpmd',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\site-packages\\\\setuptools-0.6c11-py2.7.egg',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\site-packages\\\\pip-1.1-py2.7.egg',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\site-packages\\\\django_avatar-1.0.5-py2.7.egg',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\site-packages\\\\pil-1.1.7-py2.7-win32.egg',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\site-packages\\\\django_crudgenerator-0.0.7-py2.7.egg',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\site-packages\\\\django-1.3.3-py2.7.egg',\n 'C:\\\\Windows\\\\system32\\\\python27.zip',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\DLLs',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\plat-win',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\lib-tk',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\Scripts',\n 'C:\\\\python27\\\\Lib',\n 'C:\\\\python27\\\\DLLs',\n 'C:\\\\python27\\\\Lib\\\\lib-tk',\n 'C:\\\\Users\\\\Wings\\\\fg-env',\n 'C:\\\\Users\\\\Wings\\\\fg-env\\\\lib\\\\site-packages']\n", + "score": 0.57478267 + }, + { + "url": "https://api.github.com/repos/dineshkummarc/Bespin/issues/2", + "repository_url": "https://api.github.com/repos/dineshkummarc/Bespin", + "labels_url": "https://api.github.com/repos/dineshkummarc/Bespin/issues/2/labels{/name}", + "comments_url": "https://api.github.com/repos/dineshkummarc/Bespin/issues/2/comments", + "events_url": "https://api.github.com/repos/dineshkummarc/Bespin/issues/2/events", + "html_url": "https://github.com/dineshkummarc/Bespin/issues/2", + "id": 6318826, + "number": 2, + "title": "build is not working for bespin on windows under VS 2008 and phalanger", + "user": { + "login": "dineshkummarc", + "id": 869803, + "avatar_url": "https://avatars.githubusercontent.com/u/869803?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dineshkummarc", + "html_url": "https://github.com/dineshkummarc", + "followers_url": "https://api.github.com/users/dineshkummarc/followers", + "following_url": "https://api.github.com/users/dineshkummarc/following{/other_user}", + "gists_url": "https://api.github.com/users/dineshkummarc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dineshkummarc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dineshkummarc/subscriptions", + "organizations_url": "https://api.github.com/users/dineshkummarc/orgs", + "repos_url": "https://api.github.com/users/dineshkummarc/repos", + "events_url": "https://api.github.com/users/dineshkummarc/events{/privacy}", + "received_events_url": "https://api.github.com/users/dineshkummarc/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/dineshkummarc/Bespin/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "dineshkummarc", + "id": 869803, + "avatar_url": "https://avatars.githubusercontent.com/u/869803?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dineshkummarc", + "html_url": "https://github.com/dineshkummarc", + "followers_url": "https://api.github.com/users/dineshkummarc/followers", + "following_url": "https://api.github.com/users/dineshkummarc/following{/other_user}", + "gists_url": "https://api.github.com/users/dineshkummarc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dineshkummarc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dineshkummarc/subscriptions", + "organizations_url": "https://api.github.com/users/dineshkummarc/orgs", + "repos_url": "https://api.github.com/users/dineshkummarc/repos", + "events_url": "https://api.github.com/users/dineshkummarc/events{/privacy}", + "received_events_url": "https://api.github.com/users/dineshkummarc/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 3, + "created_at": "2012-08-20T06:09:47Z", + "updated_at": "2012-08-20T10:44:12Z", + "closed_at": null, + "body": "build is not working for bespin", + "score": 1.7994952 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/727", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/727/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/727/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/727/events", + "html_url": "https://github.com/pypa/pip/issues/727", + "id": 8394400, + "number": 727, + "title": "`pip uninstall ...` removed Python's top level `dlls` folder on Windows", + "user": { + "login": "klonuo", + "id": 361447, + "avatar_url": "https://avatars.githubusercontent.com/u/361447?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/klonuo", + "html_url": "https://github.com/klonuo", + "followers_url": "https://api.github.com/users/klonuo/followers", + "following_url": "https://api.github.com/users/klonuo/following{/other_user}", + "gists_url": "https://api.github.com/users/klonuo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/klonuo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/klonuo/subscriptions", + "organizations_url": "https://api.github.com/users/klonuo/orgs", + "repos_url": "https://api.github.com/users/klonuo/repos", + "events_url": "https://api.github.com/users/klonuo/events{/privacy}", + "received_events_url": "https://api.github.com/users/klonuo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/setuptools", + "name": "setuptools", + "color": "0052cc" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 16, + "created_at": "2012-11-15T17:38:34Z", + "updated_at": "2013-08-08T01:58:58Z", + "closed_at": null, + "body": "I use pip when I can, and it worked for me great on both Windows and Ubuntu and both Python 2.x and Python 3.x. Today I had a problem and fortunately figured it out. Here is what happened:\n\nI installed **shapely** - `pip install shapely` and it did install fine, but at the end of the process **shapely** setup suggested that I better build it with **geos** dependency for speedup.\n\nOK, I thought to remove it and get this library - `pip uninstall shapely`. Terminal showed me a long list of files and I typed *yes*.\n\nNow before I urge myself to download **geos** I wanted to finish something I was working in Python, when I get this error:\n\n```python\nImportError: No module named _socket\n```\n\nAny script that accesses network stopped working. Hm..., never had this kind of problem before, so I ask Google and get list of various scenarios none fitting my situation. Also some suggested that after a while this error fixed by itself. So as a rule of least resistance I restarted Windows, but nothing changed.\n\nNow I'll spare myself, and you too, from writing what all I did, until I hit brake and thought to focus on what change I did to my system, after this error started to show. One of the things was that I did pip install/uninstall package, but I wasn't expected that to be a problem. Browsing my %temp% folder I found `pip-_9fyh6-uninstall` folder, and looking for a clue there I just realized it removed whole **dlls** top level directory from my Python 2.7 installation!\n\nThat was unpleasant surprise, but also a relief as just copying the folder back in it's place, Python started to work as it should\n\nI use pip 1.2.1 with Python 2.7.3 on Windows XP SP3 32bit.", + "score": 5.399519 + }, + { + "url": "https://api.github.com/repos/ipython/ipython/issues/2670", + "repository_url": "https://api.github.com/repos/ipython/ipython", + "labels_url": "https://api.github.com/repos/ipython/ipython/issues/2670/labels{/name}", + "comments_url": "https://api.github.com/repos/ipython/ipython/issues/2670/comments", + "events_url": "https://api.github.com/repos/ipython/ipython/issues/2670/events", + "html_url": "https://github.com/ipython/ipython/issues/2670", + "id": 9122091, + "number": 2670, + "title": "Readline won't load on pypy-2.0-beta1 win8-64bit", + "user": { + "login": "jansegre", + "id": 729870, + "avatar_url": "https://avatars.githubusercontent.com/u/729870?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jansegre", + "html_url": "https://github.com/jansegre", + "followers_url": "https://api.github.com/users/jansegre/followers", + "following_url": "https://api.github.com/users/jansegre/following{/other_user}", + "gists_url": "https://api.github.com/users/jansegre/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jansegre/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jansegre/subscriptions", + "organizations_url": "https://api.github.com/users/jansegre/orgs", + "repos_url": "https://api.github.com/users/jansegre/repos", + "events_url": "https://api.github.com/users/jansegre/events{/privacy}", + "received_events_url": "https://api.github.com/users/jansegre/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/ipython/ipython/labels/bug", + "name": "bug", + "color": "d9596c" + }, + { + "url": "https://api.github.com/repos/ipython/ipython/labels/needs-info", + "name": "needs-info", + "color": "ededed" + }, + { + "url": "https://api.github.com/repos/ipython/ipython/labels/windows", + "name": "windows", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/ipython/ipython/milestones/9", + "html_url": "https://github.com/ipython/ipython/milestones/wishlist", + "labels_url": "https://api.github.com/repos/ipython/ipython/milestones/9/labels", + "id": 116694, + "number": 9, + "title": "wishlist", + "description": "Issues with no immediate plans for resolution.", + "creator": { + "login": "minrk", + "id": 151929, + "avatar_url": "https://avatars.githubusercontent.com/u/151929?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/minrk", + "html_url": "https://github.com/minrk", + "followers_url": "https://api.github.com/users/minrk/followers", + "following_url": "https://api.github.com/users/minrk/following{/other_user}", + "gists_url": "https://api.github.com/users/minrk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/minrk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/minrk/subscriptions", + "organizations_url": "https://api.github.com/users/minrk/orgs", + "repos_url": "https://api.github.com/users/minrk/repos", + "events_url": "https://api.github.com/users/minrk/events{/privacy}", + "received_events_url": "https://api.github.com/users/minrk/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 707, + "closed_issues": 0, + "state": "open", + "created_at": "2012-05-08T03:17:52Z", + "updated_at": "2016-06-16T12:28:23Z", + "due_on": null, + "closed_at": null + }, + "comments": 5, + "created_at": "2012-12-09T17:30:44Z", + "updated_at": "2016-04-04T22:32:03Z", + "closed_at": null, + "body": "I'm using Windows 8 64-bit with PyPy 2.0 beta1.\n\nI installed pip then 'pip install ipython'.\n\nInstallation went smooth but when I run ipython I get:\n\n```\nC:\\Users\\Jan>ipython\nC:\\Dev\\pypy\\site-packages\\IPython\\utils\\rlineimpl.py:80: UserWarning: Failed GetOutputFile warnings.warn(\"Failed GetOutputFile\")\nWARNING: Readline services not available or not loaded.WARNING: Proper color support under MS Windows requires the pyreadline library.\nYou can find it at:\nhttp://ipython.org/pyreadline.html\nGary's readline needs the ctypes module, from:\nhttp://starship.python.net/crew/theller/ctypes\n(Note that ctypes is already part of Python versions 2.5 and newer).\n\nDefaulting color scheme to 'NoColor'Python 2.7.3 (7e4f0faa3d51, Nov 22 2012, 10:06:18)\nType \"copyright\", \"credits\" or \"license\" for more information.\n\nIPython 0.13.1 -- An enhanced Interactive Python.\n? -> Introduction and overview of IPython's features.\n%quickref -> Quick reference.\nhelp -> Python's own help system.\nobject? -> Details about 'object', use 'object??' for extra details.\n...\n```\n\nMy PyPy is installed at C:\\Dev\\pypy, though that's probably not a problem.\n\nI have C:\\Dev\\pypy and C:\\Dev\\pypy\\bin on my path. I use it from cmd.\n\nI tried reinstalling pyreadline and installing cffi, but that didn't sovle it.\nI tried installing ctypes but that failed since I have VS2012 and probably need VS2008 instead.\n", + "score": 1.101128 + }, + { + "url": "https://api.github.com/repos/ianepperson/pyredminews/issues/9", + "repository_url": "https://api.github.com/repos/ianepperson/pyredminews", + "labels_url": "https://api.github.com/repos/ianepperson/pyredminews/issues/9/labels{/name}", + "comments_url": "https://api.github.com/repos/ianepperson/pyredminews/issues/9/comments", + "events_url": "https://api.github.com/repos/ianepperson/pyredminews/issues/9/events", + "html_url": "https://github.com/ianepperson/pyredminews/issues/9", + "id": 10725870, + "number": 9, + "title": "PyPI package install not working.", + "user": { + "login": "ianepperson", + "id": 903537, + "avatar_url": "https://avatars.githubusercontent.com/u/903537?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ianepperson", + "html_url": "https://github.com/ianepperson", + "followers_url": "https://api.github.com/users/ianepperson/followers", + "following_url": "https://api.github.com/users/ianepperson/following{/other_user}", + "gists_url": "https://api.github.com/users/ianepperson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ianepperson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ianepperson/subscriptions", + "organizations_url": "https://api.github.com/users/ianepperson/orgs", + "repos_url": "https://api.github.com/users/ianepperson/repos", + "events_url": "https://api.github.com/users/ianepperson/events{/privacy}", + "received_events_url": "https://api.github.com/users/ianepperson/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/ianepperson/pyredminews/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "ianepperson", + "id": 903537, + "avatar_url": "https://avatars.githubusercontent.com/u/903537?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ianepperson", + "html_url": "https://github.com/ianepperson", + "followers_url": "https://api.github.com/users/ianepperson/followers", + "following_url": "https://api.github.com/users/ianepperson/following{/other_user}", + "gists_url": "https://api.github.com/users/ianepperson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ianepperson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ianepperson/subscriptions", + "organizations_url": "https://api.github.com/users/ianepperson/orgs", + "repos_url": "https://api.github.com/users/ianepperson/repos", + "events_url": "https://api.github.com/users/ianepperson/events{/privacy}", + "received_events_url": "https://api.github.com/users/ianepperson/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 4, + "created_at": "2013-02-07T06:20:13Z", + "updated_at": "2013-02-18T17:08:58Z", + "closed_at": null, + "body": "Late tonight and I'm missing something. Need to chase it when I'm fresh.\r\n\r\nAny suggestions as to what I've done wrong are welcome.", + "score": 0.8741066 + }, + { + "url": "https://api.github.com/repos/Stiivi/brewery/issues/37", + "repository_url": "https://api.github.com/repos/Stiivi/brewery", + "labels_url": "https://api.github.com/repos/Stiivi/brewery/issues/37/labels{/name}", + "comments_url": "https://api.github.com/repos/Stiivi/brewery/issues/37/comments", + "events_url": "https://api.github.com/repos/Stiivi/brewery/issues/37/events", + "html_url": "https://github.com/Stiivi/brewery/issues/37", + "id": 11214305, + "number": 37, + "title": "XLRD Issue?", + "user": { + "login": "kjseefried", + "id": 2341596, + "avatar_url": "https://avatars.githubusercontent.com/u/2341596?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kjseefried", + "html_url": "https://github.com/kjseefried", + "followers_url": "https://api.github.com/users/kjseefried/followers", + "following_url": "https://api.github.com/users/kjseefried/following{/other_user}", + "gists_url": "https://api.github.com/users/kjseefried/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kjseefried/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kjseefried/subscriptions", + "organizations_url": "https://api.github.com/users/kjseefried/orgs", + "repos_url": "https://api.github.com/users/kjseefried/repos", + "events_url": "https://api.github.com/users/kjseefried/events{/privacy}", + "received_events_url": "https://api.github.com/users/kjseefried/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/Stiivi/brewery/labels/bug", + "name": "bug", + "color": "e10c02" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2013-02-20T20:39:20Z", + "updated_at": "2013-02-20T20:39:20Z", + "closed_at": null, + "body": "I have some code based on the example brewery \"merge 2 XLS files\". It works on MacOS in Python 2.7.2. When I move it to a new Windows 7 install (Python 2.7.3, brewery and python-excel installed via pip today), it fails with:\r\n\r\nTraceback (most recent call last):\r\n File \"C:\\Users\\kseefried\\workspace\\Preparis User Data\\src\\merge-ng.py\", line 46, in \r\n src.initialize()\r\n File \"C:\\Python27\\lib\\site-packages\\brewery-0.8.0-py2.7.egg\\brewery\\ds\\xls_streams.py\", line 47, in initialize\r\n encoding_override=self.encoding)\r\n File \"C:\\Python27\\lib\\site-packages\\xlrd\\__init__.py\", line 443, in open_workbook\r\n ragged_rows=ragged_rows,\r\n File \"C:\\Python27\\lib\\site-packages\\xlrd\\book.py\", line 94, in open_workbook_xls\r\n biff_version = bk.getbof(XL_WORKBOOK_GLOBALS)\r\n File \"C:\\Python27\\lib\\site-packages\\xlrd\\book.py\", line 1264, in getbof\r\n bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8])\r\n File \"C:\\Python27\\lib\\site-packages\\xlrd\\book.py\", line 1258, in bof_error\r\n raise XLRDError('Unsupported format, or corrupt file: ' + msg)\r\nxlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '\\xd0\\xcf\\x11\\xe0\\xa1\\xb1'\r\n\r\nI have:\r\n\r\n- Verified the files are in fact valid XLS files.\r\n- Saved As Excel 95 files.\r\n- Create new spreadsheets outside of Excel using xlrd, cut-n-paste the data into the new spreadsheet.\r\n\r\nI'm at a loss as to how to move forward.\r\n", + "score": 0.6037355 + }, + { + "url": "https://api.github.com/repos/ipython/ipython/issues/3002", + "repository_url": "https://api.github.com/repos/ipython/ipython", + "labels_url": "https://api.github.com/repos/ipython/ipython/issues/3002/labels{/name}", + "comments_url": "https://api.github.com/repos/ipython/ipython/issues/3002/comments", + "events_url": "https://api.github.com/repos/ipython/ipython/issues/3002/events", + "html_url": "https://github.com/ipython/ipython/issues/3002", + "id": 11694765, + "number": 3002, + "title": "Right click collision for qtconsole in Windows", + "user": { + "login": "mayaa6", + "id": 3221154, + "avatar_url": "https://avatars.githubusercontent.com/u/3221154?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mayaa6", + "html_url": "https://github.com/mayaa6", + "followers_url": "https://api.github.com/users/mayaa6/followers", + "following_url": "https://api.github.com/users/mayaa6/following{/other_user}", + "gists_url": "https://api.github.com/users/mayaa6/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mayaa6/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mayaa6/subscriptions", + "organizations_url": "https://api.github.com/users/mayaa6/orgs", + "repos_url": "https://api.github.com/users/mayaa6/repos", + "events_url": "https://api.github.com/users/mayaa6/events{/privacy}", + "received_events_url": "https://api.github.com/users/mayaa6/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/ipython/ipython/labels/bug", + "name": "bug", + "color": "d9596c" + }, + { + "url": "https://api.github.com/repos/ipython/ipython/labels/qtconsole", + "name": "qtconsole", + "color": "027a10" + }, + { + "url": "https://api.github.com/repos/ipython/ipython/labels/windows", + "name": "windows", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/ipython/ipython/milestones/9", + "html_url": "https://github.com/ipython/ipython/milestones/wishlist", + "labels_url": "https://api.github.com/repos/ipython/ipython/milestones/9/labels", + "id": 116694, + "number": 9, + "title": "wishlist", + "description": "Issues with no immediate plans for resolution.", + "creator": { + "login": "minrk", + "id": 151929, + "avatar_url": "https://avatars.githubusercontent.com/u/151929?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/minrk", + "html_url": "https://github.com/minrk", + "followers_url": "https://api.github.com/users/minrk/followers", + "following_url": "https://api.github.com/users/minrk/following{/other_user}", + "gists_url": "https://api.github.com/users/minrk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/minrk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/minrk/subscriptions", + "organizations_url": "https://api.github.com/users/minrk/orgs", + "repos_url": "https://api.github.com/users/minrk/repos", + "events_url": "https://api.github.com/users/minrk/events{/privacy}", + "received_events_url": "https://api.github.com/users/minrk/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 707, + "closed_issues": 0, + "state": "open", + "created_at": "2012-05-08T03:17:52Z", + "updated_at": "2016-06-16T12:28:23Z", + "due_on": null, + "closed_at": null + }, + "comments": 11, + "created_at": "2013-03-06T01:01:13Z", + "updated_at": "2014-10-02T17:06:51Z", + "closed_at": null, + "body": "I am using ipython for python3.3 in 32bit Windows7. Started the ipython through\"ipython3 qtconsole --pylab=inline\", the qtconsole will collide immediately when I made a right click in no exception.", + "score": 2.7258947 + }, + { + "url": "https://api.github.com/repos/brunobord/django-mini-issue-tracker/issues/3", + "repository_url": "https://api.github.com/repos/brunobord/django-mini-issue-tracker", + "labels_url": "https://api.github.com/repos/brunobord/django-mini-issue-tracker/issues/3/labels{/name}", + "comments_url": "https://api.github.com/repos/brunobord/django-mini-issue-tracker/issues/3/comments", + "events_url": "https://api.github.com/repos/brunobord/django-mini-issue-tracker/issues/3/events", + "html_url": "https://github.com/brunobord/django-mini-issue-tracker/issues/3", + "id": 12500638, + "number": 3, + "title": "Can't install on windows via pip", + "user": { + "login": "brunobord", + "id": 25185, + "avatar_url": "https://avatars.githubusercontent.com/u/25185?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/brunobord", + "html_url": "https://github.com/brunobord", + "followers_url": "https://api.github.com/users/brunobord/followers", + "following_url": "https://api.github.com/users/brunobord/following{/other_user}", + "gists_url": "https://api.github.com/users/brunobord/gists{/gist_id}", + "starred_url": "https://api.github.com/users/brunobord/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/brunobord/subscriptions", + "organizations_url": "https://api.github.com/users/brunobord/orgs", + "repos_url": "https://api.github.com/users/brunobord/repos", + "events_url": "https://api.github.com/users/brunobord/events{/privacy}", + "received_events_url": "https://api.github.com/users/brunobord/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/brunobord/django-mini-issue-tracker/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2013-03-27T09:25:14Z", + "updated_at": "2013-03-27T09:25:14Z", + "closed_at": null, + "body": " pip install issuetracker\r\n\r\nlog:\r\n\r\n Downloading/unpacking issuetracker\r\n Downloading issuetracker-1.0.tar.gz\r\n Running setup.py egg_info for package issuetracker\r\n Traceback (most recent call last):\r\n File \"\", line 16, in \r\n File \"C:\\Users\\Bruno\\Envs\\EXP\\build\\issuetracker\\setup.py\", line 12, in \r\n long_description=open(join(dirname(__file__), 'README.rst')).read(),\r\n IOError: [Errno 2] No such file or directory: 'C:\\\\Users\\\\Bruno\\\\Envs\\\\EXP\\\\\r\n build\\\\issuetracker\\\\README.rst'\r\n Complete output from command python setup.py egg_info:\r\n Traceback (most recent call last):\r\n\r\n File \"\", line 16, in \r\n\r\n File \"C:\\Users\\Bruno\\Envs\\EXP\\build\\issuetracker\\setup.py\", line 12, in \r\n\r\n long_description=open(join(dirname(__file__), 'README.rst')).read(),\r\n\r\n IOError: [Errno 2] No such file or directory: 'C:\\\\Users\\\\Bruno\\\\Envs\\\\EXP\\\\buil\r\n d\\\\issuetracker\\\\README.rst'\r\n\r\n ----------------------------------------\r\n Command python setup.py egg_info failed with error code 1 in C:\\Users\\Bruno\\Envs\r\n \\EXP\\build\\issuetracker\r\n Storing complete log in C:\\Users\\Bruno\\pip\\pip.log", + "score": 8.5169325 + }, + { + "url": "https://api.github.com/repos/futuregrid/flask_cm/issues/17", + "repository_url": "https://api.github.com/repos/futuregrid/flask_cm", + "labels_url": "https://api.github.com/repos/futuregrid/flask_cm/issues/17/labels{/name}", + "comments_url": "https://api.github.com/repos/futuregrid/flask_cm/issues/17/comments", + "events_url": "https://api.github.com/repos/futuregrid/flask_cm/issues/17/events", + "html_url": "https://github.com/futuregrid/flask_cm/issues/17", + "id": 12820371, + "number": 17, + "title": "Requirement: Python SDK for Windows Azure", + "user": { + "login": "lee212", + "id": 1359020, + "avatar_url": "https://avatars.githubusercontent.com/u/1359020?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lee212", + "html_url": "https://github.com/lee212", + "followers_url": "https://api.github.com/users/lee212/followers", + "following_url": "https://api.github.com/users/lee212/following{/other_user}", + "gists_url": "https://api.github.com/users/lee212/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lee212/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lee212/subscriptions", + "organizations_url": "https://api.github.com/users/lee212/orgs", + "repos_url": "https://api.github.com/users/lee212/repos", + "events_url": "https://api.github.com/users/lee212/events{/privacy}", + "received_events_url": "https://api.github.com/users/lee212/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/futuregrid/flask_cm/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 6, + "created_at": "2013-04-04T21:07:33Z", + "updated_at": "2013-05-17T11:56:24Z", + "closed_at": null, + "body": "We are using Windows Azure in flask cm.\r\nGo and download SDKs in your local machine to execute 'azure' command tool on linux shell.\r\n[Downloads sdk](http://www.windowsazure.com/en-us/downloads/)\r\n\r\nWithout the installation of the SDK, users will face the following errors:\r\n```\r\nTraceback (most recent call last):\r\n File \"flask_cm/server.py\", line 10, in \r\n from cloudmesh.cloudmesh import cloudmesh\r\n File \"./cloudmesh/cloudmesh.py\", line 20, in \r\n from azure.cm_azure import cm_azure as azure \r\n File \"./cloudmesh/azure/cm_azure.py\", line 15, in \r\n from sh import azure as _azure\r\nImportError: cannot import name azure\r\n```\r\n\r\nWe probably are able to use client libraries by downloading it. ```pip install azure``` supports client libraries. Please refer: [Install Python and the SDK](http://www.windowsazure.com/en-us/develop/python/common-tasks/install-python/)\r\n", + "score": 3.1166403 + }, + { + "url": "https://api.github.com/repos/jdevesa/gists/issues/13", + "repository_url": "https://api.github.com/repos/jdevesa/gists", + "labels_url": "https://api.github.com/repos/jdevesa/gists/issues/13/labels{/name}", + "comments_url": "https://api.github.com/repos/jdevesa/gists/issues/13/comments", + "events_url": "https://api.github.com/repos/jdevesa/gists/issues/13/events", + "html_url": "https://github.com/jdevesa/gists/issues/13", + "id": 13922646, + "number": 13, + "title": "`gists list` fails with `ValueError: need more than 0 values to unpack`", + "user": { + "login": "maphew", + "id": 486200, + "avatar_url": "https://avatars.githubusercontent.com/u/486200?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/maphew", + "html_url": "https://github.com/maphew", + "followers_url": "https://api.github.com/users/maphew/followers", + "following_url": "https://api.github.com/users/maphew/following{/other_user}", + "gists_url": "https://api.github.com/users/maphew/gists{/gist_id}", + "starred_url": "https://api.github.com/users/maphew/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/maphew/subscriptions", + "organizations_url": "https://api.github.com/users/maphew/orgs", + "repos_url": "https://api.github.com/users/maphew/repos", + "events_url": "https://api.github.com/users/maphew/events{/privacy}", + "received_events_url": "https://api.github.com/users/maphew/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/jdevesa/gists/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "jdevesa", + "id": 67581, + "avatar_url": "https://avatars.githubusercontent.com/u/67581?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jdevesa", + "html_url": "https://github.com/jdevesa", + "followers_url": "https://api.github.com/users/jdevesa/followers", + "following_url": "https://api.github.com/users/jdevesa/following{/other_user}", + "gists_url": "https://api.github.com/users/jdevesa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jdevesa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jdevesa/subscriptions", + "organizations_url": "https://api.github.com/users/jdevesa/orgs", + "repos_url": "https://api.github.com/users/jdevesa/repos", + "events_url": "https://api.github.com/users/jdevesa/events{/privacy}", + "received_events_url": "https://api.github.com/users/jdevesa/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/jdevesa/gists/milestones/3", + "html_url": "https://github.com/jdevesa/gists/milestones/0.5", + "labels_url": "https://api.github.com/repos/jdevesa/gists/milestones/3/labels", + "id": 285297, + "number": 3, + "title": "0.5", + "description": "0.5 must be the last branch before the 1.0 release. It should have:\r\n\r\n* Test everythin as much coverage as posible.\r\n* Python 2/3 support\r\n* 'Clone' and 'Webopen' subcommands", + "creator": { + "login": "jdevesa", + "id": 67581, + "avatar_url": "https://avatars.githubusercontent.com/u/67581?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jdevesa", + "html_url": "https://github.com/jdevesa", + "followers_url": "https://api.github.com/users/jdevesa/followers", + "following_url": "https://api.github.com/users/jdevesa/following{/other_user}", + "gists_url": "https://api.github.com/users/jdevesa/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jdevesa/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jdevesa/subscriptions", + "organizations_url": "https://api.github.com/users/jdevesa/orgs", + "repos_url": "https://api.github.com/users/jdevesa/repos", + "events_url": "https://api.github.com/users/jdevesa/events{/privacy}", + "received_events_url": "https://api.github.com/users/jdevesa/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 9, + "closed_issues": 2, + "state": "open", + "created_at": "2013-03-10T19:20:57Z", + "updated_at": "2014-11-14T08:56:50Z", + "due_on": null, + "closed_at": null + }, + "comments": 1, + "created_at": "2013-05-03T06:00:51Z", + "updated_at": "2014-02-12T17:20:54Z", + "closed_at": null, + "body": "Hi, brand new gists user here. Installed with `pip install` on Windows 7, python 2.7.4.\r\n\r\n`gists authorize` was successful; I've verified the gists CLI shows up in my list of authorized apps via web profile, and that my home dir has a .gistsrc\r\n\r\n```\r\nB:\\>gists list\r\nTraceback (most recent call last):\r\n File \"B:\\o4w\\apps\\Python27\\Scripts\\\\gists\", line 5, in \r\n run()\r\n File \"B:\\o4w\\apps\\Python27\\lib\\site-packages\\gists\\gists.py\", line 86, in run\r\n result_formatted = args.formatter(result)\r\n File \"B:\\o4w\\apps\\Python27\\lib\\site-packages\\gists\\formatters.py\", line 125, i\r\nn format_list\r\n rows, columns = os.popen('stty size', 'r').read().split()\r\nValueError: need more than 0 values to unpack\r\n```\r\n\r\nThere should be 3 gists listed (https://gist.github.com/maphew)", + "score": 1.2308071 + }, + { + "url": "https://api.github.com/repos/lihaoyi/macropy/issues/32", + "repository_url": "https://api.github.com/repos/lihaoyi/macropy", + "labels_url": "https://api.github.com/repos/lihaoyi/macropy/issues/32/labels{/name}", + "comments_url": "https://api.github.com/repos/lihaoyi/macropy/issues/32/comments", + "events_url": "https://api.github.com/repos/lihaoyi/macropy/issues/32/events", + "html_url": "https://github.com/lihaoyi/macropy/issues/32", + "id": 14461232, + "number": 32, + "title": "Get MacroPy working on Python 3.4", + "user": { + "login": "lihaoyi", + "id": 934140, + "avatar_url": "https://avatars.githubusercontent.com/u/934140?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lihaoyi", + "html_url": "https://github.com/lihaoyi", + "followers_url": "https://api.github.com/users/lihaoyi/followers", + "following_url": "https://api.github.com/users/lihaoyi/following{/other_user}", + "gists_url": "https://api.github.com/users/lihaoyi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lihaoyi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lihaoyi/subscriptions", + "organizations_url": "https://api.github.com/users/lihaoyi/orgs", + "repos_url": "https://api.github.com/users/lihaoyi/repos", + "events_url": "https://api.github.com/users/lihaoyi/events{/privacy}", + "received_events_url": "https://api.github.com/users/lihaoyi/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/lihaoyi/macropy/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 42, + "created_at": "2013-05-17T16:45:39Z", + "updated_at": "2015-06-02T15:35:34Z", + "closed_at": null, + "body": "I have no idea how hard this will be, but MacroPy does not have many dependencies on the underlying runtime except for PEP302 and the `ast` library.\r\n\r\nSome of the ASTs look slightly different (e.g. functions can't have nested parameter lists, no `print` statement) and we may have to remove any `print` statements from the implementation code, but I don't imagine it will be very difficult or require big changes.", + "score": 0.17307626 + }, + { + "url": "https://api.github.com/repos/gtaylor/EVE-Market-Data-Uploader/issues/7", + "repository_url": "https://api.github.com/repos/gtaylor/EVE-Market-Data-Uploader", + "labels_url": "https://api.github.com/repos/gtaylor/EVE-Market-Data-Uploader/issues/7/labels{/name}", + "comments_url": "https://api.github.com/repos/gtaylor/EVE-Market-Data-Uploader/issues/7/comments", + "events_url": "https://api.github.com/repos/gtaylor/EVE-Market-Data-Uploader/issues/7/events", + "html_url": "https://github.com/gtaylor/EVE-Market-Data-Uploader/issues/7", + "id": 15771159, + "number": 7, + "title": "Crash while spawnin upload process on Windows 7", + "user": { + "login": "marandus", + "id": 2795896, + "avatar_url": "https://avatars.githubusercontent.com/u/2795896?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/marandus", + "html_url": "https://github.com/marandus", + "followers_url": "https://api.github.com/users/marandus/followers", + "following_url": "https://api.github.com/users/marandus/following{/other_user}", + "gists_url": "https://api.github.com/users/marandus/gists{/gist_id}", + "starred_url": "https://api.github.com/users/marandus/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/marandus/subscriptions", + "organizations_url": "https://api.github.com/users/marandus/orgs", + "repos_url": "https://api.github.com/users/marandus/repos", + "events_url": "https://api.github.com/users/marandus/events{/privacy}", + "received_events_url": "https://api.github.com/users/marandus/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/gtaylor/EVE-Market-Data-Uploader/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 19, + "created_at": "2013-06-19T22:04:26Z", + "updated_at": "2015-02-24T17:37:35Z", + "closed_at": null, + "body": "I installed EMDU on Windows 7 x86_64 following the instructions on your GitHub page. It starts up fine but then crashes when it tries to spawn the upload process stating it cannot find the emdu_console module.\r\nI start EMDU using the following command (the Python directory is in my PATH):\r\npython C:\\Python27\\Scripts\\emdu_console\r\n\r\nError message:\r\n2013-06-19 23:50:04,265: Got scan_endpoint http://upload.eve-emdr.com/upload/\r\n2013-06-19 23:50:07,680: Spawning upload process.\r\nTraceback (most recent call last):\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"\", line 1, in \r\n File \"C:\\Python27\\lib\\multiprocessing\\forking.py\", line 380, in main\r\n File \"C:\\Python27\\lib\\multiprocessing\\forking.py\", line 380, in main\r\n prepare(preparation_data)\r\n File \"C:\\Python27\\lib\\multiprocessing\\forking.py\", line 489, in prepare\r\n prepare(preparation_data)\r\n File \"C:\\Python27\\lib\\multiprocessing\\forking.py\", line 489, in prepare\r\n file, path_name, etc = imp.find_module(main_name, dirs)\r\nImportError: Nfile, path_name, etc = imp.find_module(main_name, dirs)\r\no module named emdu_consoleImportError\r\n: No module named emdu_console\r\n\r\nSpecs:\r\nWindows 7 x86_64\r\nPython 2.7.5 x86\r\nReverence 1.5.0 x86 for Python 2.7\r\nSetupTools 0.7.4\r\nWatchdog 0.6.0 for Python 2.7", + "score": 2.4202049 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/1140", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/1140/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/1140/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/1140/events", + "html_url": "https://github.com/pypa/pip/issues/1140", + "id": 18008354, + "number": 1140, + "title": "UnicodeEncodeError during zip install with Python2.7", + "user": { + "login": "simon-weber", + "id": 950506, + "avatar_url": "https://avatars.githubusercontent.com/u/950506?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/simon-weber", + "html_url": "https://github.com/simon-weber", + "followers_url": "https://api.github.com/users/simon-weber/followers", + "following_url": "https://api.github.com/users/simon-weber/following{/other_user}", + "gists_url": "https://api.github.com/users/simon-weber/gists{/gist_id}", + "starred_url": "https://api.github.com/users/simon-weber/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/simon-weber/subscriptions", + "organizations_url": "https://api.github.com/users/simon-weber/orgs", + "repos_url": "https://api.github.com/users/simon-weber/repos", + "events_url": "https://api.github.com/users/simon-weber/events{/privacy}", + "received_events_url": "https://api.github.com/users/simon-weber/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/encoding", + "name": "encoding", + "color": "0052cc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 7, + "created_at": "2013-08-13T17:09:36Z", + "updated_at": "2015-05-26T08:31:39Z", + "closed_at": null, + "body": "[utils.split_leading_dir](https://github.com/pypa/pip/blob/e62ee5545bae8d92143afe5c7c45247f2aaf82f1/pip/util.py#L214) does `path = str(path)`, which will crash when encountering non-ascii.\r\n\r\nI can replicate this with the latest dev version by doing `pip install https://github.com/simon-weber/Unofficial-Google-Music-API/archive/develop.zip`, which is caused by my `audiotest_unicode_한글.mp3` file in that package.\r\n\r\nHere is a sample traceback:\r\n```\r\nException:\r\nTraceback (most recent call last):\r\n File \"/usr/lib/python2.7/site-packages/pip/basecommand.py\", line 139, in main\r\n status = self.run(options, args)\r\n File \"/usr/lib/python2.7/site-packages/pip/commands/install.py\", line 266, in run\r\n requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)\r\n File \"/usr/lib/python2.7/site-packages/pip/req.py\", line 1033, in prepare_files\r\n self.unpack_url(url, location, self.is_download)\r\n File \"/usr/lib/python2.7/site-packages/pip/req.py\", line 1161, in unpack_url\r\n retval = unpack_http_url(link, location, self.download_cache, self.download_dir)\r\n File \"/usr/lib/python2.7/site-packages/pip/download.py\", line 559, in unpack_http_url\r\n unpack_file(temp_location, location, content_type, link)\r\n File \"/usr/lib/python2.7/site-packages/pip/util.py\", line 587, in unpack_file\r\n unzip_file(filename, location, flatten=not filename.endswith('.pybundle'))\r\n File \"/usr/lib/python2.7/site-packages/pip/util.py\", line 478, in unzip_file\r\n leading = has_leading_dir(zip.namelist()) and flatten\r\n File \"/usr/lib/python2.7/site-packages/pip/util.py\", line 231, in has_leading_dir\r\n prefix, rest = split_leading_dir(path)\r\n File \"/usr/lib/python2.7/site-packages/pip/util.py\", line 215, in split_leading_dir\r\n path = str(path)\r\nUnicodeEncodeError: 'ascii' codec can't encode characters in position 69-70: ordinal not in range(128)\r\n```\r\n\r\n(originally posted as https://github.com/simon-weber/Unofficial-Google-Music-API/issues/159)", + "score": 1.3882172 + }, + { + "url": "https://api.github.com/repos/xdress/xdress/issues/92", + "repository_url": "https://api.github.com/repos/xdress/xdress", + "labels_url": "https://api.github.com/repos/xdress/xdress/issues/92/labels{/name}", + "comments_url": "https://api.github.com/repos/xdress/xdress/issues/92/comments", + "events_url": "https://api.github.com/repos/xdress/xdress/issues/92/events", + "html_url": "https://github.com/xdress/xdress/issues/92", + "id": 18243457, + "number": 92, + "title": "astparsers.gccxml_parse() failure on Windows", + "user": { + "login": "ibell", + "id": 1859947, + "avatar_url": "https://avatars.githubusercontent.com/u/1859947?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ibell", + "html_url": "https://github.com/ibell", + "followers_url": "https://api.github.com/users/ibell/followers", + "following_url": "https://api.github.com/users/ibell/following{/other_user}", + "gists_url": "https://api.github.com/users/ibell/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ibell/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ibell/subscriptions", + "organizations_url": "https://api.github.com/users/ibell/orgs", + "repos_url": "https://api.github.com/users/ibell/repos", + "events_url": "https://api.github.com/users/ibell/events{/privacy}", + "received_events_url": "https://api.github.com/users/ibell/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/xdress/xdress/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 10, + "created_at": "2013-08-19T14:47:13Z", + "updated_at": "2013-08-19T21:50:45Z", + "closed_at": null, + "body": "I'm trying to get started with xdress and having a hell of a time. I couldn't use pip to install and had to build from source. Same problem for installation of lxml. Ended up using Chris Gohlke's binaries. GCC-XML was smoother - binary installer available.\r\n\r\nFinally got things installed, but when I try either the mypack example or the example in the tests folder of the source, I get errors like:\r\n\r\n autoall: discovering API names\r\n autoall: no API names to discover!\r\n autodescribe: registering A\r\n autodescribe: registering B\r\n stlwrap: registering C++ standard library types\r\n autodescribe: scraping C/C++ APIs from source\r\n autodescribe: describing A\r\n [Errno 2] No such file or directory: 'build\\\\src/hoover.xml'\r\n\r\nWhat has gone wrong?\r\n\r\nBy the way, windows 7, 32-bit, py 2.7.\r\n\r\nThanks,\r\nIan", + "score": 3.0020185 + }, + { + "url": "https://api.github.com/repos/davesnowdon/naoutil/issues/22", + "repository_url": "https://api.github.com/repos/davesnowdon/naoutil", + "labels_url": "https://api.github.com/repos/davesnowdon/naoutil/issues/22/labels{/name}", + "comments_url": "https://api.github.com/repos/davesnowdon/naoutil/issues/22/comments", + "events_url": "https://api.github.com/repos/davesnowdon/naoutil/issues/22/events", + "html_url": "https://github.com/davesnowdon/naoutil/issues/22", + "id": 18822836, + "number": 22, + "title": "Exception when run on windows 7", + "user": { + "login": "davesnowdon", + "id": 575400, + "avatar_url": "https://avatars.githubusercontent.com/u/575400?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/davesnowdon", + "html_url": "https://github.com/davesnowdon", + "followers_url": "https://api.github.com/users/davesnowdon/followers", + "following_url": "https://api.github.com/users/davesnowdon/following{/other_user}", + "gists_url": "https://api.github.com/users/davesnowdon/gists{/gist_id}", + "starred_url": "https://api.github.com/users/davesnowdon/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/davesnowdon/subscriptions", + "organizations_url": "https://api.github.com/users/davesnowdon/orgs", + "repos_url": "https://api.github.com/users/davesnowdon/repos", + "events_url": "https://api.github.com/users/davesnowdon/events{/privacy}", + "received_events_url": "https://api.github.com/users/davesnowdon/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/davesnowdon/naoutil/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 4, + "created_at": "2013-08-31T13:41:20Z", + "updated_at": "2014-06-24T05:18:57Z", + "closed_at": null, + "body": "Looks like missing dependences for avahi\r\n\r\n Traceback (most recent call last):\r\n File \"src\\main\\python\\recorder\\main.py\", line 30, in \r\n from core import Robot, get_joints_for_chain, is_joint, get_sub_chains\r\n File \"C:\\Users\\dns\\dev\\nao\\nao-recorder\\src\\main\\python\\recorder\\core.py\", li\r\nne 12, in \r\n from naoutil import broker\r\n File \"C:\\Users\\dns\\dev\\nao\\nao-recorder\\src\\main\\python\\naoutil\\broker.py\", l\r\nine 14, in \r\n from naoutil import avahi\r\n File \"C:\\Users\\dns\\dev\\nao\\nao-recorder\\src\\main\\python\\naoutil\\avahi.py\", li\r\nne 11, in \r\n import dbus, gobject\r\n ImportError: No module named dbus", + "score": 2.9311569 + }, + { + "url": "https://api.github.com/repos/pybee/bugjar/issues/2", + "repository_url": "https://api.github.com/repos/pybee/bugjar", + "labels_url": "https://api.github.com/repos/pybee/bugjar/issues/2/labels{/name}", + "comments_url": "https://api.github.com/repos/pybee/bugjar/issues/2/comments", + "events_url": "https://api.github.com/repos/pybee/bugjar/issues/2/events", + "html_url": "https://github.com/pybee/bugjar/issues/2", + "id": 19137992, + "number": 2, + "title": "Bugjar doesn't seem to load on Windows 7", + "user": { + "login": "mstave", + "id": 1755543, + "avatar_url": "https://avatars.githubusercontent.com/u/1755543?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mstave", + "html_url": "https://github.com/mstave", + "followers_url": "https://api.github.com/users/mstave/followers", + "following_url": "https://api.github.com/users/mstave/following{/other_user}", + "gists_url": "https://api.github.com/users/mstave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mstave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mstave/subscriptions", + "organizations_url": "https://api.github.com/users/mstave/orgs", + "repos_url": "https://api.github.com/users/mstave/repos", + "events_url": "https://api.github.com/users/mstave/events{/privacy}", + "received_events_url": "https://api.github.com/users/mstave/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pybee/bugjar/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2013-09-07T04:14:55Z", + "updated_at": "2014-10-08T16:05:50Z", + "closed_at": null, + "body": "bugjar myapp.py \r\n\r\nListening on 0.0.0.0:3742 for a bugjar client\r\nWaiting for connection... [Errno 10061] No connection could be made because the target machine actively refused it\r\nWaiting for connection... [Errno 10061] No connection could be made because the target machine actively refused it\r\n\r\nAnd it just keeps repeating that. \r\nPython 2.7.3, used \"pip install bugjar\".\r\nI tried disabling firewall, etc. ", + "score": 2.8786016 + }, + { + "url": "https://api.github.com/repos/python-beaver/python-beaver/issues/186", + "repository_url": "https://api.github.com/repos/python-beaver/python-beaver", + "labels_url": "https://api.github.com/repos/python-beaver/python-beaver/issues/186/labels{/name}", + "comments_url": "https://api.github.com/repos/python-beaver/python-beaver/issues/186/comments", + "events_url": "https://api.github.com/repos/python-beaver/python-beaver/issues/186/events", + "html_url": "https://github.com/python-beaver/python-beaver/issues/186", + "id": 19194994, + "number": 186, + "title": "Memory leaks in beaver", + "user": { + "login": "skotchio", + "id": 1432812, + "avatar_url": "https://avatars.githubusercontent.com/u/1432812?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/skotchio", + "html_url": "https://github.com/skotchio", + "followers_url": "https://api.github.com/users/skotchio/followers", + "following_url": "https://api.github.com/users/skotchio/following{/other_user}", + "gists_url": "https://api.github.com/users/skotchio/gists{/gist_id}", + "starred_url": "https://api.github.com/users/skotchio/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/skotchio/subscriptions", + "organizations_url": "https://api.github.com/users/skotchio/orgs", + "repos_url": "https://api.github.com/users/skotchio/repos", + "events_url": "https://api.github.com/users/skotchio/events{/privacy}", + "received_events_url": "https://api.github.com/users/skotchio/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/python-beaver/python-beaver/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/python-beaver/python-beaver/milestones/4", + "html_url": "https://github.com/python-beaver/python-beaver/milestones/Release%2032", + "labels_url": "https://api.github.com/repos/python-beaver/python-beaver/milestones/4/labels", + "id": 460629, + "number": 4, + "title": "Release 32", + "description": "", + "creator": { + "login": "josegonzalez", + "id": 65675, + "avatar_url": "https://avatars.githubusercontent.com/u/65675?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/josegonzalez", + "html_url": "https://github.com/josegonzalez", + "followers_url": "https://api.github.com/users/josegonzalez/followers", + "following_url": "https://api.github.com/users/josegonzalez/following{/other_user}", + "gists_url": "https://api.github.com/users/josegonzalez/gists{/gist_id}", + "starred_url": "https://api.github.com/users/josegonzalez/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/josegonzalez/subscriptions", + "organizations_url": "https://api.github.com/users/josegonzalez/orgs", + "repos_url": "https://api.github.com/users/josegonzalez/repos", + "events_url": "https://api.github.com/users/josegonzalez/events{/privacy}", + "received_events_url": "https://api.github.com/users/josegonzalez/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 7, + "closed_issues": 1, + "state": "open", + "created_at": "2013-10-21T17:48:48Z", + "updated_at": "2015-12-03T21:51:07Z", + "due_on": null, + "closed_at": null + }, + "comments": 87, + "created_at": "2013-09-09T13:26:42Z", + "updated_at": "2016-02-19T06:55:21Z", + "closed_at": null, + "body": "I'm just started using of beaver on my production servers. I use upstart (https://github.com/josegonzalez/beaver/blob/master/contrib/beaver-upstart.conf) script for running beaver in background mode. The first time I just started beaver it took around 2% of RAM memory but after 3-5 days it takes 5% - 10% - 19%. It seems there is memory leaks. How can I detect and fix them?", + "score": 0.14866611 + }, + { + "url": "https://api.github.com/repos/PyCQA/pylint/issues/73", + "repository_url": "https://api.github.com/repos/PyCQA/pylint", + "labels_url": "https://api.github.com/repos/PyCQA/pylint/issues/73/labels{/name}", + "comments_url": "https://api.github.com/repos/PyCQA/pylint/issues/73/comments", + "events_url": "https://api.github.com/repos/PyCQA/pylint/issues/73/events", + "html_url": "https://github.com/PyCQA/pylint/issues/73", + "id": 121201511, + "number": 73, + "title": "pylint is unable to import distutils.version under virtualenv", + "user": { + "login": "pylint-bot", + "id": 16198247, + "avatar_url": "https://avatars.githubusercontent.com/u/16198247?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pylint-bot", + "html_url": "https://github.com/pylint-bot", + "followers_url": "https://api.github.com/users/pylint-bot/followers", + "following_url": "https://api.github.com/users/pylint-bot/following{/other_user}", + "gists_url": "https://api.github.com/users/pylint-bot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pylint-bot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pylint-bot/subscriptions", + "organizations_url": "https://api.github.com/users/pylint-bot/orgs", + "repos_url": "https://api.github.com/users/pylint-bot/repos", + "events_url": "https://api.github.com/users/pylint-bot/events{/privacy}", + "received_events_url": "https://api.github.com/users/pylint-bot/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/PyCQA/pylint/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 11, + "created_at": "2013-09-11T07:39:59Z", + "updated_at": "2015-12-09T10:08:05Z", + "closed_at": null, + "body": "Originally reported by: **Chris Rebert (BitBucket: [cvrebert](http://bitbucket.org/cvrebert), GitHub: @cvrebert?)**\n\n----------------------------------------\n\nTestcase:\n```\n#!python\n\n#!/usr/bin/env python2.7\nimport distutils.version\n```\nOutput:\n```\n#!txt\n\n************* Module foo\nfoo.py:1: [C0111(missing-docstring), ] Missing module docstring\nfoo.py:2: [F0401(import-error), ] Unable to import 'distutils.version'\nfoo.py:2: [E0611(no-name-in-module), ] No name 'version' in module 'distutils'\nfoo.py:2: [W0611(unused-import), ] Unused import distutils\n```\nWhich doesn't agree with Python itself:\n```\n#!python\n\n$ python\nPython 2.7.3 (default, Apr 10 2013, 06:20:15) \n[GCC 4.6.3] on linux2\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n>>> import distutils.version\n>>> # no error\n```\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/logilab/pylint/issue/73\n", + "score": 0.35594437 + }, + { + "url": "https://api.github.com/repos/gak/pycallgraph/issues/119", + "repository_url": "https://api.github.com/repos/gak/pycallgraph", + "labels_url": "https://api.github.com/repos/gak/pycallgraph/issues/119/labels{/name}", + "comments_url": "https://api.github.com/repos/gak/pycallgraph/issues/119/comments", + "events_url": "https://api.github.com/repos/gak/pycallgraph/issues/119/events", + "html_url": "https://github.com/gak/pycallgraph/issues/119", + "id": 21875104, + "number": 119, + "title": "pycallgraph executable not created on install", + "user": { + "login": "roger-butler", + "id": 5819545, + "avatar_url": "https://avatars.githubusercontent.com/u/5819545?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/roger-butler", + "html_url": "https://github.com/roger-butler", + "followers_url": "https://api.github.com/users/roger-butler/followers", + "following_url": "https://api.github.com/users/roger-butler/following{/other_user}", + "gists_url": "https://api.github.com/users/roger-butler/gists{/gist_id}", + "starred_url": "https://api.github.com/users/roger-butler/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/roger-butler/subscriptions", + "organizations_url": "https://api.github.com/users/roger-butler/orgs", + "repos_url": "https://api.github.com/users/roger-butler/repos", + "events_url": "https://api.github.com/users/roger-butler/events{/privacy}", + "received_events_url": "https://api.github.com/users/roger-butler/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/gak/pycallgraph/labels/bug", + "name": "bug", + "color": "5319e7" + }, + { + "url": "https://api.github.com/repos/gak/pycallgraph/labels/distribution", + "name": "distribution", + "color": "eb6420" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "gak", + "id": 31338, + "avatar_url": "https://avatars.githubusercontent.com/u/31338?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gak", + "html_url": "https://github.com/gak", + "followers_url": "https://api.github.com/users/gak/followers", + "following_url": "https://api.github.com/users/gak/following{/other_user}", + "gists_url": "https://api.github.com/users/gak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gak/subscriptions", + "organizations_url": "https://api.github.com/users/gak/orgs", + "repos_url": "https://api.github.com/users/gak/repos", + "events_url": "https://api.github.com/users/gak/events{/privacy}", + "received_events_url": "https://api.github.com/users/gak/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 10, + "created_at": "2013-10-31T03:35:36Z", + "updated_at": "2015-06-03T16:27:53Z", + "closed_at": null, + "body": "I downloaded pycallgraph 1.0.1 and untarred it into a temporary directory. My Python environment is Enthought Canopy 1.1 on Windows 7. I ran easy_install pip to install pip, then pip install pycallgraph. Files were copied to my Python environment but not an executable. So I can run pycallgraph using the API but not the command line.\r\n\r\nAny ideas?", + "score": 1.9126669 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/1291", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/1291/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/1291/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/1291/events", + "html_url": "https://github.com/pypa/pip/issues/1291", + "id": 22047886, + "number": 1291, + "title": "pip install: UnicodeDecodeError on Windows", + "user": { + "login": "sscherfke", + "id": 511179, + "avatar_url": "https://avatars.githubusercontent.com/u/511179?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sscherfke", + "html_url": "https://github.com/sscherfke", + "followers_url": "https://api.github.com/users/sscherfke/followers", + "following_url": "https://api.github.com/users/sscherfke/following{/other_user}", + "gists_url": "https://api.github.com/users/sscherfke/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sscherfke/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sscherfke/subscriptions", + "organizations_url": "https://api.github.com/users/sscherfke/orgs", + "repos_url": "https://api.github.com/users/sscherfke/repos", + "events_url": "https://api.github.com/users/sscherfke/events{/privacy}", + "received_events_url": "https://api.github.com/users/sscherfke/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 21, + "created_at": "2013-11-04T12:18:33Z", + "updated_at": "2016-04-03T15:25:31Z", + "closed_at": null, + "body": "`pip install ` fails on Windows, if the projects description (e.g, its long description) is in utf-8.\r\n\r\n```\r\n(simpy) C:\\Users\\sscherfke\\Code\\simpy>pip install .\r\nUnpacking c:\\users\\sscherfke\\code\\simpy\r\n Running setup.py egg_info for package from file:///c%7C%5Cusers%5Csscherfke%5Ccode%5Csimpy\r\n\r\nCleaning up...\r\nException:\r\nTraceback (most recent call last):\r\n File \"C:\\Users\\sscherfke\\Envs\\simpy\\lib\\site-packages\\pip\\basecommand.py\", line 134, in main\r\n status = self.run(options, args)\r\n File \"C:\\Users\\sscherfke\\Envs\\simpy\\lib\\site-packages\\pip\\commands\\install.py\", line 236, in run\r\n requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)\r\n File \"C:\\Users\\sscherfke\\Envs\\simpy\\lib\\site-packages\\pip\\req.py\", line 1134, in prepare_files\r\n req_to_install.run_egg_info()\r\n File \"C:\\Users\\sscherfke\\Envs\\simpy\\lib\\site-packages\\pip\\req.py\", line 264, in run_egg_info\r\n \"%(Name)s==%(Version)s\" % self.pkg_info())\r\n File \"C:\\Users\\sscherfke\\Envs\\simpy\\lib\\site-packages\\pip\\req.py\", line 357, in pkg_info\r\n data = self.egg_info_data('PKG-INFO')\r\n File \"C:\\Users\\sscherfke\\Envs\\simpy\\lib\\site-packages\\pip\\req.py\", line 297, in egg_info_data\r\n data = fp.read()\r\n File \"C:\\Users\\sscherfke\\Envs\\simpy\\lib\\encodings\\cp1252.py\", line 23, in decode\r\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\r\nUnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1235: character maps to \r\n\r\nStoring complete log in C:\\Users\\sscherfke\\pip\\pip.log\r\n```\r\n\r\nThe problem seems to be, that `req.egg_info_data()` (currently [line 317](https://github.com/pypa/pip/blob/develop/pip/req.py#L317) reads the egg-info created by `python setup.py egg_info` with the system's default encoding, which is not utf-8 on Windows (but on most *nix systems).\r\n\r\nWith Python 3, it should be no problem if you use utf-8 in your README/CHANGES/AUTHORS.txt (or whatever), so pip should read files as unicode by default:\r\n\r\nChanging lines 296 and 297 (in pip 1.4.1; 316 and 317 in the repo) to\r\n```\r\nfp = open(filename, 'rb')\r\ndata = fp.read().decode('utf-8')\r\n```\r\nfixes the problem for me.\r\n\r\nThe test setups was:\r\n- Windows 7 64bit\r\n- Python 3.3.1\r\n- pip 1.4.1\r\n- setuptools 0.9.8", + "score": 11.900766 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/1299", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/1299/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/1299/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/1299/events", + "html_url": "https://github.com/pypa/pip/issues/1299", + "id": 22147860, + "number": 1299, + "title": "windows in-place pip upgrades", + "user": { + "login": "qwcode", + "id": 1052224, + "avatar_url": "https://avatars.githubusercontent.com/u/1052224?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/qwcode", + "html_url": "https://github.com/qwcode", + "followers_url": "https://api.github.com/users/qwcode/followers", + "following_url": "https://api.github.com/users/qwcode/following{/other_user}", + "gists_url": "https://api.github.com/users/qwcode/gists{/gist_id}", + "starred_url": "https://api.github.com/users/qwcode/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/qwcode/subscriptions", + "organizations_url": "https://api.github.com/users/qwcode/orgs", + "repos_url": "https://api.github.com/users/qwcode/repos", + "events_url": "https://api.github.com/users/qwcode/events{/privacy}", + "received_events_url": "https://api.github.com/users/qwcode/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pypa/pip/milestones/10", + "html_url": "https://github.com/pypa/pip/milestones/Improve%20our%20User%20Experience", + "labels_url": "https://api.github.com/repos/pypa/pip/milestones/10/labels", + "id": 634715, + "number": 10, + "title": "Improve our User Experience", + "description": "", + "creator": { + "login": "dstufft", + "id": 145979, + "avatar_url": "https://avatars.githubusercontent.com/u/145979?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dstufft", + "html_url": "https://github.com/dstufft", + "followers_url": "https://api.github.com/users/dstufft/followers", + "following_url": "https://api.github.com/users/dstufft/following{/other_user}", + "gists_url": "https://api.github.com/users/dstufft/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dstufft/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dstufft/subscriptions", + "organizations_url": "https://api.github.com/users/dstufft/orgs", + "repos_url": "https://api.github.com/users/dstufft/repos", + "events_url": "https://api.github.com/users/dstufft/events{/privacy}", + "received_events_url": "https://api.github.com/users/dstufft/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 7, + "closed_issues": 8, + "state": "open", + "created_at": "2014-04-19T19:54:18Z", + "updated_at": "2015-09-03T04:56:40Z", + "due_on": null, + "closed_at": null + }, + "comments": 69, + "created_at": "2013-11-05T20:16:59Z", + "updated_at": "2016-05-14T22:24:34Z", + "closed_at": null, + "body": "not sure of the status of `pip install --ugrade pip` on windows.\r\n\r\nneed this for PEP453\r\n\r\n@pfmoore ?\r\n\r\nsee #188 for an old discussion on this.\r\n", + "score": 12.896364 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/130", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/130/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/130/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/130/events", + "html_url": "https://github.com/pypa/setuptools/issues/130", + "id": 144276468, + "number": 130, + "title": "install_data doesn't respect \"--prefix\"", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/major", + "name": "major", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 24, + "created_at": "2014-01-05T13:38:59Z", + "updated_at": "2016-05-22T20:13:38Z", + "closed_at": null, + "body": "Originally reported by: **iElectric (Bitbucket: [iElectric](http://bitbucket.org/iElectric), GitHub: Unknown)**\n\n----------------------------------------\n\nChanging following line in https://bitbucket.org/pypa/setuptools/src/735202ca6848d58bc59022f85cde10af64a61a7e/setuptools/command/bdist_egg.py?at=default#cl-155:\n\n self.call_command('install_data', force=0, root=None)\n\nto \n \n self.call_command('install_data', force=0, root=self.bdist_dir)\n\nMakes data installation respect prefix directory\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/130\n", + "score": 0.33953378 + }, + { + "url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/46", + "repository_url": "https://api.github.com/repos/lionheart/django-pyodbc", + "labels_url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/46/labels{/name}", + "comments_url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/46/comments", + "events_url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/46/events", + "html_url": "https://github.com/lionheart/django-pyodbc/issues/46", + "id": 26093406, + "number": 46, + "title": "Data source name not found, and no default driver specified", + "user": { + "login": "dan-klasson", + "id": 1314838, + "avatar_url": "https://avatars.githubusercontent.com/u/1314838?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dan-klasson", + "html_url": "https://github.com/dan-klasson", + "followers_url": "https://api.github.com/users/dan-klasson/followers", + "following_url": "https://api.github.com/users/dan-klasson/following{/other_user}", + "gists_url": "https://api.github.com/users/dan-klasson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dan-klasson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dan-klasson/subscriptions", + "organizations_url": "https://api.github.com/users/dan-klasson/orgs", + "repos_url": "https://api.github.com/users/dan-klasson/repos", + "events_url": "https://api.github.com/users/dan-klasson/events{/privacy}", + "received_events_url": "https://api.github.com/users/dan-klasson/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/lionheart/django-pyodbc/labels/bug", + "name": "bug", + "color": "f8579a" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2014-01-22T14:32:42Z", + "updated_at": "2014-09-25T02:15:16Z", + "closed_at": null, + "body": "I'm using Ubuntu 12.04 server, Django 1.5.5, pyodbc-3.0.7 and I am trying to connect to a MSSQL 2005 server. I've installed django-pyodbc through pip and modified my settings.py like so:\r\n\r\n DATABASES = {\r\n 'default': {\r\n 'ENGINE': 'django_pyodbc', \r\n 'NAME': 'db_name', \r\n 'USER': 'user_name', \r\n 'PASSWORD': 'password', \r\n 'HOST': 'AB131\\A_INS01', \r\n 'PORT': '', \r\n 'OPTIONS': {\r\n 'host_is_server': True\r\n },\r\n }\r\n }\r\n\r\nBut when I try to run syncdb I get:\r\n\r\n Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')\r\n\r\nThe ODBC driver installed on the Windows machine is:\r\n\r\n SQL Server 6.01.7601.17514 SQLSRV32.DLL\r\n\r\nWhat else do I need to do? Are there any other drivers that I need to install on either the Linux or Windows machine?\r\n\r\n", + "score": 0.8282917 + }, + { + "url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/47", + "repository_url": "https://api.github.com/repos/lionheart/django-pyodbc", + "labels_url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/47/labels{/name}", + "comments_url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/47/comments", + "events_url": "https://api.github.com/repos/lionheart/django-pyodbc/issues/47/events", + "html_url": "https://github.com/lionheart/django-pyodbc/issues/47", + "id": 26301799, + "number": 47, + "title": "Python 3 unicode problem in CursorWrapper.format_sql.", + "user": { + "login": "Jafula", + "id": 434720, + "avatar_url": "https://avatars.githubusercontent.com/u/434720?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Jafula", + "html_url": "https://github.com/Jafula", + "followers_url": "https://api.github.com/users/Jafula/followers", + "following_url": "https://api.github.com/users/Jafula/following{/other_user}", + "gists_url": "https://api.github.com/users/Jafula/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Jafula/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Jafula/subscriptions", + "organizations_url": "https://api.github.com/users/Jafula/orgs", + "repos_url": "https://api.github.com/users/Jafula/repos", + "events_url": "https://api.github.com/users/Jafula/events{/privacy}", + "received_events_url": "https://api.github.com/users/Jafula/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/lionheart/django-pyodbc/labels/bug", + "name": "bug", + "color": "f8579a" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 10, + "created_at": "2014-01-25T21:45:33Z", + "updated_at": "2016-04-25T18:38:37Z", + "closed_at": null, + "body": "Hello,\r\n\r\nI have been trying to get django-pyodbc working to connect to a SQL Server 2000 MSDE instance. I am using Django 1.6.1, Python 3.3 on Ubuntu 12.04.\r\n\r\nTrying to do a simple operation such as \r\n\r\n```\r\nfrom django.db import connections\r\ncursor = connections['default'].cursor()\r\nresult = cursor.execute('select * from customer')\r\n```\r\n\r\ncauses the following to happen\r\n\r\n```\r\nFile \"/.../python3.3/dist-packages/django_pyodbc/base.py\", line 410, in execute\r\n return self.cursor.execute(sql, params)\r\nTypeError: The first argument to execute must be a string or unicode query.\r\n```\r\n\r\nSomeone else experienced the same problem except they were running on Windows. They asked a question on StackOverflow here:\r\n\r\nhttp://stackoverflow.com/questions/21272895/cant-query-sql-server-from-django-using-django-pyodbc\r\n\r\nI tracked the problem down to line 367 in base.py:\r\n\r\n```\r\n sql = sql.encode('utf-8')\r\n```\r\n\r\n```\r\n def format_sql(self, sql, n_params=None):\r\n if not self.driver_supports_utf8 and isinstance(sql, text_type):\r\n # Older FreeTDS (and other ODBC drivers?) don't support Unicode yet, so\r\n # we need to encode the SQL clause itself in utf-8\r\n sql = sql.encode('utf-8')\r\n```\r\n\r\nIt seems that in Python 3, str.encode returns a bytes which is not a string type causing the TypeError to occur.\r\n\r\nSee this comment on StackOverflow for information on how the string/bytes changed from Python 2 to 3.\r\n\r\nhttp://stackoverflow.com/a/11596746/1040695\r\n\r\nThis only seems to occur for the first query getting the product version. I need to do more analysis to see if happens later on.\r\n\r\n```\r\n File \"/.../python3.3/dist-packages/django/db/backends/__init__.py\", line 159, in cursor\r\n cursor = util.CursorWrapper(self._cursor(), self)\r\n File \"/.../python3.3/dist-packages/django_pyodbc/base.py\", line 290, in _cursor\r\n if self.ops.sql_server_ver < 2005:\r\n File \"/.../python3.3/dist-packages/django_pyodbc/operations.py\", line 31, in _get_sql_server_ver\r\n cur.execute(\"SELECT CAST(SERVERPROPERTY('ProductVersion') as varchar)\")\r\n File \"/.../python3.3/dist-packages/django/db/backends/util.py\", line 51, in execute\r\n return self.cursor.execute(sql)\r\n File \"/.../python3.3/dist-packages/django_pyodbc/base.py\", line 410, in execute\r\n return self.cursor.execute(sql, params)\r\nTypeError: The first argument to execute must be a string or unicode query.\r\n```\r\n\r\nAnyway, my quick fix was to comment out lines 364-367 in base.py.\r\n\r\nAlternatively, the bytes could be converted back to a string by changing line 367 to \r\n\r\n```\r\nsql = sql.encode('utf-8').decode('utf-8')\r\n```\r\n\r\nI hope this helps someone workaround this bug. I don't know enough about django-pyodbc to be able to fix this properly.\r\n\r\nMichael.\r\n\r\n\r\n", + "score": 0.5029825 + }, + { + "url": "https://api.github.com/repos/fatiando/fatiando/issues/93", + "repository_url": "https://api.github.com/repos/fatiando/fatiando", + "labels_url": "https://api.github.com/repos/fatiando/fatiando/issues/93/labels{/name}", + "comments_url": "https://api.github.com/repos/fatiando/fatiando/issues/93/comments", + "events_url": "https://api.github.com/repos/fatiando/fatiando/issues/93/events", + "html_url": "https://github.com/fatiando/fatiando/issues/93", + "id": 28899818, + "number": 93, + "title": "installing on Windows (Anaconda)", + "user": { + "login": "ThomasLecocq", + "id": 916937, + "avatar_url": "https://avatars.githubusercontent.com/u/916937?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ThomasLecocq", + "html_url": "https://github.com/ThomasLecocq", + "followers_url": "https://api.github.com/users/ThomasLecocq/followers", + "following_url": "https://api.github.com/users/ThomasLecocq/following{/other_user}", + "gists_url": "https://api.github.com/users/ThomasLecocq/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ThomasLecocq/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ThomasLecocq/subscriptions", + "organizations_url": "https://api.github.com/users/ThomasLecocq/orgs", + "repos_url": "https://api.github.com/users/ThomasLecocq/repos", + "events_url": "https://api.github.com/users/ThomasLecocq/events{/privacy}", + "received_events_url": "https://api.github.com/users/ThomasLecocq/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/fatiando/fatiando/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 2, + "created_at": "2014-03-06T17:53:03Z", + "updated_at": "2014-07-03T13:39:22Z", + "closed_at": null, + "body": "Hi can't manage to install fatiando on my win7 64 box using pip:\r\n\r\nhere is the log... any idea ?\r\n```\r\n------------------------------------------------------------\r\nC:\\Anaconda\\Scripts\\pip-script.py run on 03/06/14 18:50:35\r\nDownloading/unpacking fatiando\r\n Getting page https://pypi.python.org/simple/fatiando/\r\n URLs to search for versions for fatiando:\r\n * https://pypi.python.org/simple/fatiando/\r\n Analyzing links from page https://pypi.python.org/simple/fatiando/\r\n Skipping link https://pypi.python.org/packages/2.7/f/fatiando/fatiando-0.1.win32-py2.7.msi#md5=99d6f87be66ef510362cfaf85e35d2a1 (from https://pypi.python.org/simple/fatiando/); unknown archive format: .msi\r\n Found link https://pypi.python.org/packages/source/f/fatiando/fatiando-0.0.1.tar.gz#md5=5e40b7a2b4e14c478d73bdc8e4b73314 (from https://pypi.python.org/simple/fatiando/), version: 0.0.1\r\n Found link https://pypi.python.org/packages/source/f/fatiando/fatiando-0.0.1.zip#md5=c01d6ea1e901dcaec25eef536dc15f20 (from https://pypi.python.org/simple/fatiando/), version: 0.0.1\r\n Found link https://pypi.python.org/packages/source/f/fatiando/fatiando-0.1.tar.gz#md5=e4ff50882edefb5170238e0cce86d995 (from https://pypi.python.org/simple/fatiando/), version: 0.1\r\n Found link https://pypi.python.org/packages/source/f/fatiando/fatiando-0.1.zip#md5=9dd8f56be38ae35922b21507e1c2d1c0 (from https://pypi.python.org/simple/fatiando/), version: 0.1\r\n Found link https://pypi.python.org/packages/source/f/fatiando/fatiando-0.2.tar.gz#md5=ce38655e22fd116ec3979eacd98b7388 (from https://pypi.python.org/simple/fatiando/), version: 0.2\r\n Found link https://pypi.python.org/packages/source/f/fatiando/fatiando-0.2.zip#md5=d4a4d49407d4a795152097359f4fa20b (from https://pypi.python.org/simple/fatiando/), version: 0.2\r\n Skipping link http://fatiando.readthedocs.org (from https://pypi.python.org/simple/fatiando/); not a file\r\n Skipping link http://readthedocs.org/docs/fatiando/en/latest/contributors.html (from https://pypi.python.org/simple/fatiando/); unknown archive format: .html\r\n Skipping link http://readthedocs.org/docs/fatiando/en/latest/license.html (from https://pypi.python.org/simple/fatiando/); unknown archive format: .html\r\n Skipping link http://www.fatiando.org (from https://pypi.python.org/simple/fatiando/); not a file\r\n Skipping link http://www.fatiando.org/people (from https://pypi.python.org/simple/fatiando/); not a file\r\n Skipping link https://github.com/leouieda/fatiando (from https://pypi.python.org/simple/fatiando/); not a file\r\n Using version 0.2 (newest of versions: 0.2, 0.2, 0.1, 0.1, 0.0.1, 0.0.1)\r\n Downloading from URL https://pypi.python.org/packages/source/f/fatiando/fatiando-0.2.tar.gz#md5=ce38655e22fd116ec3979eacd98b7388 (from https://pypi.python.org/simple/fatiando/)\r\n Running setup.py (path:c:\\windows\\temp\\pip_build_tlecocq\\fatiando\\setup.py) egg_info for package fatiando\r\n running egg_info\r\n creating pip-egg-info\\fatiando.egg-info\r\n writing pip-egg-info\\fatiando.egg-info\\PKG-INFO\r\n writing top-level names to pip-egg-info\\fatiando.egg-info\\top_level.txt\r\n writing dependency_links to pip-egg-info\\fatiando.egg-info\\dependency_links.txt\r\n writing manifest file 'pip-egg-info\\fatiando.egg-info\\SOURCES.txt'\r\n warning: manifest_maker: standard file '-c' not found\r\n \r\n reading manifest file 'pip-egg-info\\fatiando.egg-info\\SOURCES.txt'\r\n reading manifest template 'MANIFEST.in'\r\n writing manifest file 'pip-egg-info\\fatiando.egg-info\\SOURCES.txt'\r\n Source in c:\\windows\\temp\\pip_build_tlecocq\\fatiando has version 0.2, which satisfies requirement fatiando\r\nInstalling collected packages: fatiando\r\n Running setup.py install for fatiando\r\n Running command C:\\Anaconda\\python.exe -c \"import setuptools, tokenize;__file__='c:\\\\windows\\\\temp\\\\pip_build_tlecocq\\\\fatiando\\\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record c:\\windows\\temp\\pip-5oj18q-record\\install-record.txt --single-version-externally-managed --compile\r\n running install\r\n running build\r\n running build_py\r\n creating build\r\n creating build\\lib.win-amd64-2.7\r\n creating build\\lib.win-amd64-2.7\\fatiando\r\n copying fatiando\\constants.py -> build\\lib.win-amd64-2.7\\fatiando\r\n copying fatiando\\datasets.py -> build\\lib.win-amd64-2.7\\fatiando\r\n copying fatiando\\gridder.py -> build\\lib.win-amd64-2.7\\fatiando\r\n copying fatiando\\mesher.py -> build\\lib.win-amd64-2.7\\fatiando\r\n copying fatiando\\utils.py -> build\\lib.win-amd64-2.7\\fatiando\r\n copying fatiando\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\r\n creating build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\basin2d.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\eqlayer.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\euler.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\fourier.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\half_sph_shell.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\harvester.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\imaging.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\polyprism.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\prism.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\sphere.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\talwani.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\tensor.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\tesseroid.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\transform.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\_prism_numpy.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\_tesseroid_numpy.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n copying fatiando\\gravmag\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n creating build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n copying fatiando\\seismic\\epic2d.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n copying fatiando\\seismic\\profile.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n copying fatiando\\seismic\\srtomo.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n copying fatiando\\seismic\\ttime2d.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n copying fatiando\\seismic\\wavefd.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n copying fatiando\\seismic\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n creating build\\lib.win-amd64-2.7\\fatiando\\geothermal\r\n copying fatiando\\geothermal\\climsig.py -> build\\lib.win-amd64-2.7\\fatiando\\geothermal\r\n copying fatiando\\geothermal\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\geothermal\r\n creating build\\lib.win-amd64-2.7\\fatiando\\vis\r\n copying fatiando\\vis\\mpl.py -> build\\lib.win-amd64-2.7\\fatiando\\vis\r\n copying fatiando\\vis\\myv.py -> build\\lib.win-amd64-2.7\\fatiando\\vis\r\n copying fatiando\\vis\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\vis\r\n creating build\\lib.win-amd64-2.7\\fatiando\\gui\r\n copying fatiando\\gui\\simple.py -> build\\lib.win-amd64-2.7\\fatiando\\gui\r\n copying fatiando\\gui\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\gui\r\n creating build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n copying fatiando\\inversion\\base.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n copying fatiando\\inversion\\regularization.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n copying fatiando\\inversion\\solvers.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n copying fatiando\\inversion\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n running build_ext\r\n building 'fatiando.gravmag._prism' extension\r\n creating build\\temp.win-amd64-2.7\r\n creating build\\temp.win-amd64-2.7\\Release\r\n creating build\\temp.win-amd64-2.7\\Release\\fatiando\r\n creating build\\temp.win-amd64-2.7\\Release\\fatiando\\gravmag\r\n C:\\Anaconda\\MinGW\\x86_64-w64-mingw32\\bin\\gcc.exe -DMS_WIN64 -mdll -O -Wall -IC:\\Anaconda\\lib\\site-packages\\numpy\\core\\include -IC:\\Anaconda\\include -IC:\\Anaconda\\PC -c fatiando\\gravmag\\_prism.c -o build\\temp.win-amd64-2.7\\Release\\fatiando\\gravmag\\_prism.o\r\n gcc: error: CreateProcess: No such file or directory\r\n error: command 'gcc' failed with exit status 1\r\n Complete output from command C:\\Anaconda\\python.exe -c \"import setuptools, tokenize;__file__='c:\\\\windows\\\\temp\\\\pip_build_tlecocq\\\\fatiando\\\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record c:\\windows\\temp\\pip-5oj18q-record\\install-record.txt --single-version-externally-managed --compile:\r\n running install\r\n\r\nrunning build\r\n\r\nrunning build_py\r\n\r\ncreating build\r\n\r\ncreating build\\lib.win-amd64-2.7\r\n\r\ncreating build\\lib.win-amd64-2.7\\fatiando\r\n\r\ncopying fatiando\\constants.py -> build\\lib.win-amd64-2.7\\fatiando\r\n\r\ncopying fatiando\\datasets.py -> build\\lib.win-amd64-2.7\\fatiando\r\n\r\ncopying fatiando\\gridder.py -> build\\lib.win-amd64-2.7\\fatiando\r\n\r\ncopying fatiando\\mesher.py -> build\\lib.win-amd64-2.7\\fatiando\r\n\r\ncopying fatiando\\utils.py -> build\\lib.win-amd64-2.7\\fatiando\r\n\r\ncopying fatiando\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\r\n\r\ncreating build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\basin2d.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\eqlayer.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\euler.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\fourier.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\half_sph_shell.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\harvester.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\imaging.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\polyprism.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\prism.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\sphere.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\talwani.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\tensor.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\tesseroid.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\transform.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\_prism_numpy.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\_tesseroid_numpy.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncopying fatiando\\gravmag\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\gravmag\r\n\r\ncreating build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n\r\ncopying fatiando\\seismic\\epic2d.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n\r\ncopying fatiando\\seismic\\profile.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n\r\ncopying fatiando\\seismic\\srtomo.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n\r\ncopying fatiando\\seismic\\ttime2d.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n\r\ncopying fatiando\\seismic\\wavefd.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n\r\ncopying fatiando\\seismic\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\seismic\r\n\r\ncreating build\\lib.win-amd64-2.7\\fatiando\\geothermal\r\n\r\ncopying fatiando\\geothermal\\climsig.py -> build\\lib.win-amd64-2.7\\fatiando\\geothermal\r\n\r\ncopying fatiando\\geothermal\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\geothermal\r\n\r\ncreating build\\lib.win-amd64-2.7\\fatiando\\vis\r\n\r\ncopying fatiando\\vis\\mpl.py -> build\\lib.win-amd64-2.7\\fatiando\\vis\r\n\r\ncopying fatiando\\vis\\myv.py -> build\\lib.win-amd64-2.7\\fatiando\\vis\r\n\r\ncopying fatiando\\vis\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\vis\r\n\r\ncreating build\\lib.win-amd64-2.7\\fatiando\\gui\r\n\r\ncopying fatiando\\gui\\simple.py -> build\\lib.win-amd64-2.7\\fatiando\\gui\r\n\r\ncopying fatiando\\gui\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\gui\r\n\r\ncreating build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n\r\ncopying fatiando\\inversion\\base.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n\r\ncopying fatiando\\inversion\\regularization.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n\r\ncopying fatiando\\inversion\\solvers.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n\r\ncopying fatiando\\inversion\\__init__.py -> build\\lib.win-amd64-2.7\\fatiando\\inversion\r\n\r\nrunning build_ext\r\n\r\nbuilding 'fatiando.gravmag._prism' extension\r\n\r\ncreating build\\temp.win-amd64-2.7\r\n\r\ncreating build\\temp.win-amd64-2.7\\Release\r\n\r\ncreating build\\temp.win-amd64-2.7\\Release\\fatiando\r\n\r\ncreating build\\temp.win-amd64-2.7\\Release\\fatiando\\gravmag\r\n\r\nC:\\Anaconda\\MinGW\\x86_64-w64-mingw32\\bin\\gcc.exe -DMS_WIN64 -mdll -O -Wall -IC:\\Anaconda\\lib\\site-packages\\numpy\\core\\include -IC:\\Anaconda\\include -IC:\\Anaconda\\PC -c fatiando\\gravmag\\_prism.c -o build\\temp.win-amd64-2.7\\Release\\fatiando\\gravmag\\_prism.o\r\n\r\ngcc: error: CreateProcess: No such file or directory\r\n\r\nerror: command 'gcc' failed with exit status 1\r\n\r\n----------------------------------------\r\nCleaning up...\r\n Removing temporary dir c:\\windows\\temp\\pip_build_tlecocq...\r\nCommand C:\\Anaconda\\python.exe -c \"import setuptools, tokenize;__file__='c:\\\\windows\\\\temp\\\\pip_build_tlecocq\\\\fatiando\\\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record c:\\windows\\temp\\pip-5oj18q-record\\install-record.txt --single-version-externally-managed --compile failed with error code 1 in c:\\windows\\temp\\pip_build_tlecocq\\fatiando\r\nException information:\r\nTraceback (most recent call last):\r\n File \"C:\\Anaconda\\lib\\site-packages\\pip\\basecommand.py\", line 122, in main\r\n status = self.run(options, args)\r\n File \"C:\\Anaconda\\lib\\site-packages\\pip\\commands\\install.py\", line 279, in run\r\n requirement_set.install(install_options, global_options, root=options.root_path)\r\n File \"C:\\Anaconda\\lib\\site-packages\\pip\\req.py\", line 1380, in install\r\n requirement.install(install_options, global_options, *args, **kwargs)\r\n File \"C:\\Anaconda\\lib\\site-packages\\pip\\req.py\", line 699, in install\r\n cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)\r\n File \"C:\\Anaconda\\lib\\site-packages\\pip\\util.py\", line 697, in call_subprocess\r\n % (command_desc, proc.returncode, cwd))\r\nInstallationError: Command C:\\Anaconda\\python.exe -c \"import setuptools, tokenize;__file__='c:\\\\windows\\\\temp\\\\pip_build_tlecocq\\\\fatiando\\\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record c:\\windows\\temp\\pip-5oj18q-record\\install-record.txt --single-version-externally-managed --compile failed with error code 1 in c:\\windows\\temp\\pip_build_tlecocq\\fatiando\r\n```", + "score": 4.040541 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/169", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/169/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/169/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/169/events", + "html_url": "https://github.com/pypa/setuptools/issues/169", + "id": 144277209, + "number": 169, + "title": "easy_install does not handle -f option correctly with paths containing spaces", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/minor", + "name": "minor", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2014-03-21T20:22:15Z", + "updated_at": "2016-03-29T14:14:11Z", + "closed_at": null, + "body": "Originally reported by: **jurko (Bitbucket: [jurko](http://bitbucket.org/jurko), GitHub: [jurko](http://github.com/jurko))**\n\n----------------------------------------\n\nRunning ```easy_install``` using its ```-f``` option and passing it a folder path containing spaces as in:\n\n```\n#!text\neasy_install -f \"C:\\I am a\\path containing\\spaces\" pip\n```\n\ndoes not seem to work. ```easy_install``` seems to interpret the given string as a space separated sequence of paths.\n\nUsing such paths in other locations, e.g. in ```--install-dir``` or ```--download-cache``` arguments works fine.\n\nThis has been tested using:\n\n* Windows 7 SP1 x64\n* CPython ```2.4.3```, ```2.4.4```, ```2.5.4```, ```2.6.6```, ```2.7.6```, ```3.1.3```, ```3.2.5```, ```3.3.3```, ```3.3.5``` & ```3.4.0``` (both 32 & 64-bit versions).\n* setuptools ```1.4```, ```1.4.2```, ```3.1```, ```3.3```\n\nHope this helps.\n\nBest regards,\n Jurko Gospodnetić\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/169\n", + "score": 0.9477744 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/216", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/216/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/216/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/216/events", + "html_url": "https://github.com/pypa/setuptools/issues/216", + "id": 144277936, + "number": 216, + "title": "Generated launchers won't launch if there is a space in the path", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/major", + "name": "major", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2014-06-03T22:46:18Z", + "updated_at": "2016-03-29T14:16:55Z", + "closed_at": null, + "body": "Originally reported by: **stevedower (Bitbucket: [stevedower](http://bitbucket.org/stevedower), GitHub: Unknown)**\n\n----------------------------------------\n\n(This is related to https://bitbucket.org/pypa/setuptools/issue/188/nt-escaping-in-shebang-in-easy_install, but that one is now being treated as a feature request and I believe the two changes would be unrelated anyway.)\n\nThe latest setuptools generates .exe launchers that include a shebang line pointing to the python.exe. If there is a space in this path, the path is quoted.\n\nHowever, when the launcher runs, it will add a second set of quotes to the path leading to an error like this:\n\n```text\nFatal error in launcher: Unable to create process using '\"\"D:\\...\\Test VEnv\\Scripts\\python.exe\"\" \"D:\\...\\Test VEnv\\Scripts\\easy_install.exe\" '\n```\n\nI believe the issue is in the launcher rather than the shebang line, since quoting that path is the only way you could support arguments as well as spaces on Windows. IMO, the launcher should not add more quotes to the shebang line when launching.\n\n\nMy repro steps (run at the command prompt):\n\n```text\nC:\\Python27\\python.exe -m virtualenv \"Test VEnv\"\ncd Test VEnv\nScripts\\python.exe -m pip install -U setuptools==4.0.1\n\nrem The current easy_install.exe was generated with setuptools 3.something and it works fine\n\nrem The next line generates a new easy_install.exe with setuptools 4.0.1 and it doesn't work\nScripts\\python.exe -m pip install -U setuptools==4.0.0\nScripts\\easy_install.exe\n```\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/216\n", + "score": 1.0008225 + }, + { + "url": "https://api.github.com/repos/gatech-csl/jes/issues/49", + "repository_url": "https://api.github.com/repos/gatech-csl/jes", + "labels_url": "https://api.github.com/repos/gatech-csl/jes/issues/49/labels{/name}", + "comments_url": "https://api.github.com/repos/gatech-csl/jes/issues/49/comments", + "events_url": "https://api.github.com/repos/gatech-csl/jes/issues/49/events", + "html_url": "https://github.com/gatech-csl/jes/issues/49", + "id": 34969582, + "number": 49, + "title": "Trying to import JES libraries in Jython 2.2.1", + "user": { + "login": "leafstorm", + "id": 271305, + "avatar_url": "https://avatars.githubusercontent.com/u/271305?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/leafstorm", + "html_url": "https://github.com/leafstorm", + "followers_url": "https://api.github.com/users/leafstorm/followers", + "following_url": "https://api.github.com/users/leafstorm/following{/other_user}", + "gists_url": "https://api.github.com/users/leafstorm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/leafstorm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/leafstorm/subscriptions", + "organizations_url": "https://api.github.com/users/leafstorm/orgs", + "repos_url": "https://api.github.com/users/leafstorm/repos", + "events_url": "https://api.github.com/users/leafstorm/events{/privacy}", + "received_events_url": "https://api.github.com/users/leafstorm/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/gatech-csl/jes/labels/Bug", + "name": "Bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/gatech-csl/jes/labels/Imported", + "name": "Imported", + "color": "FFFFFF" + }, + { + "url": "https://api.github.com/repos/gatech-csl/jes/labels/Priority-Medium", + "name": "Priority-Medium", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2014-06-04T15:26:28Z", + "updated_at": "2015-03-14T14:34:13Z", + "closed_at": null, + "body": "_From [jason.r....@gmail.com](https://code.google.com/u/102773798485584509359/) on May 16, 2011 15:07:55_\n\nWhat steps will reproduce the problem? 1. Starting Jython 2.2.1 shell\r\n2. Using the following commands (pg 227 in Intro to Computing and Programming in Python):\r\n>>> import sys\r\n>>> sys.path.insert(0,\"C:\\Program Files\\JES 4.3\\Sources\")\r\n>>> from media import *\r\n3. These lines cause a series of \"ClassNotFound Exceptions\" starting\r\non line 183 in media.py (in the Sources directory).\r\n\r\nIf I comment out lines 184-204 in media.py (namely the makeEmptySound function and the makeEmptySoundBySeconds function), the lines above work and I am able to use the majority of the JES library. What is the expected output? What do you see instead? Expected successful import of all items in media.py. Get an error instead. What version of the product are you using? On what operating system? Using JES 4.3, Jython 2.2.1, on Windows Vista Please provide any additional information below. I should note that I had no issues utilizing the image/color functions in the library outside the JES.\n\n_Original issue: http://code.google.com/p/mediacomp-jes/issues/detail?id=49_", + "score": 0.40525913 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/1891", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/1891/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/1891/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/1891/events", + "html_url": "https://github.com/pypa/pip/issues/1891", + "id": 36364368, + "number": 1891, + "title": "wheel: script with multiprocessing doesn't work on Windows", + "user": { + "login": "schlamar", + "id": 238652, + "avatar_url": "https://avatars.githubusercontent.com/u/238652?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/schlamar", + "html_url": "https://github.com/schlamar", + "followers_url": "https://api.github.com/users/schlamar/followers", + "following_url": "https://api.github.com/users/schlamar/following{/other_user}", + "gists_url": "https://api.github.com/users/schlamar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/schlamar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/schlamar/subscriptions", + "organizations_url": "https://api.github.com/users/schlamar/orgs", + "repos_url": "https://api.github.com/users/schlamar/repos", + "events_url": "https://api.github.com/users/schlamar/events{/privacy}", + "received_events_url": "https://api.github.com/users/schlamar/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 14, + "created_at": "2014-06-24T08:45:22Z", + "updated_at": "2015-11-19T09:37:02Z", + "closed_at": null, + "body": "setup.py\r\n\r\n from setuptools import setup\r\n\r\n setup(\r\n version='0.0.1',\r\n name=\"blub\",\r\n py_modules=[\"blub\"],\r\n entry_points={\r\n 'console_scripts': ['blub = blub:main'],\r\n },\r\n )\r\n\r\n\r\nblub.py\r\n\r\n import multiprocessing\r\n\r\n def f():\r\n pass\r\n\r\n def main():\r\n p = multiprocessing.Process(target=f)\r\n p.start()\r\n p.join()\r\n print 'xxx'\r\n\r\nWhen installing this without wheel, everything is fine:\r\n\r\n $ pip install .\r\n $ blub\r\n xxx\r\n\r\nInstalling this as wheel, the script is broken:\r\n\r\n $ pip uninstall blub\r\n $ pip wheel .\r\n $ pip install wheelhouse/*\r\n $ blub\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"c:\\Python27\\Lib\\multiprocessing\\forking.py\", line 380, in main\r\n prepare(preparation_data)\r\n File \"c:\\Python27\\Lib\\multiprocessing\\forking.py\", line 488, in prepare\r\n assert main_name not in sys.modules, main_name\r\n AssertionError: __main__\r\n xxx\r\n\r\nThis is probably related to http://bugs.python.org/issue10845.", + "score": 3.5934277 + }, + { + "url": "https://api.github.com/repos/cherrypy/cherrypy/issues/1327", + "repository_url": "https://api.github.com/repos/cherrypy/cherrypy", + "labels_url": "https://api.github.com/repos/cherrypy/cherrypy/issues/1327/labels{/name}", + "comments_url": "https://api.github.com/repos/cherrypy/cherrypy/issues/1327/comments", + "events_url": "https://api.github.com/repos/cherrypy/cherrypy/issues/1327/events", + "html_url": "https://github.com/cherrypy/cherrypy/issues/1327", + "id": 152025710, + "number": 1327, + "title": "Python 27(64) Windows pip install misplaces tutorial.conf", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/cherrypy/cherrypy/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/cherrypy/cherrypy/labels/major", + "name": "major", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2014-06-28T16:11:37Z", + "updated_at": "2016-05-29T20:30:25Z", + "closed_at": null, + "body": "Originally reported by: **Jeff Anderson (Bitbucket: [jbanderson](http://bitbucket.org/jbanderson), GitHub: [jbanderson](http://github.com/jbanderson))**\n\n----------------------------------------\n\nTutorial.conf is installed at C:\\Python27\\Lib\\site-packages\\PURELIB\\cherrypy\n\nOnce copied into C:\\Python27\\Lib\\site-packages\\cherrypy\\tutorial it makes it past the exception. \n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/cherrypy/cherrypy/issue/1327\n", + "score": 10.026644 + }, + { + "url": "https://api.github.com/repos/django-silk/silk/issues/26", + "repository_url": "https://api.github.com/repos/django-silk/silk", + "labels_url": "https://api.github.com/repos/django-silk/silk/issues/26/labels{/name}", + "comments_url": "https://api.github.com/repos/django-silk/silk/issues/26/comments", + "events_url": "https://api.github.com/repos/django-silk/silk/issues/26/events", + "html_url": "https://github.com/django-silk/silk/issues/26", + "id": 38107668, + "number": 26, + "title": "IntegrityError: duplicate key value violates unique constraint \"silk_response_request_id_key\"", + "user": { + "login": "synotna", + "id": 3313126, + "avatar_url": "https://avatars.githubusercontent.com/u/3313126?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/synotna", + "html_url": "https://github.com/synotna", + "followers_url": "https://api.github.com/users/synotna/followers", + "following_url": "https://api.github.com/users/synotna/following{/other_user}", + "gists_url": "https://api.github.com/users/synotna/gists{/gist_id}", + "starred_url": "https://api.github.com/users/synotna/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/synotna/subscriptions", + "organizations_url": "https://api.github.com/users/synotna/orgs", + "repos_url": "https://api.github.com/users/synotna/repos", + "events_url": "https://api.github.com/users/synotna/events{/privacy}", + "received_events_url": "https://api.github.com/users/synotna/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/django-silk/silk/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 78, + "created_at": "2014-07-17T17:47:20Z", + "updated_at": "2016-03-29T15:48:34Z", + "closed_at": null, + "body": "After activating silk certain urls began erring with:\r\n\r\nIntegrityError: duplicate key value violates unique constraint \"silk_response_request_id_key\"\r\nDETAIL: Key (request_id)=(1166) already exists.\r\n\r\nSentry stack trace: http://toolbox1.tedc.de:9000/bidev/esldj/group/131/", + "score": 0.16021633 + }, + { + "url": "https://api.github.com/repos/mitsuhiko/pipsi/issues/9", + "repository_url": "https://api.github.com/repos/mitsuhiko/pipsi", + "labels_url": "https://api.github.com/repos/mitsuhiko/pipsi/issues/9/labels{/name}", + "comments_url": "https://api.github.com/repos/mitsuhiko/pipsi/issues/9/comments", + "events_url": "https://api.github.com/repos/mitsuhiko/pipsi/issues/9/events", + "html_url": "https://github.com/mitsuhiko/pipsi/issues/9", + "id": 40617250, + "number": 9, + "title": "pipsi dont work on Windows", + "user": { + "login": "luzfcb", + "id": 807599, + "avatar_url": "https://avatars.githubusercontent.com/u/807599?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/luzfcb", + "html_url": "https://github.com/luzfcb", + "followers_url": "https://api.github.com/users/luzfcb/followers", + "following_url": "https://api.github.com/users/luzfcb/following{/other_user}", + "gists_url": "https://api.github.com/users/luzfcb/gists{/gist_id}", + "starred_url": "https://api.github.com/users/luzfcb/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/luzfcb/subscriptions", + "organizations_url": "https://api.github.com/users/luzfcb/orgs", + "repos_url": "https://api.github.com/users/luzfcb/repos", + "events_url": "https://api.github.com/users/luzfcb/events{/privacy}", + "received_events_url": "https://api.github.com/users/luzfcb/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/mitsuhiko/pipsi/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 12, + "created_at": "2014-08-19T17:45:41Z", + "updated_at": "2015-08-06T20:33:55Z", + "closed_at": null, + "body": "Thanks for that, however, pipsi dont work on Windows\r\n\r\nIf you do not have the intention to support the windows, it would be nice to make this explicit in the README and classifiers field from setup.py \r\n", + "score": 3.4802372 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/1997", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/1997/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/1997/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/1997/events", + "html_url": "https://github.com/pypa/pip/issues/1997", + "id": 41368648, + "number": 1997, + "title": "Using pip launcher on Windows when path contains spaces", + "user": { + "login": "Drekin", + "id": 7892803, + "avatar_url": "https://avatars.githubusercontent.com/u/7892803?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Drekin", + "html_url": "https://github.com/Drekin", + "followers_url": "https://api.github.com/users/Drekin/followers", + "following_url": "https://api.github.com/users/Drekin/following{/other_user}", + "gists_url": "https://api.github.com/users/Drekin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Drekin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Drekin/subscriptions", + "organizations_url": "https://api.github.com/users/Drekin/orgs", + "repos_url": "https://api.github.com/users/Drekin/repos", + "events_url": "https://api.github.com/users/Drekin/events{/privacy}", + "received_events_url": "https://api.github.com/users/Drekin/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 13, + "created_at": "2014-08-28T09:01:24Z", + "updated_at": "2015-11-13T09:09:12Z", + "closed_at": null, + "body": "There is a problem when trying to run pip.exe when the path of Python installation contain spaces. Some launcher code adds extra quotes, which results in incorrect path and results in fatal error in launcher. See for example http://stackoverflow.com/questions/24627525/fatal-error-in-launcher-unable-to-create-process-using-c-program-files-x86. I understand that this is probably issue of the code producing the launcher (there is the same problem with IPython launcher), but I'm not sure where to report it. ", + "score": 7.2904325 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/252", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/252/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/252/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/252/events", + "html_url": "https://github.com/pypa/setuptools/issues/252", + "id": 144278559, + "number": 252, + "title": "Import error on ContextualZipFile inside pkg_resources.py", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/major", + "name": "major", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 20, + "created_at": "2014-09-04T07:33:02Z", + "updated_at": "2016-03-29T14:19:10Z", + "closed_at": null, + "body": "Originally reported by: **jabagawee (Bitbucket: [jabagawee](http://bitbucket.org/jabagawee), GitHub: [jabagawee](http://github.com/jabagawee))**\n\n----------------------------------------\n\nRunning the latest setuptools and pip from get-pip.py on Linux Mint 17 to install any package causes an ImportError to occur when trying to import ContextualZipFile from pkg_resources. The ensure_directory import on the same line has no issues. Checking pkg_resources.py confirms that the class ContextualZipFile does in fact exist.\n\nAlternatively, installing the python-pip package from my package manager makes everything work just fine. I'm probably being very unclear, so feel free to ping me for clarification.\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/252\n", + "score": 1.5902008 + }, + { + "url": "https://api.github.com/repos/forcedotcom/distributions/issues/84", + "repository_url": "https://api.github.com/repos/forcedotcom/distributions", + "labels_url": "https://api.github.com/repos/forcedotcom/distributions/issues/84/labels{/name}", + "comments_url": "https://api.github.com/repos/forcedotcom/distributions/issues/84/comments", + "events_url": "https://api.github.com/repos/forcedotcom/distributions/issues/84/events", + "html_url": "https://github.com/forcedotcom/distributions/issues/84", + "id": 42919269, + "number": 84, + "title": "APPCRASH when trying to install within Anaconda3, Windows 7", + "user": { + "login": "empirical-bayesian", + "id": 4048647, + "avatar_url": "https://avatars.githubusercontent.com/u/4048647?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/empirical-bayesian", + "html_url": "https://github.com/empirical-bayesian", + "followers_url": "https://api.github.com/users/empirical-bayesian/followers", + "following_url": "https://api.github.com/users/empirical-bayesian/following{/other_user}", + "gists_url": "https://api.github.com/users/empirical-bayesian/gists{/gist_id}", + "starred_url": "https://api.github.com/users/empirical-bayesian/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/empirical-bayesian/subscriptions", + "organizations_url": "https://api.github.com/users/empirical-bayesian/orgs", + "repos_url": "https://api.github.com/users/empirical-bayesian/repos", + "events_url": "https://api.github.com/users/empirical-bayesian/events{/privacy}", + "received_events_url": "https://api.github.com/users/empirical-bayesian/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/forcedotcom/distributions/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2014-09-16T18:57:55Z", + "updated_at": "2014-09-16T20:54:42Z", + "closed_at": null, + "body": "Problem Event Name:\tAPPCRASH\r\n Application Name:\tpythonw.exe\r\n Application Version:\t0.0.0.0\r\n Application Timestamp:\t5398d7c1\r\n Fault Module Name:\tpython34.dll\r\n Fault Module Version:\t3.4.1150.1013\r\n Fault Module Timestamp:\t5398d7c0\r\n Exception Code:\tc0000005\r\n Exception Offset:\t00000000000d7881\r\n OS Version:\t6.1.7601.2.1.0.256.4\r\n Locale ID:\t1033\r\n\r\nThis happens whenever I try to install distributions-2.0.26 under Anaconda3 (Python 3.4), in Windows 7, on 64-bit. Happens if pip is used or install is attempted from source. I have tried installing from an Administrator Command Prompt as well, and from the QT window. Also have gone back to distributions-2.0.10 and tried that. This happens trying to install dpmix as well. \r\n\r\nAnaconda3 was just installed today, and I ran updates of numpy, scipy, and anaconda itself.\r\n\r\nThoughts? \r\n", + "score": 2.6478007 + }, + { + "url": "https://api.github.com/repos/LeeKamentsky/python-javabridge/issues/34", + "repository_url": "https://api.github.com/repos/LeeKamentsky/python-javabridge", + "labels_url": "https://api.github.com/repos/LeeKamentsky/python-javabridge/issues/34/labels{/name}", + "comments_url": "https://api.github.com/repos/LeeKamentsky/python-javabridge/issues/34/comments", + "events_url": "https://api.github.com/repos/LeeKamentsky/python-javabridge/issues/34/events", + "html_url": "https://github.com/LeeKamentsky/python-javabridge/issues/34", + "id": 48280594, + "number": 34, + "title": "JVMNotFoundError NameError on pip install", + "user": { + "login": "braymp", + "id": 1186440, + "avatar_url": "https://avatars.githubusercontent.com/u/1186440?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/braymp", + "html_url": "https://github.com/braymp", + "followers_url": "https://api.github.com/users/braymp/followers", + "following_url": "https://api.github.com/users/braymp/following{/other_user}", + "gists_url": "https://api.github.com/users/braymp/gists{/gist_id}", + "starred_url": "https://api.github.com/users/braymp/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/braymp/subscriptions", + "organizations_url": "https://api.github.com/users/braymp/orgs", + "repos_url": "https://api.github.com/users/braymp/repos", + "events_url": "https://api.github.com/users/braymp/events{/privacy}", + "received_events_url": "https://api.github.com/users/braymp/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/LeeKamentsky/python-javabridge/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2014-11-10T16:06:28Z", + "updated_at": "2014-11-10T16:12:50Z", + "closed_at": null, + "body": "While trying to pip install --upgrade from 1.03 to 1.0.9, I get the following error:\r\n```\r\nTraceback (most recent call last):\r\n File \"\", line 17, in \r\n File \"c:\\users\\develo~1\\appdata\\local\\temp\\pip_build_Developer\\javabridge\\setup.py\", line 238, in \r\n ext_modules=ext_modules(),\r\n File \"c:\\users\\develo~1\\appdata\\local\\temp\\pip_build_Developer\\javabridge\\setup.py\", line 58, in ext_modules\r\n raise JVMNotFoundError()\r\nNameError: global name 'JVMNotFoundError' is not defined\r\n```", + "score": 7.062714 + }, + { + "url": "https://api.github.com/repos/BurntSushi/pdoc/issues/20", + "repository_url": "https://api.github.com/repos/BurntSushi/pdoc", + "labels_url": "https://api.github.com/repos/BurntSushi/pdoc/issues/20/labels{/name}", + "comments_url": "https://api.github.com/repos/BurntSushi/pdoc/issues/20/comments", + "events_url": "https://api.github.com/repos/BurntSushi/pdoc/issues/20/events", + "html_url": "https://github.com/BurntSushi/pdoc/issues/20", + "id": 51439109, + "number": 20, + "title": "Windows Powershell", + "user": { + "login": "suidobashi", + "id": 10131194, + "avatar_url": "https://avatars.githubusercontent.com/u/10131194?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/suidobashi", + "html_url": "https://github.com/suidobashi", + "followers_url": "https://api.github.com/users/suidobashi/followers", + "following_url": "https://api.github.com/users/suidobashi/following{/other_user}", + "gists_url": "https://api.github.com/users/suidobashi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/suidobashi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/suidobashi/subscriptions", + "organizations_url": "https://api.github.com/users/suidobashi/orgs", + "repos_url": "https://api.github.com/users/suidobashi/repos", + "events_url": "https://api.github.com/users/suidobashi/events{/privacy}", + "received_events_url": "https://api.github.com/users/suidobashi/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/BurntSushi/pdoc/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2014-12-09T15:18:00Z", + "updated_at": "2015-01-25T18:32:03Z", + "closed_at": null, + "body": "Installed using pip to a Windows 8.1 Powershell environment.\r\n\r\nWas unable to run the pdoc script as a shebang script. (Powershell requires a filename extension to make the script executable.)\r\n\r\nWorkaround was to run directly from the python interpreter.", + "score": 5.3210306 + }, + { + "url": "https://api.github.com/repos/GijsTimmers/kotnetcli/issues/43", + "repository_url": "https://api.github.com/repos/GijsTimmers/kotnetcli", + "labels_url": "https://api.github.com/repos/GijsTimmers/kotnetcli/issues/43/labels{/name}", + "comments_url": "https://api.github.com/repos/GijsTimmers/kotnetcli/issues/43/comments", + "events_url": "https://api.github.com/repos/GijsTimmers/kotnetcli/issues/43/events", + "html_url": "https://github.com/GijsTimmers/kotnetcli/issues/43", + "id": 51445022, + "number": 43, + "title": "Mac OS X mode issues", + "user": { + "login": "Wouter92", + "id": 3626287, + "avatar_url": "https://avatars.githubusercontent.com/u/3626287?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Wouter92", + "html_url": "https://github.com/Wouter92", + "followers_url": "https://api.github.com/users/Wouter92/followers", + "following_url": "https://api.github.com/users/Wouter92/following{/other_user}", + "gists_url": "https://api.github.com/users/Wouter92/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Wouter92/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Wouter92/subscriptions", + "organizations_url": "https://api.github.com/users/Wouter92/orgs", + "repos_url": "https://api.github.com/users/Wouter92/repos", + "events_url": "https://api.github.com/users/Wouter92/events{/privacy}", + "received_events_url": "https://api.github.com/users/Wouter92/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/GijsTimmers/kotnetcli/labels/@medium", + "name": "@medium", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/GijsTimmers/kotnetcli/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/GijsTimmers/kotnetcli/labels/mac-osx", + "name": "mac-osx", + "color": "000000" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "GijsTimmers", + "id": 972314, + "avatar_url": "https://avatars.githubusercontent.com/u/972314?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/GijsTimmers", + "html_url": "https://github.com/GijsTimmers", + "followers_url": "https://api.github.com/users/GijsTimmers/followers", + "following_url": "https://api.github.com/users/GijsTimmers/following{/other_user}", + "gists_url": "https://api.github.com/users/GijsTimmers/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GijsTimmers/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GijsTimmers/subscriptions", + "organizations_url": "https://api.github.com/users/GijsTimmers/orgs", + "repos_url": "https://api.github.com/users/GijsTimmers/repos", + "events_url": "https://api.github.com/users/GijsTimmers/events{/privacy}", + "received_events_url": "https://api.github.com/users/GijsTimmers/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/GijsTimmers/kotnetcli/milestones/1", + "html_url": "https://github.com/GijsTimmers/kotnetcli/milestones/2.0.0:%20'Barndominium'", + "labels_url": "https://api.github.com/repos/GijsTimmers/kotnetcli/milestones/1/labels", + "id": 891295, + "number": 1, + "title": "2.0.0: 'Barndominium'", + "description": "This version should feel pretty complete.", + "creator": { + "login": "GijsTimmers", + "id": 972314, + "avatar_url": "https://avatars.githubusercontent.com/u/972314?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/GijsTimmers", + "html_url": "https://github.com/GijsTimmers", + "followers_url": "https://api.github.com/users/GijsTimmers/followers", + "following_url": "https://api.github.com/users/GijsTimmers/following{/other_user}", + "gists_url": "https://api.github.com/users/GijsTimmers/gists{/gist_id}", + "starred_url": "https://api.github.com/users/GijsTimmers/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/GijsTimmers/subscriptions", + "organizations_url": "https://api.github.com/users/GijsTimmers/orgs", + "repos_url": "https://api.github.com/users/GijsTimmers/repos", + "events_url": "https://api.github.com/users/GijsTimmers/events{/privacy}", + "received_events_url": "https://api.github.com/users/GijsTimmers/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 4, + "closed_issues": 17, + "state": "open", + "created_at": "2014-12-04T10:39:05Z", + "updated_at": "2016-04-27T21:39:16Z", + "due_on": null, + "closed_at": null + }, + "comments": 14, + "created_at": "2014-12-09T16:02:40Z", + "updated_at": "2016-06-08T21:51:16Z", + "closed_at": null, + "body": "These modes currently don't work on Mac OS X:\r\n\r\n- Dialog\r\n```python\r\nTraceback (most recent call last):\r\n File \"./kotnetcli.py\", line 220, in \r\n aanstuurderObvArgumenten(argumentenParser())\r\n File \"./kotnetcli.py\", line 184, in aanstuurderObvArgumenten\r\n co = communicator.DialogCommunicator()\r\n File \"/Volumes/MacintoshHD/Users/wouterfranken/Development/kotnetcliFork/kotnetcli/communicator.py\", line 111, in __init__\r\n self.d = Dialog(dialog=\"dialog\")\r\n File \"/usr/local/lib/python2.7/site-packages/dialog.py\", line 1346, in __init__\r\n self._dialog_prg = _path_to_executable(dialog)\r\n File \"/usr/local/lib/python2.7/site-packages/dialog.py\", line 485, in _path_to_executable\r\n \"can't find the executable for the dialog-like \"\r\ndialog.ExecutableNotFound\r\n```\r\n- Bubble\r\n```python\r\nDynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded!\r\nTraceback (most recent call last):\r\n File \"./kotnetcli.py\", line 220, in \r\n aanstuurderObvArgumenten(argumentenParser())\r\n File \"./kotnetcli.py\", line 191, in aanstuurderObvArgumenten\r\n co = communicator.BubbleCommunicator()\r\n File \"/Volumes/MacintoshHD/Users/wouterfranken/Development/kotnetcliFork/kotnetcli/communicator.py\", line 94, in __init__\r\n notify2.init(\"kotnetcli\")\r\n File \"/usr/local/lib/python2.7/site-packages/notify2.py\", line 93, in init\r\n bus = dbus.SessionBus(mainloop=mainloop)\r\n File \"/usr/local/lib/python2.7/site-packages/dbus/_dbus.py\", line 211, in __new__\r\n mainloop=mainloop)\r\n File \"/usr/local/lib/python2.7/site-packages/dbus/_dbus.py\", line 100, in __new__\r\n bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop)\r\n File \"/usr/local/lib/python2.7/site-packages/dbus/bus.py\", line 122, in __new__\r\n bus = cls._new_for_bus(address_or_type, mainloop=mainloop)\r\ndbus.exceptions.DBusException: org.freedesktop.DBus.Error.NoMemory: Not enough memory\r\n```", + "score": 0.49015692 + }, + { + "url": "https://api.github.com/repos/paramiko/paramiko/issues/452", + "repository_url": "https://api.github.com/repos/paramiko/paramiko", + "labels_url": "https://api.github.com/repos/paramiko/paramiko/issues/452/labels{/name}", + "comments_url": "https://api.github.com/repos/paramiko/paramiko/issues/452/comments", + "events_url": "https://api.github.com/repos/paramiko/paramiko/issues/452/events", + "html_url": "https://github.com/paramiko/paramiko/issues/452", + "id": 51475626, + "number": 452, + "title": "strange unknown type exception when using password auth on windows", + "user": { + "login": "axfelix", + "id": 252047, + "avatar_url": "https://avatars.githubusercontent.com/u/252047?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/axfelix", + "html_url": "https://github.com/axfelix", + "followers_url": "https://api.github.com/users/axfelix/followers", + "following_url": "https://api.github.com/users/axfelix/following{/other_user}", + "gists_url": "https://api.github.com/users/axfelix/gists{/gist_id}", + "starred_url": "https://api.github.com/users/axfelix/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/axfelix/subscriptions", + "organizations_url": "https://api.github.com/users/axfelix/orgs", + "repos_url": "https://api.github.com/users/axfelix/repos", + "events_url": "https://api.github.com/users/axfelix/events{/privacy}", + "received_events_url": "https://api.github.com/users/axfelix/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/paramiko/paramiko/labels/Bug", + "name": "Bug", + "color": "a04040" + }, + { + "url": "https://api.github.com/repos/paramiko/paramiko/labels/Keys", + "name": "Keys", + "color": "bfdadc" + }, + { + "url": "https://api.github.com/repos/paramiko/paramiko/labels/Needs%20investigation", + "name": "Needs investigation", + "color": "fad8c7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 8, + "created_at": "2014-12-09T20:13:42Z", + "updated_at": "2015-10-19T12:07:40Z", + "closed_at": null, + "body": "when running the following code:\r\n\r\nfrom paramiko import SSHClient\r\nfrom paramiko import AutoAddPolicy\r\nssh = SSHClient()\r\nssh.set_missing_host_key_policy(AutoAddPolicy())\r\nssh.connect(server, username=Username, password=Password, look_for_keys=False)\r\n\r\nI'm getting:\r\n\r\n File \"myscript.py\", line 243, in check_zip_and_send\r\n ssh.connect(server, username=Username, password=Password, look_for_keys=False)\r\n File \"c:\\Users\\Alex\\Dropbox\\Python27\\lib\\site-packages\\paramiko\\client.py\", line 307, in connect\r\n look_for_keys, gss_auth, gss_kex, gss_deleg_creds, gss_host)\r\n File \"c:\\Users\\Alex\\Dropbox\\Python27\\lib\\site-packages\\paramiko\\client.py\", line 510, in _auth\r\n self._transport.auth_password(username, password)\r\n File \"c:\\Users\\Alex\\Dropbox\\Python27\\lib\\site-packages\\paramiko\\transport.py\", line 1166, in auth_password\r\n return self.auth_handler.wait_for_response(my_event)\r\n File \"c:\\Users\\Alex\\Dropbox\\Python27\\lib\\site-packages\\paramiko\\auth_handler.py\", line 197, in wait_for_response\r\n raise e\r\nException: Unknown type\r\n\r\nany ideas? not seeing any hits for this one; everything was installed from pip. I can test on OSX and Linux later this evening.", + "score": 2.7114635 + }, + { + "url": "https://api.github.com/repos/python/mypy/issues/548", + "repository_url": "https://api.github.com/repos/python/mypy", + "labels_url": "https://api.github.com/repos/python/mypy/issues/548/labels{/name}", + "comments_url": "https://api.github.com/repos/python/mypy/issues/548/comments", + "events_url": "https://api.github.com/repos/python/mypy/issues/548/events", + "html_url": "https://github.com/python/mypy/issues/548", + "id": 53040941, + "number": 548, + "title": "Cygwin awkwardness", + "user": { + "login": "binkley", + "id": 186421, + "avatar_url": "https://avatars.githubusercontent.com/u/186421?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/binkley", + "html_url": "https://github.com/binkley", + "followers_url": "https://api.github.com/users/binkley/followers", + "following_url": "https://api.github.com/users/binkley/following{/other_user}", + "gists_url": "https://api.github.com/users/binkley/gists{/gist_id}", + "starred_url": "https://api.github.com/users/binkley/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/binkley/subscriptions", + "organizations_url": "https://api.github.com/users/binkley/orgs", + "repos_url": "https://api.github.com/users/binkley/repos", + "events_url": "https://api.github.com/users/binkley/events{/privacy}", + "received_events_url": "https://api.github.com/users/binkley/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/python/mypy/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2014-12-29T13:26:13Z", + "updated_at": "2015-01-04T15:44:52Z", + "closed_at": null, + "body": "Current cygwin python3 is 3.2.5, so I install and use the native Windows Python which is 3.4.2 installed at `C:\\Python34` (the default).\r\n\r\nAfter installing mypy via `python setup.py instal`\" it installs under `C:\\Python34`, as expected, and creates a `C:\\Python34\\Scripts\\mypy` file. Note there is no `mypy.exe` program. (There are such programs for `pip.exe` and `easy_install.exe`, would be helpful for mypy to do likewise.)\r\n\r\nTo run this under cygwin requires an explicit call to `python` (bash turns the script path into a unix-y one, which confuses native Windows python -- not your issue, I mention this for clarity), this:\r\n\r\n```bash\r\n$ export PATH=/cygdrive/c/Python34:$PATH\r\n$ python C:/Python34/Scripts/mypy my-file.py\r\n```\r\n\r\nOddly this complains there is no `enum` module to import, though running `python my-file.py` directly works fine. Running the same under a native CMD prompt behaves the same.\r\n\r\nI'm unsure what about running from a Cygwin bash shell is causing the issue, perhaps it isn't mypy's fault at all but I'm at a loss how to investigate.", + "score": 0.826924 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/19349", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/19349/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/19349/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/19349/events", + "html_url": "https://github.com/saltstack/salt/issues/19349", + "id": 53424972, + "number": 19349, + "title": "Salt-master: Could not deserialize msgpack message", + "user": { + "login": "masterkorp", + "id": 223763, + "avatar_url": "https://avatars.githubusercontent.com/u/223763?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/masterkorp", + "html_url": "https://github.com/masterkorp", + "followers_url": "https://api.github.com/users/masterkorp/followers", + "following_url": "https://api.github.com/users/masterkorp/following{/other_user}", + "gists_url": "https://api.github.com/users/masterkorp/gists{/gist_id}", + "starred_url": "https://api.github.com/users/masterkorp/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/masterkorp/subscriptions", + "organizations_url": "https://api.github.com/users/masterkorp/orgs", + "repos_url": "https://api.github.com/users/masterkorp/repos", + "events_url": "https://api.github.com/users/masterkorp/events{/privacy}", + "received_events_url": "https://api.github.com/users/masterkorp/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Cannot%20Reproduce", + "name": "Cannot Reproduce", + "color": "c7def8" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Info%20Needed", + "name": "Info Needed", + "color": "c7def8" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P1", + "name": "P1", + "color": "2181ee" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Platform", + "name": "Platform", + "color": "fef2c0" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "dmurphy18", + "id": 9943204, + "avatar_url": "https://avatars.githubusercontent.com/u/9943204?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dmurphy18", + "html_url": "https://github.com/dmurphy18", + "followers_url": "https://api.github.com/users/dmurphy18/followers", + "following_url": "https://api.github.com/users/dmurphy18/following{/other_user}", + "gists_url": "https://api.github.com/users/dmurphy18/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dmurphy18/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dmurphy18/subscriptions", + "organizations_url": "https://api.github.com/users/dmurphy18/orgs", + "repos_url": "https://api.github.com/users/dmurphy18/repos", + "events_url": "https://api.github.com/users/dmurphy18/events{/privacy}", + "received_events_url": "https://api.github.com/users/dmurphy18/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/37", + "html_url": "https://github.com/saltstack/salt/milestones/Blocked", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/37/labels", + "id": 343741, + "number": 37, + "title": "Blocked", + "description": "Issues which are blocked in some way, whether they need further discussion, clarification, justification, or are blocked for some other reason.", + "creator": { + "login": "basepi", + "id": 702318, + "avatar_url": "https://avatars.githubusercontent.com/u/702318?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/basepi", + "html_url": "https://github.com/basepi", + "followers_url": "https://api.github.com/users/basepi/followers", + "following_url": "https://api.github.com/users/basepi/following{/other_user}", + "gists_url": "https://api.github.com/users/basepi/gists{/gist_id}", + "starred_url": "https://api.github.com/users/basepi/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/basepi/subscriptions", + "organizations_url": "https://api.github.com/users/basepi/orgs", + "repos_url": "https://api.github.com/users/basepi/repos", + "events_url": "https://api.github.com/users/basepi/events{/privacy}", + "received_events_url": "https://api.github.com/users/basepi/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 447, + "closed_issues": 892, + "state": "open", + "created_at": "2013-05-28T22:24:12Z", + "updated_at": "2016-06-21T22:15:37Z", + "due_on": null, + "closed_at": null + }, + "comments": 42, + "created_at": "2015-01-05T18:10:42Z", + "updated_at": "2016-05-13T08:51:46Z", + "closed_at": null, + "body": "Hello, \r\n\r\nToday salt-master welcomed me with such message:\r\n```\r\n2015-01-05 17:12:08,160 [salt.payload ][CRITICAL][26157] Could not deserialize msgpack message: This o\r\nften happens when trying to read a file not in binary mode.Please open an issue and include the following\r\nerror:\r\n2015-01-05 17:12:08,183 [salt.log.setup ][ERROR ][26157] An un-handled exception was caught by salt's\r\nglobal exception handler:\r\nUnpackValueError:\r\nTraceback (most recent call last):\r\n File \"/usr/bin/salt\", line 10, in \r\n salt_main()\r\n File \"/usr/lib/python2.7/dist-packages/salt/scripts.py\", line 351, in salt_main\r\n client.run()\r\n File \"/usr/lib/python2.7/dist-packages/salt/cli/salt.py\", line 191, in run\r\n for full_ret in cmd_func(**kwargs):\r\n File \"/usr/lib/python2.7/dist-packages/salt/client/__init__.py\", line 594, in cmd_cli\r\n **kwargs):\r\n File \"/usr/lib/python2.7/dist-packages/salt/client/__init__.py\", line 1235, in get_cli_event_returns\r\n expect_minions=(verbose or show_timeout)\r\n File \"/usr/lib/python2.7/dist-packages/salt/client/__init__.py\", line 885, in get_iter_returns\r\n for raw in ret_iter:\r\n File \"/usr/lib/python2.7/dist-packages/salt/client/__init__.py\", line 809, in get_returns_no_block\r\n raw = event.get_event_noblock()\r\n File \"/usr/lib/python2.7/dist-packages/salt/utils/event.py\", line 450, in get_event_noblock\r\n mtag, data = self.unpack(raw, self.serial)\r\n File \"/usr/lib/python2.7/dist-packages/salt/utils/event.py\", line 296, in unpack\r\n data = serial.loads(mdata)\r\n File \"/usr/lib/python2.7/dist-packages/salt/payload.py\", line 95, in loads\r\n return msgpack.loads(msg, use_list=True)\r\n File \"_unpacker.pyx\", line 119, in msgpack._unpacker.unpackb (msgpack/_unpacker.cpp:119)\r\nUnpackValueError\r\n````\r\n\r\nWhile running any ``state.*`` command on any minion.\r\n\r\nRunning ubuntu ``14.04`` and salt:\r\n```\r\nroot@salt-master:~# salt --versions-report\r\n Salt: 2015.2.0-37-g0452b43\r\n Python: 2.7.6 (default, Mar 22 2014, 22:59:56)\r\n Jinja2: 2.7.2\r\n M2Crypto: 0.21.1\r\n msgpack-python: 0.3.0\r\n msgpack-pure: Not Installed\r\n pycrypto: 2.6.1\r\n libnacl: Not Installed\r\n PyYAML: 3.10\r\n ioflo: Not Installed\r\n PyZMQ: 14.0.1\r\n RAET: Not Installed\r\n ZMQ: 4.0.4\r\n Mako: 0.9.1\r\n```", + "score": 0.30368218 + }, + { + "url": "https://api.github.com/repos/jonathanslenders/python-prompt-toolkit/issues/86", + "repository_url": "https://api.github.com/repos/jonathanslenders/python-prompt-toolkit", + "labels_url": "https://api.github.com/repos/jonathanslenders/python-prompt-toolkit/issues/86/labels{/name}", + "comments_url": "https://api.github.com/repos/jonathanslenders/python-prompt-toolkit/issues/86/comments", + "events_url": "https://api.github.com/repos/jonathanslenders/python-prompt-toolkit/issues/86/events", + "html_url": "https://github.com/jonathanslenders/python-prompt-toolkit/issues/86", + "id": 53973280, + "number": 86, + "title": "v0.26 bugs in Windows", + "user": { + "login": "darikg", + "id": 6875882, + "avatar_url": "https://avatars.githubusercontent.com/u/6875882?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/darikg", + "html_url": "https://github.com/darikg", + "followers_url": "https://api.github.com/users/darikg/followers", + "following_url": "https://api.github.com/users/darikg/following{/other_user}", + "gists_url": "https://api.github.com/users/darikg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/darikg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/darikg/subscriptions", + "organizations_url": "https://api.github.com/users/darikg/orgs", + "repos_url": "https://api.github.com/users/darikg/repos", + "events_url": "https://api.github.com/users/darikg/events{/privacy}", + "received_events_url": "https://api.github.com/users/darikg/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/jonathanslenders/python-prompt-toolkit/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 15, + "created_at": "2015-01-10T22:12:02Z", + "updated_at": "2015-12-20T14:03:08Z", + "closed_at": null, + "body": "In python 2.7: Need to press meta+enter to execute a line even when multiline mode is off\r\n\r\nIn python 3.3: Fails with traceback:\r\n```\r\nraceback (most recent call last):\r\n File \"C:\\Users\\dg\\Anaconda3\\envs\\ppt3\\Scripts\\ptpython-script.py\", line 9, in \r\n load_entry_point('prompt-toolkit==0.25', 'console_scripts', 'ptpython')()\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\contrib\\entry_points\\ptpython.py\", line 77, in run\r\n\r\n startup_paths=startup_paths, always_multiline=always_multiline)\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\contrib\\repl.py\", line 189, in embed\r\n cli.start_repl(startup_paths=startup_paths)\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\contrib\\repl.py\", line 48, in start_repl\r\n on_exit=AbortAction.RAISE_EXCEPTION)\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\__init__.py\", line 251, in read_input\r\n next(g)\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\__init__.py\", line 301, in _read_input\r\n self._redraw()\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\__init__.py\", line 191, in _redraw\r\n self.renderer.render(self)\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\renderer.py\", line 465, in render\r\n style=self._style, grayed=cli.is_aborting,\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\renderer.py\", line 345, in output_screen_diff\r\n current_pos = move_cursor(screen.get_cursor_position())\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\renderer.py\", line 232, in move_cursor\r\n output.cursor_up(current_y - new.y)\r\n File \"c:\\users\\dg\\documents\\python\\python-prompt-toolkit\\prompt_toolkit\\terminal\\win32_output.py\", line 166, in cursor_up\r\n sr = self._screen_buffer_info().dwCursorPosition\r\nAttributeError: 'NoneType' object has no attribute 'dwCursorPosition'\r\n```", + "score": 3.5667417 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/328", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/328/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/328/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/328/events", + "html_url": "https://github.com/pypa/setuptools/issues/328", + "id": 144279804, + "number": 328, + "title": "32bit python on 64bit linux gets wrong platform name", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/major", + "name": "major", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 5, + "created_at": "2015-01-11T13:21:04Z", + "updated_at": "2016-03-29T14:23:31Z", + "closed_at": null, + "body": "Originally reported by: **dougn (Bitbucket: [dougn](http://bitbucket.org/dougn), GitHub: [dougn](http://github.com/dougn))**\n\n----------------------------------------\n\nThis is ultimately a bug in distutils.util.get_platform, but as that would require new point releases on all versions of python, we need a better fix sooner. Setuptools is the best place for this as it is already inheriting the Distribution class for it's own use and can override the faulty platform name.\n\nThis works fine on Windows and I think OSX is ok as well, but that should be checked as well.\n\nWhen you run setuptools using a 32bit python on 32bit linux, the platname is still 'linux-x86_64', because distutils.util.get_platform() is using only the OS uname for determining the machine part for linux. \n\nFor most operations using setup tools, this can be overwritten on the commandline, but not on install. This becomes critical with wheel support, as now the problem becomes that pip will download and install the 64bit wheel instead of the 32bit one. There is also no way of overriding this. pip and wheels become useless. pip provides --install-options, and --general-options, but setuptools does not have install or general options for overriding the platname, like bdist and the other building commands do.\n\nOn windows distutils.util.get_platform() uses a backoff to sys.platform, which is 'win32' when running a 32bit python on a 64bit system.\n\nsetuptools is the proper place to deal with this issue. setuptools needs this fix for it's own building and installing. It is also the upstream provider of the Distribution class used by pip and wheel used for searching, converting and installing.\n\n\n[32.env] [dnapoleone@unv-dnapoleone1 numpy-1.9.1]$ which python2.7_32bit\n/home/dnapoleone/32.env/bin/python2.7_32bit\n[32.env] [dnapoleone@unv-dnapoleone1 numpy-1.9.1]$ python2.7_32bit ./setup.py bdist -h\nRunning from numpy source directory.\n/usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'test_suite'\n warnings.warn(msg)\nCommon commands: (see '--help-commands' for more)\n\n setup.py build will build the package underneath 'build/'\n setup.py install will install the package\n\nGlobal options:\n --verbose (-v) run verbosely (default)\n --quiet (-q) run quietly (turns verbosity off)\n --dry-run (-n) don't actually do anything\n --help (-h) show detailed help message\n --no-user-cfg ignore pydistutils.cfg in your home directory\n\nOptions for 'bdist' command:\n --bdist-base (-b) temporary directory for creating built distributions\n --plat-name (-p) platform name to embed in generated filenames (**default:\n linux-x86_64**)\n --formats formats for distribution (comma-separated list)\n --dist-dir (-d) directory to put final built distributions in [default:\n dist]\n --skip-build skip rebuilding everything (for testing/debugging)\n --owner (-u) Owner name used when creating a tar file [default:\n current user]\n --group (-g) Group name used when creating a tar file [default:\n current group]\n --help-formats lists available distribution formats\n\nusage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]\n or: setup.py --help [cmd1 cmd2 ...]\n or: setup.py --help-commands\n or: setup.py cmd --help\n\n\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/328\n", + "score": 0.8846743 + }, + { + "url": "https://api.github.com/repos/flyingrub/scdl/issues/37", + "repository_url": "https://api.github.com/repos/flyingrub/scdl", + "labels_url": "https://api.github.com/repos/flyingrub/scdl/issues/37/labels{/name}", + "comments_url": "https://api.github.com/repos/flyingrub/scdl/issues/37/comments", + "events_url": "https://api.github.com/repos/flyingrub/scdl/issues/37/events", + "html_url": "https://github.com/flyingrub/scdl/issues/37", + "id": 53996297, + "number": 37, + "title": "UnicodeEncodeError: 'charmap' codec can't encode ... character maps to ", + "user": { + "login": "zvpxz", + "id": 10487353, + "avatar_url": "https://avatars.githubusercontent.com/u/10487353?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/zvpxz", + "html_url": "https://github.com/zvpxz", + "followers_url": "https://api.github.com/users/zvpxz/followers", + "following_url": "https://api.github.com/users/zvpxz/following{/other_user}", + "gists_url": "https://api.github.com/users/zvpxz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/zvpxz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/zvpxz/subscriptions", + "organizations_url": "https://api.github.com/users/zvpxz/orgs", + "repos_url": "https://api.github.com/users/zvpxz/repos", + "events_url": "https://api.github.com/users/zvpxz/events{/privacy}", + "received_events_url": "https://api.github.com/users/zvpxz/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/flyingrub/scdl/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/flyingrub/scdl/labels/Windows", + "name": "Windows", + "color": "0052cc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 20, + "created_at": "2015-01-11T16:28:34Z", + "updated_at": "2016-04-24T16:44:07Z", + "closed_at": null, + "body": "![scdl](https://cloud.githubusercontent.com/assets/10487353/5695887/85bbd7ec-9984-11e4-83ab-54dd9260b06d.png)\r\n\r\n\r\nTraceback (most recent call last):\r\n File \"scdl.py\", line 408, in \r\n main()\r\n File \"scdl.py\", line 87, in main\r\n parse_url(arguments[\"-l\"])\r\n File \"scdl.py\", line 160, in parse_url\r\n download_user_tracks(item)\r\n File \"scdl.py\", line 228, in download_user_tracks\r\n download_track(track)\r\n File \"scdl.py\", line 322, in download_track\r\n print(\"Downloading \" + title)\r\n File \"C:\\Python34\\lib\\encodings\\cp437.py\", line 19, in encode\r\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\r\nUnicodeEncodeError: 'charmap' codec can't encode characters in position 12-18: character maps to \r\n\r\nI've tried downloading using the single and all-songs method to download. The song title is \"jungle\" not jungle and I guess it's having trouble encoding those characters. I've read somewhere on overstock that python can use the latin-1 charmap? since it has most if not all of the characters? I've taken for understanding that it has more characters than UTF-8.\r\n", + "score": 0.7277776 + }, + { + "url": "https://api.github.com/repos/diging/tethne/issues/56", + "repository_url": "https://api.github.com/repos/diging/tethne", + "labels_url": "https://api.github.com/repos/diging/tethne/issues/56/labels{/name}", + "comments_url": "https://api.github.com/repos/diging/tethne/issues/56/comments", + "events_url": "https://api.github.com/repos/diging/tethne/issues/56/events", + "html_url": "https://github.com/diging/tethne/issues/56", + "id": 54017164, + "number": 56, + "title": "KeyError while trying to create a topicmodel", + "user": { + "login": "khalidkhannz78PK", + "id": 8924273, + "avatar_url": "https://avatars.githubusercontent.com/u/8924273?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/khalidkhannz78PK", + "html_url": "https://github.com/khalidkhannz78PK", + "followers_url": "https://api.github.com/users/khalidkhannz78PK/followers", + "following_url": "https://api.github.com/users/khalidkhannz78PK/following{/other_user}", + "gists_url": "https://api.github.com/users/khalidkhannz78PK/gists{/gist_id}", + "starred_url": "https://api.github.com/users/khalidkhannz78PK/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/khalidkhannz78PK/subscriptions", + "organizations_url": "https://api.github.com/users/khalidkhannz78PK/orgs", + "repos_url": "https://api.github.com/users/khalidkhannz78PK/repos", + "events_url": "https://api.github.com/users/khalidkhannz78PK/events{/privacy}", + "received_events_url": "https://api.github.com/users/khalidkhannz78PK/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/diging/tethne/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/diging/tethne/milestones/7", + "html_url": "https://github.com/diging/tethne/milestones/v2.0-windows", + "labels_url": "https://api.github.com/repos/diging/tethne/milestones/7/labels", + "id": 1134839, + "number": 7, + "title": "v2.0-windows", + "description": null, + "creator": { + "login": "erickpeirson", + "id": 3451594, + "avatar_url": "https://avatars.githubusercontent.com/u/3451594?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/erickpeirson", + "html_url": "https://github.com/erickpeirson", + "followers_url": "https://api.github.com/users/erickpeirson/followers", + "following_url": "https://api.github.com/users/erickpeirson/following{/other_user}", + "gists_url": "https://api.github.com/users/erickpeirson/gists{/gist_id}", + "starred_url": "https://api.github.com/users/erickpeirson/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/erickpeirson/subscriptions", + "organizations_url": "https://api.github.com/users/erickpeirson/orgs", + "repos_url": "https://api.github.com/users/erickpeirson/repos", + "events_url": "https://api.github.com/users/erickpeirson/events{/privacy}", + "received_events_url": "https://api.github.com/users/erickpeirson/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2015-05-26T22:02:33Z", + "updated_at": "2015-05-26T22:11:25Z", + "due_on": null, + "closed_at": null + }, + "comments": 7, + "created_at": "2015-01-12T03:14:30Z", + "updated_at": "2015-05-26T22:02:51Z", + "closed_at": null, + "body": "Hi there,\r\n\r\nI have been trying to follow the tutorial on topic modelling on the main tethne website. I installed anaconda, tethne, nltk, and also mallet. But when I run the line \r\n\r\nMyLDAModel = MyManager.build(Z=50, max_iter=300, prep=True)\r\n\r\ni get the following error \r\n\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"//anaconda/lib/python2.7/site-packages/tethne/model/managers/__init__.py\", line 108, in build\r\n self.prep()\r\n File \"//anaconda/lib/python2.7/site-packages/tethne/model/managers/__init__.py\", line 89, in prep\r\n self._generate_corpus(meta)\r\n File \"//anaconda/lib/python2.7/site-packages/tethne/model/managers/mallet.py\", line 152, in _generate_corpus\r\n vocab=self.D.features[self.feature]['index'] )\r\n File \"//anaconda/lib/python2.7/site-packages/tethne/writers/corpora.py\", line 59, in to_documents\r\n meta += [ str(metadict[p][f]) for f in metakeys ]\r\nKeyError: '10.1525/rac.2006.16.1.95'\r\n\r\nI will appreciate all the help in this regard ", + "score": 0.6112414 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/19846", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/19846/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/19846/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/19846/events", + "html_url": "https://github.com/saltstack/salt/issues/19846", + "id": 54773369, + "number": 19846, + "title": "Calling saltcloud.* modules and boto* modules on Windows", + "user": { + "login": "highlyunavailable", + "id": 6266125, + "avatar_url": "https://avatars.githubusercontent.com/u/6266125?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/highlyunavailable", + "html_url": "https://github.com/highlyunavailable", + "followers_url": "https://api.github.com/users/highlyunavailable/followers", + "following_url": "https://api.github.com/users/highlyunavailable/following{/other_user}", + "gists_url": "https://api.github.com/users/highlyunavailable/gists{/gist_id}", + "starred_url": "https://api.github.com/users/highlyunavailable/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/highlyunavailable/subscriptions", + "organizations_url": "https://api.github.com/users/highlyunavailable/orgs", + "repos_url": "https://api.github.com/users/highlyunavailable/repos", + "events_url": "https://api.github.com/users/highlyunavailable/events{/privacy}", + "received_events_url": "https://api.github.com/users/highlyunavailable/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Platform", + "name": "Platform", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Windows", + "name": "Windows", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "UtahDave", + "id": 306240, + "avatar_url": "https://avatars.githubusercontent.com/u/306240?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/UtahDave", + "html_url": "https://github.com/UtahDave", + "followers_url": "https://api.github.com/users/UtahDave/followers", + "following_url": "https://api.github.com/users/UtahDave/following{/other_user}", + "gists_url": "https://api.github.com/users/UtahDave/gists{/gist_id}", + "starred_url": "https://api.github.com/users/UtahDave/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/UtahDave/subscriptions", + "organizations_url": "https://api.github.com/users/UtahDave/orgs", + "repos_url": "https://api.github.com/users/UtahDave/repos", + "events_url": "https://api.github.com/users/UtahDave/events{/privacy}", + "received_events_url": "https://api.github.com/users/UtahDave/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/48", + "html_url": "https://github.com/saltstack/salt/milestones/Under%20Review", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/48/labels", + "id": 856250, + "number": 48, + "title": "Under Review", + "description": "", + "creator": { + "login": "ssgward", + "id": 8439595, + "avatar_url": "https://avatars.githubusercontent.com/u/8439595?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ssgward", + "html_url": "https://github.com/ssgward", + "followers_url": "https://api.github.com/users/ssgward/followers", + "following_url": "https://api.github.com/users/ssgward/following{/other_user}", + "gists_url": "https://api.github.com/users/ssgward/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ssgward/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ssgward/subscriptions", + "organizations_url": "https://api.github.com/users/ssgward/orgs", + "repos_url": "https://api.github.com/users/ssgward/repos", + "events_url": "https://api.github.com/users/ssgward/events{/privacy}", + "received_events_url": "https://api.github.com/users/ssgward/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 15, + "closed_issues": 23, + "state": "open", + "created_at": "2014-11-06T17:18:17Z", + "updated_at": "2016-03-28T21:21:23Z", + "due_on": null, + "closed_at": null + }, + "comments": 3, + "created_at": "2015-01-19T14:56:31Z", + "updated_at": "2015-05-26T20:54:03Z", + "closed_at": null, + "body": "I'm working on a masterless Windows setup process on EC2 and I'm having trouble getting boto and salt-cloud working.\r\n\r\nI've installed Python 2.7.9 and added the Boto module with `pip install boto`, but when I go to import it inside of Salt, I get:\r\n\r\n```\r\n File \"c:\\Python27\\lib\\site-packages\\boto\\exception.py\", line 28, in \r\n import xml.sax\r\nImportError: No module named sax\r\n```\r\n\r\nI think my PYTHONPATH is set correctly:\r\n\r\n```C:\\salt>echo %PYTHONPATH%\r\nC:\\Python27;C:\\Python27\\Lib;C:\\Python27\\Lib\\site-packages```\r\n\r\nBut Salt doesn't seem to be using it:\r\n`['C:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\library.zip', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\esky-0.9.8-py2.7.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\jinja2-2.7.1-py2.7.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\markupsafe-0.18-py2.7.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-am64\\\\msgpack_python-0.4.2-py2.7-win-amd64.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\psutil-2.1.0-py2.7-win-amd64.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\pyzmq-14.1.1-py2.7-win-amd64.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\salt-2014.7.1-py2.7.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\setuptools-1.1.6-py2.7.egg', 'c:\\\\salt\\\\salt-2014.7.1.win-amd64\\\\wmi-1.4.9-py2.7.egg', 'C:\\\\salt\\\\salt-2014.7.1.win-amd64', 'c:\\\\Python27', 'c:\\\\Python27\\\\lib\\\\site-packages']`\r\n\r\nI assume this is something to do with how the Python library is vendored into the Salt windows installer directory.\r\n\r\nI also tried making a .egg file and dropping it into the Salt directory, which had the same error until I manually shoved lib/xml/sax.pyc and lib/logging/config.pyc into the library.zip file.\r\n\r\nMy use case is that I'm want to use the salt-cloud modules (http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cloud.html) to look up other machines in EC2 to get their IPs (rather than using a master and a mine) and also add the machine to load balancers/DNS etc.\r\n\r\nI'd like to avoid doing my own Windows fork of Salt just to add a few additional modules. Does anyone have any advice on how to do this? I really would like to be able to use additional modules with Salt, but the Windows packaging process seems to make that very difficult without putting the modules in at build time.\r\n\r\nIf I don't use salt (just import boto) from a normal python prompt, it works fine because xml.sax is in the Python Path because the library is not overridden by the zip file.\r\n\r\nI'm also looking for any guidance to adding modules to Windows minions regardless of the exact package. For example, the Softlayer module for salt-cloud (we also use Softlayer) requires that the Softlayer python package be installed, and the EC2 module for salt-cloud wants apache-libcloud. What's the best way to get these onto Windows minions?", + "score": 2.38537 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/337", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/337/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/337/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/337/events", + "html_url": "https://github.com/pypa/setuptools/issues/337", + "id": 144279935, + "number": 337, + "title": "Windows Launcher mishandles CTRL-C", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/trivial", + "name": "trivial", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2015-01-22T19:56:57Z", + "updated_at": "2016-03-29T14:23:59Z", + "closed_at": null, + "body": "Originally reported by: **acaron (Bitbucket: [acaron](http://bitbucket.org/acaron), GitHub: [acaron](http://github.com/acaron))**\n\n----------------------------------------\n\nI've been experiencing this strange error case where CTRL-C is not properly forwarded, so I started looking into the `launcher.c` file to see if I can fix it. Turns out it can't be truly fixed (and I'll explain why shortly), but I noticed some other inconsitencies while I was looking at the code.\n\nFirst, `GenerateConsoleCtrlEvent()` is called incorrectly. The first argument should be the event to generate, not the child PID (the 2nd argument designates the target process group). This value can only be `CTRL_C_EVENT` (0) or `CTRL_BREAK_EVENT` (1), so this call is no-op unless the child process PID is 0 or 1 (impossible on Windows). To confirm this, you can simply replace this line:\n\n GenerateConsoleCtrlEvent(child_pid,0);\n\nwith this:\n\n if (!GenerateConsoleCtrlEvent(child_pid,0)) {\n fprintf(stderr, \"failed to forward CTRL-C (error: %d).\\n\", GetLastError());\n }\n\nThis will consistenly print \"failed to forward CTRL-C (error: 87).\" every time you press CTRL-C (87 is \"invalid parameter\").\n\nSecond, it should not be called at all. The CTRL-C event is automatically sent to all processes in the same process group, which means that the child process gets the CTRL-C even if you stop generating the event. In addition, if you fix the call to this:\n\n GenerateConsoleCtrlEvent(control_type, 0);\n\nand add a print statement in the console control handler, you will notice that both the launcher and the child process get the CTRL-C event more than once because the launcher is sending this signal to itself, which creates a quasi infinite feedback loop (the control handler is run in a special background thread so a race condition allows it to terminate after the launcher has been spamming itself for a while).\n\nThird, the console control handler should return `FALSE` for control events it doesn't handle. The current implementation returns `TRUE` even if the event is not CTRL-C.\n\nLast, if `CreateProcessA()` or `GetExitCodeProcess()` fail, the launcher returns 0 as the exit status which is misleading for the calling program.\n\nNow, to get back to my original problem: if you use the launcher to start a Python script which stops when there is no more input, like this:\n\n try:\n line = sys.stdin.readline().strip()\n while line:\n # ...\n line = sys.stdin.readline().strip()\n except KeyboardInterrupt:\n pass\n finally:\n print 'Cleaning up.'\n\nand you terminate this script using CTRL-C, sometimes the `KeyboardInterrupt` exception is raised in the `finally` handler. AFAICT, there is a race condition that's caused by Windows: pressing CTRL-C shuts down the standard input, causing it to return an empty line before the CTRL-C event is propagated to all child processes in the process group. To confirm this, you can add a simple sleep after exhausting the standard input, which lets the time for the system to propagate the CTRL-C event and ensures Python's `KeyboardInterrupt` exception is raised before the program's shutdown sequence starts.\n\n try:\n line = sys.stdin.readline().strip()\n while line:\n # ...\n line = sys.stdin.readline().strip()\n # Ensure we get the CTRL-C events on Windows when launched\n # through a distribute/setuptools wrapper executable.\n if os.name == 'nt':\n time.sleep(25)\n except KeyboardInterrupt:\n pass\n finally:\n print 'Cleaning up.'\n\nAFAICT, there is no known way to fix this race condition in the setuptools launcher. However, it would be nice if this quirk was documented as a known problem.\n\nI wrote a pair of C programs to investigate this issue. I'm attaching them in case someone wants to experiment with the errors I'm reporting.\n\nCheers,\n\nAndré\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/337\n", + "score": 3.9262342 + }, + { + "url": "https://api.github.com/repos/OpenHydrology/OH-Auto-Statistical/issues/7", + "repository_url": "https://api.github.com/repos/OpenHydrology/OH-Auto-Statistical", + "labels_url": "https://api.github.com/repos/OpenHydrology/OH-Auto-Statistical/issues/7/labels{/name}", + "comments_url": "https://api.github.com/repos/OpenHydrology/OH-Auto-Statistical/issues/7/comments", + "events_url": "https://api.github.com/repos/OpenHydrology/OH-Auto-Statistical/issues/7/events", + "html_url": "https://github.com/OpenHydrology/OH-Auto-Statistical/issues/7", + "id": 55649671, + "number": 7, + "title": "Windows installer does not work behind proxy", + "user": { + "login": "faph", + "id": 8397805, + "avatar_url": "https://avatars.githubusercontent.com/u/8397805?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/faph", + "html_url": "https://github.com/faph", + "followers_url": "https://api.github.com/users/faph/followers", + "following_url": "https://api.github.com/users/faph/following{/other_user}", + "gists_url": "https://api.github.com/users/faph/gists{/gist_id}", + "starred_url": "https://api.github.com/users/faph/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/faph/subscriptions", + "organizations_url": "https://api.github.com/users/faph/orgs", + "repos_url": "https://api.github.com/users/faph/repos", + "events_url": "https://api.github.com/users/faph/events{/privacy}", + "received_events_url": "https://api.github.com/users/faph/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/OpenHydrology/OH-Auto-Statistical/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "faph", + "id": 8397805, + "avatar_url": "https://avatars.githubusercontent.com/u/8397805?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/faph", + "html_url": "https://github.com/faph", + "followers_url": "https://api.github.com/users/faph/followers", + "following_url": "https://api.github.com/users/faph/following{/other_user}", + "gists_url": "https://api.github.com/users/faph/gists{/gist_id}", + "starred_url": "https://api.github.com/users/faph/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/faph/subscriptions", + "organizations_url": "https://api.github.com/users/faph/orgs", + "repos_url": "https://api.github.com/users/faph/repos", + "events_url": "https://api.github.com/users/faph/events{/privacy}", + "received_events_url": "https://api.github.com/users/faph/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 12, + "created_at": "2015-01-27T17:41:32Z", + "updated_at": "2015-02-18T11:27:52Z", + "closed_at": null, + "body": "The Windows installer uses conda to install the application packages. Conda needs proxy details for it to work behind a proxy. ", + "score": 2.6294718 + }, + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/issues/53", + "repository_url": "https://api.github.com/repos/davide-romanini/comictagger", + "labels_url": "https://api.github.com/repos/davide-romanini/comictagger/issues/53/labels{/name}", + "comments_url": "https://api.github.com/repos/davide-romanini/comictagger/issues/53/comments", + "events_url": "https://api.github.com/repos/davide-romanini/comictagger/issues/53/events", + "html_url": "https://github.com/davide-romanini/comictagger/issues/53", + "id": 56386516, + "number": 53, + "title": "Issue identification failes due to missing PIL", + "user": { + "login": "davide-romanini", + "id": 731199, + "avatar_url": "https://avatars.githubusercontent.com/u/731199?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/davide-romanini", + "html_url": "https://github.com/davide-romanini", + "followers_url": "https://api.github.com/users/davide-romanini/followers", + "following_url": "https://api.github.com/users/davide-romanini/following{/other_user}", + "gists_url": "https://api.github.com/users/davide-romanini/gists{/gist_id}", + "starred_url": "https://api.github.com/users/davide-romanini/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/davide-romanini/subscriptions", + "organizations_url": "https://api.github.com/users/davide-romanini/orgs", + "repos_url": "https://api.github.com/users/davide-romanini/repos", + "events_url": "https://api.github.com/users/davide-romanini/events{/privacy}", + "received_events_url": "https://api.github.com/users/davide-romanini/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/labels/imported", + "name": "imported", + "color": "FFFFFF" + }, + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/labels/Priority-Medium", + "name": "Priority-Medium", + "color": "FFFFFF" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2015-02-03T14:46:30Z", + "updated_at": "2015-02-03T14:46:42Z", + "closed_at": null, + "body": "_From [sas...@gmail.com](https://code.google.com/u/101368042270943327607/) on June 27, 2014 00:04:51_\n\nWhat version of ComicTagger are you using? ComicTagger v1.1.15-beta On what operating system (Mac, Linux, Windows)? What version? Linux / Ubuntu 13.10 GUI or command line? GUI What steps will reproduce the problem? 1. Select item(s) in the list of comics\r\n2. Do Auto-tag\r\n3. Fail - window just opens and closes. What is the expected output? What do you see instead? The last message visible in the window before it closes is \"Python Imaging Library (PIL) is not available and is needed for issue identification\" Please provide any additional information below. doing \"from PIL import WebPImagePlugin\" on this system returns\r\nImportError: cannot import name _webp\r\n\r\nCommenting out comictaggerlib/issueidentifier.py:339 \"return self.match_list\" after PIL check, makes it all work again even if \"PIL\" message appears during identification. \r\n\r\nThis might be python-pil packaging issue but still it should not break CT.\n\n_Original issue: http://code.google.com/p/comictagger/issues/detail?id=53_", + "score": 1.1049227 + }, + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/issues/54", + "repository_url": "https://api.github.com/repos/davide-romanini/comictagger", + "labels_url": "https://api.github.com/repos/davide-romanini/comictagger/issues/54/labels{/name}", + "comments_url": "https://api.github.com/repos/davide-romanini/comictagger/issues/54/comments", + "events_url": "https://api.github.com/repos/davide-romanini/comictagger/issues/54/events", + "html_url": "https://github.com/davide-romanini/comictagger/issues/54", + "id": 56386552, + "number": 54, + "title": "Python Imaging library is not available and is needed for issue identification...", + "user": { + "login": "davide-romanini", + "id": 731199, + "avatar_url": "https://avatars.githubusercontent.com/u/731199?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/davide-romanini", + "html_url": "https://github.com/davide-romanini", + "followers_url": "https://api.github.com/users/davide-romanini/followers", + "following_url": "https://api.github.com/users/davide-romanini/following{/other_user}", + "gists_url": "https://api.github.com/users/davide-romanini/gists{/gist_id}", + "starred_url": "https://api.github.com/users/davide-romanini/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/davide-romanini/subscriptions", + "organizations_url": "https://api.github.com/users/davide-romanini/orgs", + "repos_url": "https://api.github.com/users/davide-romanini/repos", + "events_url": "https://api.github.com/users/davide-romanini/events{/privacy}", + "received_events_url": "https://api.github.com/users/davide-romanini/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/labels/imported", + "name": "imported", + "color": "FFFFFF" + }, + { + "url": "https://api.github.com/repos/davide-romanini/comictagger/labels/Priority-Medium", + "name": "Priority-Medium", + "color": "FFFFFF" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 5, + "created_at": "2015-02-03T14:46:48Z", + "updated_at": "2015-02-03T14:47:11Z", + "closed_at": null, + "body": "_From [murf...@gmail.com](https://code.google.com/u/116469566441608387730/) on June 27, 2014 18:36:45_\n\nWhat version of ComicTagger are you using? 1.1.15-beta On what operating system (Mac, Linux, Windows)? What version? linux GUI or command line? gui What steps will reproduce the problem? 1.Open folder filled with comics\r\n2.select a comic from list on right\r\n3.click auto-tag or auto-identify What is the expected output? What do you see instead? It gives an error when the auto-identify button is clicked and then the matches are displayed in the search box behind it. I can then manually click the OK button to load the tags. If I use auto-tag then the error is displayed in the cli as the following. \r\n\r\nPython Imaging Library (PIL) is not available and is needed for issue identification.\r\nOnline search: No match found. Save aborted\r\n\n============================================================\r\nAuto-Tagging 28 of 100 Please provide any additional information below. PIL is installed properly on my system. Also, all other dependencies are installed as per the instructions.\n\n_Original issue: http://code.google.com/p/comictagger/issues/detail?id=54_", + "score": 0.4688256 + }, + { + "url": "https://api.github.com/repos/pingo-io/pingo-py/issues/72", + "repository_url": "https://api.github.com/repos/pingo-io/pingo-py", + "labels_url": "https://api.github.com/repos/pingo-io/pingo-py/issues/72/labels{/name}", + "comments_url": "https://api.github.com/repos/pingo-io/pingo-py/issues/72/comments", + "events_url": "https://api.github.com/repos/pingo-io/pingo-py/issues/72/events", + "html_url": "https://github.com/pingo-io/pingo-py/issues/72", + "id": 57859884, + "number": 72, + "title": "pingo.detect.MyBoard() doesn't detect Arduino with Firmata with x86 Operating Systems", + "user": { + "login": "rimolive", + "id": 813430, + "avatar_url": "https://avatars.githubusercontent.com/u/813430?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rimolive", + "html_url": "https://github.com/rimolive", + "followers_url": "https://api.github.com/users/rimolive/followers", + "following_url": "https://api.github.com/users/rimolive/following{/other_user}", + "gists_url": "https://api.github.com/users/rimolive/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rimolive/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rimolive/subscriptions", + "organizations_url": "https://api.github.com/users/rimolive/orgs", + "repos_url": "https://api.github.com/users/rimolive/repos", + "events_url": "https://api.github.com/users/rimolive/events{/privacy}", + "received_events_url": "https://api.github.com/users/rimolive/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pingo-io/pingo-py/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/pingo-io/pingo-py/labels/top%20priority", + "name": "top priority", + "color": "eb6420" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 4, + "created_at": "2015-02-16T22:40:59Z", + "updated_at": "2015-09-14T21:26:55Z", + "closed_at": null, + "body": "I'm running a x86 Windows system and Arduino can't be detected from this system. Need to find a way to solve this issue without affect the entire detection process.\r\n\r\n", + "score": 0.9106231 + }, + { + "url": "https://api.github.com/repos/Anaconda-Platform/anaconda-client/issues/131", + "repository_url": "https://api.github.com/repos/Anaconda-Platform/anaconda-client", + "labels_url": "https://api.github.com/repos/Anaconda-Platform/anaconda-client/issues/131/labels{/name}", + "comments_url": "https://api.github.com/repos/Anaconda-Platform/anaconda-client/issues/131/comments", + "events_url": "https://api.github.com/repos/Anaconda-Platform/anaconda-client/issues/131/events", + "html_url": "https://github.com/Anaconda-Platform/anaconda-client/issues/131", + "id": 60751898, + "number": 131, + "title": "Binstar should display user-friendly error message when unable to contact server", + "user": { + "login": "tswicegood", + "id": 4328, + "avatar_url": "https://avatars.githubusercontent.com/u/4328?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tswicegood", + "html_url": "https://github.com/tswicegood", + "followers_url": "https://api.github.com/users/tswicegood/followers", + "following_url": "https://api.github.com/users/tswicegood/following{/other_user}", + "gists_url": "https://api.github.com/users/tswicegood/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tswicegood/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tswicegood/subscriptions", + "organizations_url": "https://api.github.com/users/tswicegood/orgs", + "repos_url": "https://api.github.com/users/tswicegood/repos", + "events_url": "https://api.github.com/users/tswicegood/events{/privacy}", + "received_events_url": "https://api.github.com/users/tswicegood/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/Anaconda-Platform/anaconda-client/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/Anaconda-Platform/anaconda-client/labels/enhancement", + "name": "enhancement", + "color": "84b6eb" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2015-03-12T00:16:33Z", + "updated_at": "2015-03-12T01:11:16Z", + "closed_at": null, + "body": "Attempting to login on Windows 8 via Powershell or CMD, and I receive the following traceback after entering my password:\r\n\r\n```\r\nPS C:\\Users\\builder> binstar login\r\nUsing binstar api site https://api.binstar.org\r\nUsername: tswicegood\r\ntswicegood's Password:\r\n[ConnectionError] ('Connection aborted.', gaierror(11001, 'getaddrinfo failed'))\r\nTraceback (most recent call last):\r\n File \"C:\\Users\\builder\\Miniconda\\Scripts\\binstar-script.py\", line 9, in \r\n load_entry_point('binstar==0.10.1', 'console_scripts', 'binstar')()\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\binstar_client\\scripts\\cli.py\", line 94, in main\r\n description=__doc__, version=version)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\binstar_client\\scripts\\cli.py\", line 76, in binstar_main\r\n return args.main(args)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\binstar_client\\commands\\login.py\", line 92, in main\r\n interactive_login(args)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\binstar_client\\commands\\login.py\", line 87, in interactive_login\r\n token = interactive_get_token(args)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\binstar_client\\commands\\login.py\", line 57, in interactive_get_token\r\n hostname=hostname)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\binstar_client\\__init__.py\", line 88, in authenticate\r\n res = self.session.post(url, auth=(username, password), data=data, headers=headers)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\requests\\sessions.py\", line 504, in post\r\n return self.request('POST', url, data=data, json=json, **kwargs)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\requests\\sessions.py\", line 461, in request\r\n resp = self.send(prep, **send_kwargs)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\requests\\sessions.py\", line 573, in send\r\n r = adapter.send(request, **kwargs)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\requests\\adapters.py\", line 415, in send\r\n raise ConnectionError(err, request=request)\r\nConnectionError: ('Connection aborted.', gaierror(11001, 'getaddrinfo failed'))\r\n```\r\n\r\nThis is binstar 0.10.1. I've tried both the conda installed and pip installed flavors. Neither works.", + "score": 0.60049665 + }, + { + "url": "https://api.github.com/repos/conda/conda-build/issues/346", + "repository_url": "https://api.github.com/repos/conda/conda-build", + "labels_url": "https://api.github.com/repos/conda/conda-build/issues/346/labels{/name}", + "comments_url": "https://api.github.com/repos/conda/conda-build/issues/346/comments", + "events_url": "https://api.github.com/repos/conda/conda-build/issues/346/events", + "html_url": "https://github.com/conda/conda-build/issues/346", + "id": 60757969, + "number": 346, + "title": "Unable to build on a fresh Windows environment with source.git_url", + "user": { + "login": "tswicegood", + "id": 4328, + "avatar_url": "https://avatars.githubusercontent.com/u/4328?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tswicegood", + "html_url": "https://github.com/tswicegood", + "followers_url": "https://api.github.com/users/tswicegood/followers", + "following_url": "https://api.github.com/users/tswicegood/following{/other_user}", + "gists_url": "https://api.github.com/users/tswicegood/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tswicegood/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tswicegood/subscriptions", + "organizations_url": "https://api.github.com/users/tswicegood/orgs", + "repos_url": "https://api.github.com/users/tswicegood/repos", + "events_url": "https://api.github.com/users/tswicegood/events{/privacy}", + "received_events_url": "https://api.github.com/users/tswicegood/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/conda/conda-build/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/conda/conda-build/labels/windows", + "name": "windows", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2015-03-12T01:34:05Z", + "updated_at": "2015-03-12T18:27:53Z", + "closed_at": null, + "body": "Ran into this while trying to build the Anaconda Launcher on Win-64.\r\n\r\n```\r\nC:\\Users\\builder\\anaconda-launcher>conda build conda.recipe\r\nRemoving old build directory\r\nRemoving old work directory\r\nBUILD START: anaconda-launcher-0.2.0alpha-GIT_STUB\r\nFetching package metadata: ........\r\nSolving package specifications: .\r\nThe following packages will be downloaded:\r\n\r\n package | build\r\n ---------------------------|-----------------\r\n nwjs-0.12.0.3alpha | 1 38.0 MB\r\n gulp-3.8.11 | 0 417 KB\r\n ------------------------------------------------------------\r\n Total: 38.4 MB\r\n\r\nThe following NEW packages will be INSTALLED:\r\n\r\n bower: 1.3.12-0\r\n gulp: 3.8.11-0\r\n iojs: 1.2.0-1\r\n nwjs: 0.12.0.3alpha-1\r\n\r\nFetching packages ...\r\nnwjs-0.12.0.3a 100% |###############################| Time: 0:00:00 94.36 MB/s\r\ngulp-3.8.11-0. 100% |###############################| Time: 0:00:01 364.45 kB/s\r\nExtracting packages ...\r\n[ COMPLETE ] |#################################################| 100%\r\nLinking packages ...\r\n[ COMPLETE ] |#################################################| 100%\r\nRemoving old work directory\r\nCloning into bare repository '/cygdrive/c/Users/builder/Miniconda/conda-bld/git_\r\ncache/Users_builder_anaconda-launcher'...\r\ndone.\r\nAn unexpected error has occurred, please consider sending the\r\nfollowing traceback to the conda GitHub issue tracker at:\r\n\r\n https://github.com/conda/conda-build/issues\r\n\r\nInclude the output of the command 'conda info' in your report.\r\n\r\n\r\nTraceback (most recent call last):\r\n File \"C:\\Users\\builder\\Miniconda\\Scripts\\conda-build-script.py\", line 4, in \r\n sys.exit(main())\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\main_build.py\",\r\n line 112, in main\r\n args_func(args, p)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\main_build.py\",\r\n line 321, in args_func\r\n args.func(args, p)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\main_build.py\",\r\n line 280, in execute\r\n channel_urls=channel_urls, override_channels=args.override_channels)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\build.py\", line\r\n 347, in build\r\n source.provide(m.path, m.get_section('source'))\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\source.py\", lin\r\ne 250, in provide\r\n git_source(meta, recipe_dir)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\source.py\", lin\r\ne 115, in git_source\r\n assert isdir(cache_repo)\r\nAssertionError\r\n```\r\n\r\nOutput of `conda info`:\r\n\r\n```\r\n\r\nC:\\Users\\builder\\anaconda-launcher>conda info\r\nCurrent conda install:\r\n\r\n platform : win-64\r\n conda version : 3.9.1\r\n conda-build version : 1.11.0\r\n python version : 2.7.9.final.0\r\n requests version : 2.5.3\r\n root environment : C:\\Users\\builder\\Miniconda (writable)\r\n default environment : C:\\Users\\builder\\Miniconda\r\n envs directories : C:\\Users\\builder\\Miniconda\\envs\r\n package cache : C:\\Users\\builder\\Miniconda\\pkgs\r\n channel URLs : https://conda.binstar.org/t//javascript/win-64/\r\n https://conda.binstar.org/t//javascript/noarch/\r\n http://repo.continuum.io/pkgs/free/win-64/\r\n http://repo.continuum.io/pkgs/free/noarch/\r\n http://repo.continuum.io/pkgs/pro/win-64/\r\n http://repo.continuum.io/pkgs/pro/noarch/\r\n config file : C:\\Users\\builder\\.condarc\r\n is foreign system : False\r\n```\r\n\r\nOutput of `conda list`:\r\n\r\n```\r\nC:\\Users\\builder\\anaconda-launcher>conda list\r\n# packages in environment at C:\\Users\\builder\\Miniconda:\r\n#\r\nbinstar 0.10.1 \r\nclyent 0.3.2 py27_0\r\nconda 3.9.1 py27_0\r\nconda-build 1.11.0 py27_0\r\nconda-env 2.1.3 py27_0\r\ndateutil 2.1 py27_2\r\njinja2 2.7.3 py27_1\r\nmarkupsafe 0.23 py27_0\r\nmenuinst 1.0.4 py27_0\r\npip 6.0.8 py27_0\r\npsutil 2.2.1 py27_0\r\npycosat 0.6.1 py27_0\r\npython 2.7.9 1\r\npython-dateutil 1.5 \r\npytz 2014.9 py27_0\r\npyyaml 3.11 py27_0\r\nrequests 2.5.3 py27_0\r\nsetuptools 14.0 py27_0\r\nsix 1.9.0 py27_0\r\n```\r\n\r\nI ran `conda update --all` to make sure everything was current. `clyent` is now at 0.3.4, instead of 0.3.2, but that's it. After updating, I ran `conda build conda.recipe` again and ended up with this:\r\n\r\n```\r\nC:\\Users\\builder\\anaconda-launcher>conda build conda.recipe\r\nRemoving old build directory\r\nRemoving old work directory\r\nBUILD START: anaconda-launcher-0.2.0alpha-GIT_STUB\r\nFetching package metadata: ........\r\nSolving package specifications: .\r\nThe following NEW packages will be INSTALLED:\r\n\r\n bower: 1.3.12-0\r\n gulp: 3.8.11-0\r\n iojs: 1.2.0-1\r\n nwjs: 0.12.0.3alpha-1\r\n\r\nLinking packages ...\r\n[ COMPLETE ] |#################################################| 100%\r\nRemoving old work directory\r\nfatal: destination path '/cygdrive/c/Users/builder/Miniconda/conda-bld/git_cache\r\n/Users_builder_anaconda-launcher' already exists and is not an empty directory.\r\nAn unexpected error has occurred, please consider sending the\r\nfollowing traceback to the conda GitHub issue tracker at:\r\n\r\n https://github.com/conda/conda-build/issues\r\n\r\nInclude the output of the command 'conda info' in your report.\r\n\r\n\r\nTraceback (most recent call last):\r\n File \"C:\\Users\\builder\\Miniconda\\Scripts\\conda-build-script.py\", line 4, in \r\n sys.exit(main())\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\main_build.py\",\r\n line 112, in main\r\n args_func(args, p)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\main_build.py\",\r\n line 321, in args_func\r\n args.func(args, p)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\main_build.py\",\r\n line 280, in execute\r\n channel_urls=channel_urls, override_channels=args.override_channels)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\build.py\", line\r\n 347, in build\r\n source.provide(m.path, m.get_section('source'))\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\source.py\", lin\r\ne 250, in provide\r\n git_source(meta, recipe_dir)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\site-packages\\conda_build\\source.py\", lin\r\ne 114, in git_source\r\n check_call([git, 'clone', '--mirror', git_url, cache_repo_arg], cwd=recipe_d\r\nir)\r\n File \"C:\\Users\\builder\\Miniconda\\lib\\subprocess.py\", line 540, in check_call\r\n raise CalledProcessError(retcode, cmd)\r\nsubprocess.CalledProcessError: Command '['C:\\\\Program Files (x86)\\\\Git\\\\cmd\\\\git\r\n.exe', 'clone', '--mirror', u'../', u'/cygdrive/c/Users/builder/Miniconda/conda-\r\nbld/git_cache/Users_builder_anaconda-launcher']' returned non-zero exit status 1\r\n28\r\n```\r\n\r\nI've installed Git via the official installer. The first install was for the Git GUI, the second install had it add the minimal commands to the Windows Command Prompt. I think that might be what's causing the `cygdrive` code to appear. I get the same error message when running via Git Bash and CMD.\r\n\r\nGoing to try upgrading to Git for Windows v2.3 and see if that solves this issue.", + "score": 2.105983 + }, + { + "url": "https://api.github.com/repos/robertlugg/easygui/issues/67", + "repository_url": "https://api.github.com/repos/robertlugg/easygui", + "labels_url": "https://api.github.com/repos/robertlugg/easygui/issues/67/labels{/name}", + "comments_url": "https://api.github.com/repos/robertlugg/easygui/issues/67/comments", + "events_url": "https://api.github.com/repos/robertlugg/easygui/issues/67/events", + "html_url": "https://github.com/robertlugg/easygui/issues/67", + "id": 64329257, + "number": 67, + "title": "Window widths are too wide when on a dual screen system", + "user": { + "login": "noisygecko", + "id": 210260, + "avatar_url": "https://avatars.githubusercontent.com/u/210260?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/noisygecko", + "html_url": "https://github.com/noisygecko", + "followers_url": "https://api.github.com/users/noisygecko/followers", + "following_url": "https://api.github.com/users/noisygecko/following{/other_user}", + "gists_url": "https://api.github.com/users/noisygecko/gists{/gist_id}", + "starred_url": "https://api.github.com/users/noisygecko/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/noisygecko/subscriptions", + "organizations_url": "https://api.github.com/users/noisygecko/orgs", + "repos_url": "https://api.github.com/users/noisygecko/repos", + "events_url": "https://api.github.com/users/noisygecko/events{/privacy}", + "received_events_url": "https://api.github.com/users/noisygecko/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/robertlugg/easygui/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/robertlugg/easygui/labels/question", + "name": "question", + "color": "cc317c" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "robertlugg", + "id": 6054540, + "avatar_url": "https://avatars.githubusercontent.com/u/6054540?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/robertlugg", + "html_url": "https://github.com/robertlugg", + "followers_url": "https://api.github.com/users/robertlugg/followers", + "following_url": "https://api.github.com/users/robertlugg/following{/other_user}", + "gists_url": "https://api.github.com/users/robertlugg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/robertlugg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/robertlugg/subscriptions", + "organizations_url": "https://api.github.com/users/robertlugg/orgs", + "repos_url": "https://api.github.com/users/robertlugg/repos", + "events_url": "https://api.github.com/users/robertlugg/events{/privacy}", + "received_events_url": "https://api.github.com/users/robertlugg/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 4, + "created_at": "2015-03-25T17:38:55Z", + "updated_at": "2015-03-31T14:16:13Z", + "closed_at": null, + "body": "When using a dual screen, side-by-side system the default way of calculating window sizes generates windows that are too wide. It would be better to restrict the aspect ration of the windows to some more reasonable one rather than purely going by the system screen height and width.", + "score": 0.7720231 + }, + { + "url": "https://api.github.com/repos/gijzelaerr/python-snap7/issues/42", + "repository_url": "https://api.github.com/repos/gijzelaerr/python-snap7", + "labels_url": "https://api.github.com/repos/gijzelaerr/python-snap7/issues/42/labels{/name}", + "comments_url": "https://api.github.com/repos/gijzelaerr/python-snap7/issues/42/comments", + "events_url": "https://api.github.com/repos/gijzelaerr/python-snap7/issues/42/events", + "html_url": "https://github.com/gijzelaerr/python-snap7/issues/42", + "id": 65388567, + "number": 42, + "title": "Different behavior of read_area on windows and linux. read_area throws ValueError", + "user": { + "login": "oldfellow", + "id": 5522491, + "avatar_url": "https://avatars.githubusercontent.com/u/5522491?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/oldfellow", + "html_url": "https://github.com/oldfellow", + "followers_url": "https://api.github.com/users/oldfellow/followers", + "following_url": "https://api.github.com/users/oldfellow/following{/other_user}", + "gists_url": "https://api.github.com/users/oldfellow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/oldfellow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/oldfellow/subscriptions", + "organizations_url": "https://api.github.com/users/oldfellow/orgs", + "repos_url": "https://api.github.com/users/oldfellow/repos", + "events_url": "https://api.github.com/users/oldfellow/events{/privacy}", + "received_events_url": "https://api.github.com/users/oldfellow/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/gijzelaerr/python-snap7/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/gijzelaerr/python-snap7/milestones/6", + "html_url": "https://github.com/gijzelaerr/python-snap7/milestones/1.0", + "labels_url": "https://api.github.com/repos/gijzelaerr/python-snap7/milestones/6/labels", + "id": 825227, + "number": 6, + "title": "1.0", + "description": null, + "creator": { + "login": "gijzelaerr", + "id": 326308, + "avatar_url": "https://avatars.githubusercontent.com/u/326308?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gijzelaerr", + "html_url": "https://github.com/gijzelaerr", + "followers_url": "https://api.github.com/users/gijzelaerr/followers", + "following_url": "https://api.github.com/users/gijzelaerr/following{/other_user}", + "gists_url": "https://api.github.com/users/gijzelaerr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gijzelaerr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gijzelaerr/subscriptions", + "organizations_url": "https://api.github.com/users/gijzelaerr/orgs", + "repos_url": "https://api.github.com/users/gijzelaerr/repos", + "events_url": "https://api.github.com/users/gijzelaerr/events{/privacy}", + "received_events_url": "https://api.github.com/users/gijzelaerr/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 4, + "closed_issues": 1, + "state": "open", + "created_at": "2014-10-14T08:37:31Z", + "updated_at": "2016-05-12T09:03:01Z", + "due_on": null, + "closed_at": null + }, + "comments": 17, + "created_at": "2015-03-31T07:38:51Z", + "updated_at": "2016-05-12T09:03:01Z", + "closed_at": null, + "body": "Hi,\r\nEnvironment:\r\nOS (Linux and Windows 7 ) : 64bit.\r\nsnap7-full-1.3.0.tar.gz\r\npython-snap7-0.4.tar.gz\r\n\r\nI have different behavior executing the same query on windows and linux.\r\nI want to read 6 Objects from DB2 \r\nread_area(132, 2, 0, 6)\r\n\r\nThe result on Windows is fine:\r\n00 AB CD 11 B9 01 # This matches to the data in the plc.\r\n\r\nOn Linux I get the error:\r\nFile \"/usr/local/lib/python2.6/site-packages/snap7/client.py\", line 210, in read_area\r\n return bytearray(data)\r\nValueError: byte must be in range(0, 256)\r\n\r\nFor debugging I add the following line in front of the return in line 210:\r\nprint \"\".join(\"%02x \" % b for b in data)\r\n\r\nThis gives me the Information that on linux the bytestream looks like this:\r\n00 -55 -33 11 -47 01\r\nAnd \"-55\" of course throws the ValueError.\r\n\r\nWhen I run the same query with snap7 ( cpp or plain-c ), I get the correct values on windows and linux. Therefore I guess the issue must be somewhere in the python interface.\r\n\r\nAny idea how to solve this issue?\r\n\r\nBecause I'm running python 2.6 I need to modify the util.py, because in python 2.6 the Collections doesn't provide OrderedDict.\r\nI have installed ordereddict with pip and modified line 11 in util.py:\r\n# from Collections import OrderedDict\r\nimport ordereddict\r\nMaybe this creates the issue. But I don't know how to solve, because I can't change to python 2.7.\r\n\r\nThanks in advance.", + "score": 2.779317 + }, + { + "url": "https://api.github.com/repos/conda/conda/issues/1239", + "repository_url": "https://api.github.com/repos/conda/conda", + "labels_url": "https://api.github.com/repos/conda/conda/issues/1239/labels{/name}", + "comments_url": "https://api.github.com/repos/conda/conda/issues/1239/comments", + "events_url": "https://api.github.com/repos/conda/conda/issues/1239/events", + "html_url": "https://github.com/conda/conda/issues/1239", + "id": 65638460, + "number": 1239, + "title": "pandas 0.16 can't be imported from the root environment on windows ", + "user": { + "login": "ikalev", + "id": 3067425, + "avatar_url": "https://avatars.githubusercontent.com/u/3067425?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ikalev", + "html_url": "https://github.com/ikalev", + "followers_url": "https://api.github.com/users/ikalev/followers", + "following_url": "https://api.github.com/users/ikalev/following{/other_user}", + "gists_url": "https://api.github.com/users/ikalev/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ikalev/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ikalev/subscriptions", + "organizations_url": "https://api.github.com/users/ikalev/orgs", + "repos_url": "https://api.github.com/users/ikalev/repos", + "events_url": "https://api.github.com/users/ikalev/events{/privacy}", + "received_events_url": "https://api.github.com/users/ikalev/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/conda/conda/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/conda/conda/labels/Windows", + "name": "Windows", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 10, + "created_at": "2015-04-01T09:03:43Z", + "updated_at": "2015-05-21T18:57:37Z", + "closed_at": null, + "body": "Pandas 0.15.* works fine in the root environment on windows:\r\n\r\n```shell\r\nC:\\Users\\kalev>conda update python\r\npython 2.7.6 0\r\n\r\nC:\\Users\\kalev>python -c \"import pandas\"\r\n```\r\n\r\nAfter upgrading to 0.16, pandas is not longer importable:\r\n\r\n```shell\r\nC:\\Users\\kalev>conda update pandas\r\nThe following packages will be UPDATED:\r\n pandas: 0.15.2-np19py27_1 --> 0.16.0-np19py27_1\r\n\r\nC:\\Users\\kalev>python -c \"import pandas\"\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"C:\\Anaconda\\lib\\site-packages\\pandas\\__init__.py\", line 47, in \r\n import pandas.core.config_init\r\n File \"C:\\Anaconda\\lib\\site-packages\\pandas\\core\\config_init.py\", line 17, in \r\n from pandas.core.format import detect_console_encoding\r\n File \"C:\\Anaconda\\lib\\site-packages\\pandas\\core\\format.py\", line 24, in \r\n from pandas.tseries.period import PeriodIndex, DatetimeIndex\r\n File \"C:\\Anaconda\\lib\\site-packages\\pandas\\tseries\\period.py\", line 8, in \r\n import pandas.tseries.frequencies as frequencies\r\n File \"C:\\Anaconda\\lib\\site-packages\\pandas\\tseries\\frequencies.py\", line 9, in \r\n from pandas.tseries.offsets import DateOffset\r\n File \"C:\\Anaconda\\lib\\site-packages\\pandas\\tseries\\offsets.py\", line 2152, in \r\n class Nano(Tick):\r\n File \"C:\\Anaconda\\lib\\site-packages\\pandas\\tseries\\offsets.py\", line 2153, in Nano\r\n _inc = Timedelta(nanoseconds=1)\r\n File \"pandas\\tslib.pyx\", line 1722, in pandas.tslib.Timedelta.__new__ (pandas\\tslib.c:29707)\r\nValueError: cannot construct a TimeDelta from the passed arguments, allowed keywords are [days, seconds, microseconds, m\r\nilliseconds, minutes, hours, weeks]\r\n```\r\n\r\nIt works fine in a virtual environment, where ``python`` can be updated to 2.7.9. But 2.7.6 and 2.7.8 appear to be incompatible with ``pandas 0.16``. Is there a way to update the python package in the root environment?", + "score": 1.884768 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/2669", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/2669/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/2669/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/2669/events", + "html_url": "https://github.com/pypa/pip/issues/2669", + "id": 67446881, + "number": 2669, + "title": "pip 6.0.8 AttributeError when upgrading to 6.1.1 in virtualenv", + "user": { + "login": "ratiotile", + "id": 7064626, + "avatar_url": "https://avatars.githubusercontent.com/u/7064626?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ratiotile", + "html_url": "https://github.com/ratiotile", + "followers_url": "https://api.github.com/users/ratiotile/followers", + "following_url": "https://api.github.com/users/ratiotile/following{/other_user}", + "gists_url": "https://api.github.com/users/ratiotile/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ratiotile/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ratiotile/subscriptions", + "organizations_url": "https://api.github.com/users/ratiotile/orgs", + "repos_url": "https://api.github.com/users/ratiotile/repos", + "events_url": "https://api.github.com/users/ratiotile/events{/privacy}", + "received_events_url": "https://api.github.com/users/ratiotile/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 17, + "created_at": "2015-04-09T20:42:09Z", + "updated_at": "2016-03-03T13:34:37Z", + "closed_at": null, + "body": "Windows 7, Python 3.4.3, updated pip in base. Created virtualenv, saw that it was still on pip 6.0.8\r\n\r\nActivated venv, ran `python -m pip install pip -U`\r\n\r\nlog:\r\n```\r\nInstalling collected packages: pip\r\n Found existing installation: pip 6.0.8\r\n Uninstalling pip-6.0.8:\r\n Successfully uninstalled pip-6.0.8\r\n\r\n Rolling back uninstall of pip\r\n...\r\n result = finder(distlib_package).find(name).bytes\r\n AttributeError: 'NoneType' object has no attribute 'bytes'\r\n```\r\n\r\nHowever, next time I run pip -V, it reports pip 6.1.1, so what is the effect of the error?", + "score": 4.659275 + }, + { + "url": "https://api.github.com/repos/jonathanslenders/ptpython/issues/34", + "repository_url": "https://api.github.com/repos/jonathanslenders/ptpython", + "labels_url": "https://api.github.com/repos/jonathanslenders/ptpython/issues/34/labels{/name}", + "comments_url": "https://api.github.com/repos/jonathanslenders/ptpython/issues/34/comments", + "events_url": "https://api.github.com/repos/jonathanslenders/ptpython/issues/34/events", + "html_url": "https://github.com/jonathanslenders/ptpython/issues/34", + "id": 67905493, + "number": 34, + "title": "does not work on windows", + "user": { + "login": "bialix", + "id": 82971, + "avatar_url": "https://avatars.githubusercontent.com/u/82971?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bialix", + "html_url": "https://github.com/bialix", + "followers_url": "https://api.github.com/users/bialix/followers", + "following_url": "https://api.github.com/users/bialix/following{/other_user}", + "gists_url": "https://api.github.com/users/bialix/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bialix/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bialix/subscriptions", + "organizations_url": "https://api.github.com/users/bialix/orgs", + "repos_url": "https://api.github.com/users/bialix/repos", + "events_url": "https://api.github.com/users/bialix/events{/privacy}", + "received_events_url": "https://api.github.com/users/bialix/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/jonathanslenders/ptpython/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 5, + "created_at": "2015-04-12T11:48:35Z", + "updated_at": "2015-12-20T13:34:29Z", + "closed_at": null, + "body": "installed with pip as recommended on your page. Trying to run:\r\n\r\nD:\\>ptpython\r\nIn [1]:\r\n\r\n\r\n\r\n\r\n\r\n [F4] Emacs 1/1 [F6] Paste mode (off) [F2] Sidebar - CPython 3.3.5 T\r\nraceback (most recent call last):\r\n File \"C:\\Python\\3.3-64\\Scripts\\ptpython-script.py\", line 9, in \r\n load_entry_point('ptpython==0.5', 'console_scripts', 'ptpython')()\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\ptpython\\entry_points\\run_ptpython.py\", line 62, in run\r\n no_colors=no_colors, startup_paths=startup_paths)\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\ptpython\\repl.py\", line 208, in embed\r\n repl.start_repl(startup_paths=startup_paths)\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\ptpython\\repl.py\", line 51, in start_repl\r\n on_exit=AbortAction.RAISE_EXCEPTION)\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\prompt_toolkit\\interface.py\", line 290, in read_input\r\n next(g)\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\prompt_toolkit\\interface.py\", line 344, in _read_input\r\n self._redraw()\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\prompt_toolkit\\interface.py\", line 230, in _redraw\r\n self.renderer.render(self, self.layout, self.style)\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\prompt_toolkit\\renderer.py\", line 324, in render\r\n style=style, grayed=(cli.is_aborting or cli.is_exiting),\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\prompt_toolkit\\renderer.py\", line 164, in output_screen_diff\r\n current_pos = move_cursor(screen.cursor_position)\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\prompt_toolkit\\renderer.py\", line 50, in move_cursor\r\n output.cursor_up(current_y - new.y)\r\n File \"C:\\Python\\3.3-64\\lib\\site-packages\\prompt_toolkit\\terminal\\win32_output.py\", line 166, in cursor_up\r\n sr = self._screen_buffer_info().dwCursorPosition\r\nAttributeError: 'NoneType' object has no attribute 'dwCursorPosition'\r\n\r\nD:\\>pip list\r\ndocopt (0.6.2)\r\nipython (3.1.0)\r\njedi (0.8.1)\r\npip (6.1.1)\r\nprompt-toolkit (0.31)\r\nptpython (0.5)\r\nPygments (2.0.2)\r\nPyMySQL (0.6.1)\r\npyreadline (2.0)\r\nredis (2.9.1)\r\nsetuptools (14.3)\r\nsix (1.9.0)\r\nSQLAlchemy (0.9.3)\r\ntornado (3.3.dev1)\r\nwcwidth (0.1.4)\r\nwheel (0.22.0)", + "score": 3.950607 + }, + { + "url": "https://api.github.com/repos/hsoft/dupeguru/issues/300", + "repository_url": "https://api.github.com/repos/hsoft/dupeguru", + "labels_url": "https://api.github.com/repos/hsoft/dupeguru/issues/300/labels{/name}", + "comments_url": "https://api.github.com/repos/hsoft/dupeguru/issues/300/comments", + "events_url": "https://api.github.com/repos/hsoft/dupeguru/issues/300/events", + "html_url": "https://github.com/hsoft/dupeguru/issues/300", + "id": 67947216, + "number": 300, + "title": "Add new contributor", + "user": { + "login": "hsoft", + "id": 505201, + "avatar_url": "https://avatars.githubusercontent.com/u/505201?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hsoft", + "html_url": "https://github.com/hsoft", + "followers_url": "https://api.github.com/users/hsoft/followers", + "following_url": "https://api.github.com/users/hsoft/following{/other_user}", + "gists_url": "https://api.github.com/users/hsoft/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hsoft/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hsoft/subscriptions", + "organizations_url": "https://api.github.com/users/hsoft/orgs", + "repos_url": "https://api.github.com/users/hsoft/repos", + "events_url": "https://api.github.com/users/hsoft/events{/privacy}", + "received_events_url": "https://api.github.com/users/hsoft/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/hsoft/dupeguru/labels/bug", + "name": "bug", + "color": "f7c6c7" + }, + { + "url": "https://api.github.com/repos/hsoft/dupeguru/labels/mentored", + "name": "mentored", + "color": "eb6420" + }, + { + "url": "https://api.github.com/repos/hsoft/dupeguru/labels/ready", + "name": "ready", + "color": "009800" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 21, + "created_at": "2015-04-12T19:26:55Z", + "updated_at": "2016-06-10T19:38:26Z", + "closed_at": null, + "body": "dupeGuru has currently only one maintainer, me. This is a dangerous situation that needs to be\r\ncorrected.\r\n\r\nThe goal is to eventually have another active maintainer, but before we can get there, the project\r\nneeds more contributors. It is very much lacking on that side right now.\r\n\r\nWhatever your skills, if you are remotely interestested in being a contributor, I'm interested in\r\nmentoring you. I've been saying so in the [Contribute](http://hardcoded.net/dupeguru/help/en/contribute.html) page for a while, but now I'm thinking it might be a better idea to adverstise the need for contributors in a ticket. This way, it's clear whether someone has answered the call or not.\r\n\r\nSo, if you would like to start contributing to dupeGuru but would like some guidance/mentorship, simply add a comment here, we'll get started.", + "score": 0.4142732 + }, + { + "url": "https://api.github.com/repos/chrippa/livestreamer/issues/860", + "repository_url": "https://api.github.com/repos/chrippa/livestreamer", + "labels_url": "https://api.github.com/repos/chrippa/livestreamer/issues/860/labels{/name}", + "comments_url": "https://api.github.com/repos/chrippa/livestreamer/issues/860/comments", + "events_url": "https://api.github.com/repos/chrippa/livestreamer/issues/860/events", + "html_url": "https://github.com/chrippa/livestreamer/issues/860", + "id": 69571666, + "number": 860, + "title": "Ustream.com plugin drops after few seconds", + "user": { + "login": "karlo2105", + "id": 5579457, + "avatar_url": "https://avatars.githubusercontent.com/u/5579457?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/karlo2105", + "html_url": "https://github.com/karlo2105", + "followers_url": "https://api.github.com/users/karlo2105/followers", + "following_url": "https://api.github.com/users/karlo2105/following{/other_user}", + "gists_url": "https://api.github.com/users/karlo2105/gists{/gist_id}", + "starred_url": "https://api.github.com/users/karlo2105/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/karlo2105/subscriptions", + "organizations_url": "https://api.github.com/users/karlo2105/orgs", + "repos_url": "https://api.github.com/users/karlo2105/repos", + "events_url": "https://api.github.com/users/karlo2105/events{/privacy}", + "received_events_url": "https://api.github.com/users/karlo2105/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/chrippa/livestreamer/labels/bug", + "name": "bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/chrippa/livestreamer/labels/plugin", + "name": "plugin", + "color": "d7e102" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 49, + "created_at": "2015-04-20T12:02:56Z", + "updated_at": "2015-10-08T13:59:53Z", + "closed_at": null, + "body": "livestreamer -l debug \"http://www.ustream.tv/channel/tv-bor-live\" best\r\n[cli][info] Found matching plugin ustreamtv for URL http://www.ustream.tv/channel/tv-bor-live\r\n[plugin.ustreamtv][debug] Waiting for moduleInfo invoke\r\n[cli][info] Available streams: 576p+ (best), 576p+_alt_akamai, 576p+_alt_highwin\r\nds, mobile_240p (worst)\r\n[cli][info] Opening stream: 576p+ (uhs)\r\n[stream.uhs][debug] Fetching module info\r\n[cli][debug] Pre-buffering 8192 bytes\r\n[stream.uhs][debug] Adding chunk 1429507013 to queue\r\n[stream.uhs][debug] Fetching module info\r\n[cli][info] Starting player: 'C:\\Program Files\\VideoLAN\\VLC\\vlc.exe'\r\n[stream.uhs][debug] Download of chunk 1429507013 complete\r\n[cli][debug] Writing stream to output\r\n[stream.uhs][debug] Stream went offline\r\n[stream.uhs][debug] Closing worker thread\r\n[stream.uhs][debug] Closing writer thread\r\n[cli][info] Stream ended\r\n", + "score": 0.06708879 + }, + { + "url": "https://api.github.com/repos/joeferraro/MavensMate-SublimeText/issues/566", + "repository_url": "https://api.github.com/repos/joeferraro/MavensMate-SublimeText", + "labels_url": "https://api.github.com/repos/joeferraro/MavensMate-SublimeText/issues/566/labels{/name}", + "comments_url": "https://api.github.com/repos/joeferraro/MavensMate-SublimeText/issues/566/comments", + "events_url": "https://api.github.com/repos/joeferraro/MavensMate-SublimeText/issues/566/events", + "html_url": "https://github.com/joeferraro/MavensMate-SublimeText/issues/566", + "id": 69714301, + "number": 566, + "title": "Result: [OPERATION FAILED]: Whoops, unable to parse the response. Please enable logging (http://mavensmate.com/Plugins/Sublime_Text/Plugin_Logging)", + "user": { + "login": "pawarmangesh", + "id": 8614042, + "avatar_url": "https://avatars.githubusercontent.com/u/8614042?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pawarmangesh", + "html_url": "https://github.com/pawarmangesh", + "followers_url": "https://api.github.com/users/pawarmangesh/followers", + "following_url": "https://api.github.com/users/pawarmangesh/following{/other_user}", + "gists_url": "https://api.github.com/users/pawarmangesh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pawarmangesh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pawarmangesh/subscriptions", + "organizations_url": "https://api.github.com/users/pawarmangesh/orgs", + "repos_url": "https://api.github.com/users/pawarmangesh/repos", + "events_url": "https://api.github.com/users/pawarmangesh/events{/privacy}", + "received_events_url": "https://api.github.com/users/pawarmangesh/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/joeferraro/MavensMate-SublimeText/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 13, + "created_at": "2015-04-21T00:57:44Z", + "updated_at": "2015-05-11T18:30:48Z", + "closed_at": null, + "body": "I did drag the new apex project into ST3 editor and tried to create MavensMate project by right clicking on the project I am facing following error -\r\nResult: [OPERATION FAILED]: Whoops, unable to parse the response. Please enable logging (http://mavensmate.com/Plugins/Sublime_Text/Plugin_Logging)\r\n\r\nReferred previous similar issue logged and according to that did change the api version of all files from 31.0 to 30.0.\r\nAlso did change \"mm_api_version\" to 30.0\r\nWhat to do next? Could you please provide me the solution?", + "score": 0.33629873 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/23391", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/23391/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/23391/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/23391/events", + "html_url": "https://github.com/saltstack/salt/issues/23391", + "id": 73423394, + "number": 23391, + "title": "pillar.item \"key\" and pillar.get \"key\" can return different results", + "user": { + "login": "belvedere-trading", + "id": 6035921, + "avatar_url": "https://avatars.githubusercontent.com/u/6035921?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/belvedere-trading", + "html_url": "https://github.com/belvedere-trading", + "followers_url": "https://api.github.com/users/belvedere-trading/followers", + "following_url": "https://api.github.com/users/belvedere-trading/following{/other_user}", + "gists_url": "https://api.github.com/users/belvedere-trading/gists{/gist_id}", + "starred_url": "https://api.github.com/users/belvedere-trading/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/belvedere-trading/subscriptions", + "organizations_url": "https://api.github.com/users/belvedere-trading/orgs", + "repos_url": "https://api.github.com/users/belvedere-trading/repos", + "events_url": "https://api.github.com/users/belvedere-trading/events{/privacy}", + "received_events_url": "https://api.github.com/users/belvedere-trading/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Cannot%20Reproduce", + "name": "Cannot Reproduce", + "color": "c7def8" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Core", + "name": "Core", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P1", + "name": "P1", + "color": "2181ee" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Pillar", + "name": "Pillar", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/13", + "html_url": "https://github.com/saltstack/salt/milestones/Approved", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/13/labels", + "id": 9265, + "number": 13, + "title": "Approved", + "description": "All issues that are ready to be worked on, both bugs and features.", + "creator": { + "login": "thatch45", + "id": 507599, + "avatar_url": "https://avatars.githubusercontent.com/u/507599?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/thatch45", + "html_url": "https://github.com/thatch45", + "followers_url": "https://api.github.com/users/thatch45/followers", + "following_url": "https://api.github.com/users/thatch45/following{/other_user}", + "gists_url": "https://api.github.com/users/thatch45/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thatch45/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thatch45/subscriptions", + "organizations_url": "https://api.github.com/users/thatch45/orgs", + "repos_url": "https://api.github.com/users/thatch45/repos", + "events_url": "https://api.github.com/users/thatch45/events{/privacy}", + "received_events_url": "https://api.github.com/users/thatch45/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 3040, + "closed_issues": 3781, + "state": "open", + "created_at": "2011-05-14T04:00:56Z", + "updated_at": "2016-06-21T19:49:47Z", + "due_on": null, + "closed_at": null + }, + "comments": 24, + "created_at": "2015-05-05T20:31:13Z", + "updated_at": "2016-01-08T19:25:31Z", + "closed_at": null, + "body": "When pillar data is updated pillar.get seems to still return the old data, while pillar.item returns the new data. Pillar.get returns the outdated pillar information even after issuing a saltutil.refresh_pillar or a saltutil.clear_cache. Restarting the minion seems to resolve the issue.\r\n\r\nTested with the following:\r\n* salt 2015.2.0rc2\r\n* CentOS 6.6 salt master\r\n* @40 CentOS 6.2-6.6 minions\r\n* @70 Windows minions (combination of workstations/servers\r\n\r\nAll minions show the problem when pillar data is changed. \r\n\r\nInital pillar (example):\r\n```yaml\r\npython:\r\n pip_server: http://pypi:80/\r\n Linux:\r\n packages:\r\n - croniter\r\n - python-dateutil\r\n temp_dir: /tmp\r\n Windows:\r\n packages:\r\n - croniter\r\n - python-dateutil\r\n temp_dir: \"c:\\\\temp\"\r\n```\r\n\r\nUpdated pillar(example):\r\n```yaml\r\npython:\r\n pip_server: http://pypi:80/\r\n Linux:\r\n versioned_packages:\r\n croniter: '0.3.5'\r\n python-dateutil: '2.3'\r\n virtualenv: '1.11.6'\r\n unversioned_packages:\r\n removed_packages:\r\n temp_dir: /tmp\r\n Windows:\r\n versioned_packages:\r\n croniter: '0.3.5'\r\n python-dateutil: '2.3'\r\n virtualenv: '1.11.6'\r\n temp_dir: \"c:\\\\temp\"\r\n```\r\n\r\nIn looking at the code for pillar.get uses __pillar__ for pillar data where as pillar.item (indirectly) uses salt.pillar.get_pillar. I did a quick patch locally to see if updating pillar.get to use items (same way pillar.item does) to get the pillar data fixes the issue. It does. Assuming nobody has issues with it, I'll submit a patch for this.", + "score": 1.0182955 + }, + { + "url": "https://api.github.com/repos/jdfreder/jupyter-pip/issues/13", + "repository_url": "https://api.github.com/repos/jdfreder/jupyter-pip", + "labels_url": "https://api.github.com/repos/jdfreder/jupyter-pip/issues/13/labels{/name}", + "comments_url": "https://api.github.com/repos/jdfreder/jupyter-pip/issues/13/comments", + "events_url": "https://api.github.com/repos/jdfreder/jupyter-pip/issues/13/events", + "html_url": "https://github.com/jdfreder/jupyter-pip/issues/13", + "id": 78149568, + "number": 13, + "title": "General issue, permissions aren't handled well.", + "user": { + "login": "jdfreder", + "id": 3292874, + "avatar_url": "https://avatars.githubusercontent.com/u/3292874?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jdfreder", + "html_url": "https://github.com/jdfreder", + "followers_url": "https://api.github.com/users/jdfreder/followers", + "following_url": "https://api.github.com/users/jdfreder/following{/other_user}", + "gists_url": "https://api.github.com/users/jdfreder/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jdfreder/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jdfreder/subscriptions", + "organizations_url": "https://api.github.com/users/jdfreder/orgs", + "repos_url": "https://api.github.com/users/jdfreder/repos", + "events_url": "https://api.github.com/users/jdfreder/events{/privacy}", + "received_events_url": "https://api.github.com/users/jdfreder/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/jdfreder/jupyter-pip/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 2, + "created_at": "2015-05-19T16:05:30Z", + "updated_at": "2015-05-27T00:02:05Z", + "closed_at": null, + "body": "I've been using this a lot lately, and I've come across many small bugs. Mostly related to permissions on the different OSes, Windows, Linux, and OSX. I have an idea I want to implement in upstream Jupyter to solve the packaging problem in a more general fashion, and if that works, I'll make sure to fix jupyter-pip to use that new mechanism behind the scenes. If the new mechanism doesn't work or gets rejected, I'll come back to jupyter-pip and polish it up.", + "score": 1.2105334 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/391", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/391/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/391/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/391/events", + "html_url": "https://github.com/pypa/setuptools/issues/391", + "id": 144280973, + "number": 391, + "title": "dependencies listed in both setup_requires and install_requires install to temporary .egg dir", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/minor", + "name": "minor", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 6, + "created_at": "2015-05-28T15:02:26Z", + "updated_at": "2016-03-29T14:27:09Z", + "closed_at": null, + "body": "Originally reported by: **james_salter (Bitbucket: [james_salter](http://bitbucket.org/james_salter), GitHub: Unknown)**\n\n----------------------------------------\n\nFound on setuptools 16.0, python 2.7.9, windows 8.\n\nTest script:\n\n from setuptools import setup\n\n package = \"football-data\"\n\n setup(\n setup_requires=[package],\n install_requires=[package],\n name=\"test_setup_requires\"\n )\n\nAfter running this script from c:\\dev, my c:\\python27\\lib\\site-packages\\easy-install.pth contains:\n\nc:/dev/.eggs/football_data-0.1.2-py2.7.egg\n\ni.e. the package has been installed with its location in the temporary .eggs directory used to fulfil the `install_requires` directive. \n\nThis doesn't happen if the `setup_requires` key is omitted - the package is then installed to site-packages as expected. And it isn't installed at all if `install_requires` is omitted, as expected.\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/391\n", + "score": 0.5442668 + }, + { + "url": "https://api.github.com/repos/robotframework/RIDE/issues/924", + "repository_url": "https://api.github.com/repos/robotframework/RIDE", + "labels_url": "https://api.github.com/repos/robotframework/RIDE/issues/924/labels{/name}", + "comments_url": "https://api.github.com/repos/robotframework/RIDE/issues/924/comments", + "events_url": "https://api.github.com/repos/robotframework/RIDE/issues/924/events", + "html_url": "https://github.com/robotframework/RIDE/issues/924", + "id": 84012519, + "number": 924, + "title": "Support wxPython 3.0", + "user": { + "login": "yanne", + "id": 159146, + "avatar_url": "https://avatars.githubusercontent.com/u/159146?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yanne", + "html_url": "https://github.com/yanne", + "followers_url": "https://api.github.com/users/yanne/followers", + "following_url": "https://api.github.com/users/yanne/following{/other_user}", + "gists_url": "https://api.github.com/users/yanne/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yanne/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yanne/subscriptions", + "organizations_url": "https://api.github.com/users/yanne/orgs", + "repos_url": "https://api.github.com/users/yanne/repos", + "events_url": "https://api.github.com/users/yanne/events{/privacy}", + "received_events_url": "https://api.github.com/users/yanne/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/robotframework/RIDE/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/robotframework/RIDE/labels/prio-high", + "name": "prio-high", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/robotframework/RIDE/milestones/81", + "html_url": "https://github.com/robotframework/RIDE/milestones/Future", + "labels_url": "https://api.github.com/repos/robotframework/RIDE/milestones/81/labels", + "id": 1152827, + "number": 81, + "title": "Future", + "description": "Valid issues that are not targeted for any upcoming release.", + "creator": { + "login": "yanne", + "id": 159146, + "avatar_url": "https://avatars.githubusercontent.com/u/159146?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yanne", + "html_url": "https://github.com/yanne", + "followers_url": "https://api.github.com/users/yanne/followers", + "following_url": "https://api.github.com/users/yanne/following{/other_user}", + "gists_url": "https://api.github.com/users/yanne/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yanne/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yanne/subscriptions", + "organizations_url": "https://api.github.com/users/yanne/orgs", + "repos_url": "https://api.github.com/users/yanne/repos", + "events_url": "https://api.github.com/users/yanne/events{/privacy}", + "received_events_url": "https://api.github.com/users/yanne/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 102, + "closed_issues": 3, + "state": "open", + "created_at": "2015-06-06T17:04:52Z", + "updated_at": "2016-02-20T09:48:24Z", + "due_on": null, + "closed_at": null + }, + "comments": 35, + "created_at": "2015-06-02T13:02:08Z", + "updated_at": "2015-11-13T09:45:06Z", + "closed_at": null, + "body": "> *Originally submitted to [Google Code](http://code.google.com/p/robotframework-ride/issues/detail?id=888) by @yanne on 17 Nov 2011*\n\n\nWe explicitly select wxPython 2.8 if it is found using wxversion.select('2.8') in roboide/__init__.py\r\n\r\nHowever, wxPython 2.9 has been available for some time, so we should prefer that if it's found.\n\n", + "score": 0.33738166 + }, + { + "url": "https://api.github.com/repos/xonsh/xonsh/issues/266", + "repository_url": "https://api.github.com/repos/xonsh/xonsh", + "labels_url": "https://api.github.com/repos/xonsh/xonsh/issues/266/labels{/name}", + "comments_url": "https://api.github.com/repos/xonsh/xonsh/issues/266/comments", + "events_url": "https://api.github.com/repos/xonsh/xonsh/issues/266/events", + "html_url": "https://github.com/xonsh/xonsh/issues/266", + "id": 87803843, + "number": 266, + "title": "xonsh startup script fails on some platforms", + "user": { + "login": "otakucode", + "id": 2532847, + "avatar_url": "https://avatars.githubusercontent.com/u/2532847?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/otakucode", + "html_url": "https://github.com/otakucode", + "followers_url": "https://api.github.com/users/otakucode/followers", + "following_url": "https://api.github.com/users/otakucode/following{/other_user}", + "gists_url": "https://api.github.com/users/otakucode/gists{/gist_id}", + "starred_url": "https://api.github.com/users/otakucode/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/otakucode/subscriptions", + "organizations_url": "https://api.github.com/users/otakucode/orgs", + "repos_url": "https://api.github.com/users/otakucode/repos", + "events_url": "https://api.github.com/users/otakucode/events{/privacy}", + "received_events_url": "https://api.github.com/users/otakucode/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/xonsh/xonsh/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/xonsh/xonsh/labels/feature", + "name": "feature", + "color": "009800" + }, + { + "url": "https://api.github.com/repos/xonsh/xonsh/labels/help%20wanted", + "name": "help wanted", + "color": "159818" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/xonsh/xonsh/milestones/4", + "html_url": "https://github.com/xonsh/xonsh/milestones/v0.4.0", + "labels_url": "https://api.github.com/repos/xonsh/xonsh/milestones/4/labels", + "id": 1779851, + "number": 4, + "title": "v0.4.0", + "description": "", + "creator": { + "login": "scopatz", + "id": 320553, + "avatar_url": "https://avatars.githubusercontent.com/u/320553?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/scopatz", + "html_url": "https://github.com/scopatz", + "followers_url": "https://api.github.com/users/scopatz/followers", + "following_url": "https://api.github.com/users/scopatz/following{/other_user}", + "gists_url": "https://api.github.com/users/scopatz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/scopatz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/scopatz/subscriptions", + "organizations_url": "https://api.github.com/users/scopatz/orgs", + "repos_url": "https://api.github.com/users/scopatz/repos", + "events_url": "https://api.github.com/users/scopatz/events{/privacy}", + "received_events_url": "https://api.github.com/users/scopatz/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 181, + "closed_issues": 167, + "state": "open", + "created_at": "2016-05-20T22:54:44Z", + "updated_at": "2016-06-21T20:30:50Z", + "due_on": "2016-06-30T04:00:00Z", + "closed_at": null + }, + "comments": 11, + "created_at": "2015-06-12T17:52:02Z", + "updated_at": "2016-06-05T18:57:24Z", + "closed_at": null, + "body": "Hello all, I just found out about xonsh yesterday and have been checking it out. After installing it (cloned from github, then used pip install . in the cloned directory) my first discovery was that it wasn't put anywhere on my path. Then I found the 'xonsh' script in the scripts directory. Upon executing it, I get:\r\n\r\n/usr/bin/env: python -u: No such file or directory\r\n\r\nThe problem is the shebang at the top of the script. It called /usr/bin/env python -u. Aside from the fact that 'python' on my system will get you Python 2.7 and Python 3 is called python3 (a common configuration when legacy and current Python are both installed), the real issue is that using parameters like that in a shebang doesn't work on many systems. After doing some reading, it appears that this would work OK on OSX but fail on most (if not all) Linux systems. The system processes \"python -u\" as a single string and looks for an executable with that whole name.\r\n\r\nI'm not sure how you'd like this fixed. Personally I set the PYTHONUNBUFFERED environment variable to 1 before launching the script after changing the shebang to be #!/usr/bin/env python3. I don't think that's a good general answer, though. It would fail on systems which have python3 as just 'python' and not guarantee unbuffered access. Perhaps the disabling of buffering should be handled in code?", + "score": 0.7922998 + }, + { + "url": "https://api.github.com/repos/blockstack/blockstack-server/issues/93", + "repository_url": "https://api.github.com/repos/blockstack/blockstack-server", + "labels_url": "https://api.github.com/repos/blockstack/blockstack-server/issues/93/labels{/name}", + "comments_url": "https://api.github.com/repos/blockstack/blockstack-server/issues/93/comments", + "events_url": "https://api.github.com/repos/blockstack/blockstack-server/issues/93/events", + "html_url": "https://github.com/blockstack/blockstack-server/issues/93", + "id": 89311559, + "number": 93, + "title": "Issues running on Windows", + "user": { + "login": "csuwildcat", + "id": 131786, + "avatar_url": "https://avatars.githubusercontent.com/u/131786?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/csuwildcat", + "html_url": "https://github.com/csuwildcat", + "followers_url": "https://api.github.com/users/csuwildcat/followers", + "following_url": "https://api.github.com/users/csuwildcat/following{/other_user}", + "gists_url": "https://api.github.com/users/csuwildcat/gists{/gist_id}", + "starred_url": "https://api.github.com/users/csuwildcat/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/csuwildcat/subscriptions", + "organizations_url": "https://api.github.com/users/csuwildcat/orgs", + "repos_url": "https://api.github.com/users/csuwildcat/repos", + "events_url": "https://api.github.com/users/csuwildcat/events{/privacy}", + "received_events_url": "https://api.github.com/users/csuwildcat/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/blockstack/blockstack-server/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 16, + "created_at": "2015-06-18T14:41:25Z", + "updated_at": "2015-10-05T22:51:42Z", + "closed_at": null, + "body": "Steps to reproduce:\r\n\r\n- Installed Python\r\n- Installed blockstored with pip\r\n- Attempt to exec `blockstored start`\r\n\r\nError output:\r\n\r\n```\r\n[DEBUG] [blockstored:76] Connect to bitcoind at https://openname@btcd.onename.co\r\nm:8332\r\nTraceback (most recent call last):\r\n File \"blockstore/blockstored.py\", line 701, in \r\n run_blockstored()\r\n File \"blockstore/blockstored.py\", line 688, in run_blockstored\r\n stop_server()\r\n File \"blockstore/blockstored.py\", line 552, in stop_server\r\n from .lib.config import BLOCKSTORED_PID_FILE\r\nValueError: Attempted relative import in non-package\r\n```", + "score": 4.3382697 + }, + { + "url": "https://api.github.com/repos/python-pillow/Pillow/issues/1293", + "repository_url": "https://api.github.com/repos/python-pillow/Pillow", + "labels_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1293/labels{/name}", + "comments_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1293/comments", + "events_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1293/events", + "html_url": "https://github.com/python-pillow/Pillow/issues/1293", + "id": 89785059, + "number": 1293, + "title": "Problem with saving image from clipboard", + "user": { + "login": "sallyruthstruik", + "id": 1565642, + "avatar_url": "https://avatars.githubusercontent.com/u/1565642?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sallyruthstruik", + "html_url": "https://github.com/sallyruthstruik", + "followers_url": "https://api.github.com/users/sallyruthstruik/followers", + "following_url": "https://api.github.com/users/sallyruthstruik/following{/other_user}", + "gists_url": "https://api.github.com/users/sallyruthstruik/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sallyruthstruik/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sallyruthstruik/subscriptions", + "organizations_url": "https://api.github.com/users/sallyruthstruik/orgs", + "repos_url": "https://api.github.com/users/sallyruthstruik/repos", + "events_url": "https://api.github.com/users/sallyruthstruik/events{/privacy}", + "received_events_url": "https://api.github.com/users/sallyruthstruik/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/python-pillow/Pillow/labels/Bug", + "name": "Bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/python-pillow/Pillow/labels/Windows", + "name": "Windows", + "color": "00bcf2" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 52, + "created_at": "2015-06-20T15:47:43Z", + "updated_at": "2016-04-19T19:38:42Z", + "closed_at": null, + "body": "Hello,\r\n\r\nI have Windows 8 x64 system and installed Pillow version 2.8.2\r\nI'm trying to grab image from clipboard. I press \"Alt+PrtSc\" and then call grabclipboard function, and get such error:\r\n```{python}\r\nImageGrab.grabclipboard()\r\n---------------------------------------------------------------------------\r\nIOError Traceback (most recent call last)\r\n in ()\r\n 1 from PIL import ImageGrab\r\n 2 \r\n----> 3 ImageGrab.grabclipboard()\r\n\r\nC:\\Anaconda\\lib\\site-packages\\PIL\\ImageGrab.pyc in grabclipboard()\r\n 49 from PIL import BmpImagePlugin\r\n 50 import io\r\n---> 51 return BmpImagePlugin.DibImageFile(io.BytesIO(data))\r\n 52 return data\r\n\r\nC:\\Anaconda\\lib\\site-packages\\PIL\\ImageFile.pyc in __init__(self, fp, filename)\r\n 95 \r\n 96 try:\r\n---> 97 self._open()\r\n 98 except IndexError as v: # end of data\r\n 99 if Image.DEBUG > 1:\r\n\r\nC:\\Anaconda\\lib\\site-packages\\PIL\\BmpImagePlugin.pyc in _open(self)\r\n 204 \r\n 205 def _open(self):\r\n--> 206 self._bitmap()\r\n 207 \r\n 208 #\r\n\r\nC:\\Anaconda\\lib\\site-packages\\PIL\\BmpImagePlugin.pyc in _bitmap(self, header, offset)\r\n 145 raw_mode = MASK_MODES[(file_info['bits'], file_info['rgb_mask'])]\r\n 146 else:\r\n--> 147 raise IOError(\"Unsupported BMP bitfields layout\")\r\n 148 else:\r\n 149 raise IOError(\"Unsupported BMP bitfields layout\")\r\n\r\nIOError: Unsupported BMP bitfields layout\r\n```\r\n\r\nBut if I call ImageGrab.grab function, screenshot(of whole screen) is saved properly. ", + "score": 0.47580385 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/24968", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/24968/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/24968/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/24968/events", + "html_url": "https://github.com/saltstack/salt/issues/24968", + "id": 91021245, + "number": 24968, + "title": "salt-cloud 2015.5.2 cannot provision CentOS 6.6 minion on Azure", + "user": { + "login": "bradthurber", + "id": 3045456, + "avatar_url": "https://avatars.githubusercontent.com/u/3045456?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bradthurber", + "html_url": "https://github.com/bradthurber", + "followers_url": "https://api.github.com/users/bradthurber/followers", + "following_url": "https://api.github.com/users/bradthurber/following{/other_user}", + "gists_url": "https://api.github.com/users/bradthurber/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bradthurber/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bradthurber/subscriptions", + "organizations_url": "https://api.github.com/users/bradthurber/orgs", + "repos_url": "https://api.github.com/users/bradthurber/repos", + "events_url": "https://api.github.com/users/bradthurber/events{/privacy}", + "received_events_url": "https://api.github.com/users/bradthurber/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Confirmed", + "name": "Confirmed", + "color": "c7def8" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P3", + "name": "P3", + "color": "0a3d77" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/RIoT", + "name": "RIoT", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Salt-Cloud", + "name": "Salt-Cloud", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/13", + "html_url": "https://github.com/saltstack/salt/milestones/Approved", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/13/labels", + "id": 9265, + "number": 13, + "title": "Approved", + "description": "All issues that are ready to be worked on, both bugs and features.", + "creator": { + "login": "thatch45", + "id": 507599, + "avatar_url": "https://avatars.githubusercontent.com/u/507599?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/thatch45", + "html_url": "https://github.com/thatch45", + "followers_url": "https://api.github.com/users/thatch45/followers", + "following_url": "https://api.github.com/users/thatch45/following{/other_user}", + "gists_url": "https://api.github.com/users/thatch45/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thatch45/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thatch45/subscriptions", + "organizations_url": "https://api.github.com/users/thatch45/orgs", + "repos_url": "https://api.github.com/users/thatch45/repos", + "events_url": "https://api.github.com/users/thatch45/events{/privacy}", + "received_events_url": "https://api.github.com/users/thatch45/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 3040, + "closed_issues": 3781, + "state": "open", + "created_at": "2011-05-14T04:00:56Z", + "updated_at": "2016-06-21T19:49:47Z", + "due_on": null, + "closed_at": null + }, + "comments": 2, + "created_at": "2015-06-25T17:07:21Z", + "updated_at": "2015-06-25T20:10:13Z", + "closed_at": null, + "body": "[Edited: Showing more representative logging. Changed to D2 machine type]\r\n\r\nUpon running salt-cloud, the CentOS 6.6 vm is created successfully, but bootstrap of minion fails at creation of /tmp directory with ```Error: there was a profile error```: \r\n\r\n```\r\n[DEBUG ] Deploying saltcentos66-d2-1.cloudapp.net at 1435257905.0\r\n[DEBUG ] Attempting connection to host saltcentos66-d2-1.cloudapp.net on port 22\r\n[DEBUG ] Caught exception in wait_for_port: timed out\r\n[DEBUG ] Retrying connection to host saltcentos66-d2-1.cloudapp.net on port 22 (try 1)\r\n[DEBUG ] Caught exception in wait_for_port: timed out\r\n[DEBUG ] Retrying connection to host saltcentos66-d2-1.cloudapp.net on port 22 (try 2)\r\n[DEBUG ] SSH port 22 on saltcentos66-d2-1.cloudapp.net is available\r\n[DEBUG ] Using password authentication\r\n[DEBUG ] Attempting to authenticate as azureuser (try 1 of 15)\r\n[DEBUG ] SSH command: 'ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 azureuser@saltcentos66-d2-1.cloudapp.net date'\r\n[DEBUG ] Child Forked! PID: 26776 STDOUT_FD: 4 STDERR_FD: 7\r\n[DEBUG ] Terminal Command: /bin/sh -c ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 azureuser@saltcentos66-d2-1.cloudapp.net date\r\nWarning: Permanently added 'saltcentos66-d2-1.cloudapp.net,191.237.83.222' (RSA) to the list of known hosts.\r\n[DEBUG ] Warning: Permanently added 'saltcentos66-d2-1.cloudapp.net,191.237.83.222' (RSA) to the list of known hosts.\r\nazureuser@saltcentos66-d2-1.cloudapp.net's password: [DEBUG ] azureuser@saltcentos66-d2-1.cloudapp.net's password:\r\n\r\nThu Jun 25 18:46:30 UTC 2015\r\n[DEBUG ] Thu Jun 25 18:46:30 UTC 2015\r\n[DEBUG ] Logging into saltcentos66-d2-1.cloudapp.net:22 as azureuser\r\n[DEBUG ] Using Sanitized-123 as the password\r\n[DEBUG ] Using sudo to run command sudo test -e '/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb'\r\n[DEBUG ] SSH command: 'ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 azureuser@saltcentos66-d2-1.cloudapp.net \\'sudo test -e \\'\"\\'\"\\'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb\\'\"\\'\"\\'\\''\r\n[DEBUG ] Child Forked! PID: 26899 STDOUT_FD: 4 STDERR_FD: 7\r\n[DEBUG ] Terminal Command: /bin/sh -c ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 azureuser@saltcentos66-d2-1.cloudapp.net 'sudo test -e '\"'\"'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb'\"'\"''\r\nssh: connect to host saltcentos66-d2-1.cloudapp.net port 22: Connection refused\r\n[DEBUG ] ssh: connect to host saltcentos66-d2-1.cloudapp.net port 22: Connection refused\r\n[DEBUG ] Using sudo to run command sudo sh -c \"( mkdir -p '/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb' && chmod 700 '/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb' )\"\r\n[DEBUG ] SSH command: 'ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 azureuser@saltcentos66-d2-1.cloudapp.net \\'sudo sh -c \"( mkdir -p \\'\"\\'\"\\'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb\\'\"\\'\"\\' && chmod 700 \\'\"\\'\"\\'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb\\'\"\\'\"\\' )\"\\''\r\n[DEBUG ] Child Forked! PID: 26926 STDOUT_FD: 4 STDERR_FD: 7\r\n[DEBUG ] Terminal Command: /bin/sh -c ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 azureuser@saltcentos66-d2-1.cloudapp.net 'sudo sh -c \"( mkdir -p '\"'\"'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb'\"'\"' && chmod 700 '\"'\"'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb'\"'\"' )\"'\r\nWarning: Permanently added 'saltcentos66-d2-1.cloudapp.net,191.237.83.222' (RSA) to the list of known hosts.\r\n[DEBUG ] Warning: Permanently added 'saltcentos66-d2-1.cloudapp.net,191.237.83.222' (RSA) to the list of known hosts.\r\nazureuser@saltcentos66-d2-1.cloudapp.net's password: [DEBUG ] azureuser@saltcentos66-d2-1.cloudapp.net's password:\r\nsudo: sorry, you must have a tty to run sudo\r\n[DEBUG ] sudo: sorry, you must have a tty to run sudo\r\n\r\nError: There was a profile error: Command 'ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oControlPath=none -p 22 azureuser@saltcentos66-d2-1.cloudapp.net \\'sudo sh -c \"( mkdir -p \\'\"\\'\"\\'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb\\'\"\\'\"\\' && chmod 700 \\'\"\\'\"\\'/tmp/.saltcloud-42dd1dde-f915-4953-9c69-b9e56946d0bb\\'\"\\'\"\\' )\"\\'' failed. Exit code: 1\r\n```\r\n\r\nsalt-cloud command used:\r\n```\r\nsalt-cloud -p azure-centos66-d2 saltcentos66-d2-1 -l debug\r\n```\r\n\r\nversions\r\n```\r\n# salt-cloud --versions\r\n Salt: 2015.5.2\r\n Python: 2.7.5 (default, Jun 24 2015, 00:41:19)\r\n Jinja2: 2.7.3\r\n M2Crypto: 0.21.1\r\n msgpack-python: 0.4.6\r\n msgpack-pure: Not Installed\r\n pycrypto: 2.6.1\r\n libnacl: Not Installed\r\n PyYAML: 3.11\r\n ioflo: Not Installed\r\n PyZMQ: 14.3.1\r\n RAET: Not Installed\r\n ZMQ: 3.2.5\r\n Mako: Not Installed\r\n Apache Libcloud: 0.17.0\r\n\r\n# pip list | grep azu\r\nazure (0.11.1)\r\n```\r\n\r\nprovider file:\r\n```\r\nprov-azure-bet:\r\n provider: azure\r\n subscription_id: abacab00-1234-5678-bcaf-12344568ff6c\r\n certificate_path: /etc/salt/cloud.providers.d/azure-bet.pem\r\n\r\n # Set up the location of the salt master\r\n #\r\n minion:\r\n master: salt.awsdev.openlane.com\r\n```\r\n\r\nprofile file:\r\n```\r\nazure-centos66:\r\n provider: prov-azure-bet\r\n image: '5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-66-20150605'\r\n size: Basic_A2\r\n location: 'East US'\r\n script_args: git v2015.5.2\r\n ssh_username: azureuser\r\n ssh_password: Sanitized-123\r\n slot: staging\r\n media_link: 'https://portalvhdabcdefgh.blob.core.windows.net/vhds'\r\n\r\nazure-centos71:\r\n provider: prov-azure-bet\r\n image: '5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-71-20150410'\r\n size: Basic_A2\r\n location: 'East US'\r\n script_args: git v2015.5.2\r\n ssh_username: azureuser\r\n ssh_password: Sanitized-123\r\n slot: staging\r\n media_link: 'https://portalvhdabcdefgh.blob.core.windows.net/vhds'\r\n\r\nazure-centos66-d2:\r\n provider: prov-azure-bet\r\n image: '5112500ae3b842c8b9c604889f8753c3__OpenLogic-CentOS-66-20150605'\r\n size: Standard_D2\r\n location: 'East US'\r\n script_args: git v2015.5.2\r\n ssh_username: azureuser\r\n ssh_password: Sanitized-123\r\n slot: staging\r\n media_link: 'https://portalvhdabcdefgh.blob.core.windows.net/vhds'\r\n```\r\n", + "score": 0.36345905 + }, + { + "url": "https://api.github.com/repos/uqfoundation/dill/issues/112", + "repository_url": "https://api.github.com/repos/uqfoundation/dill", + "labels_url": "https://api.github.com/repos/uqfoundation/dill/issues/112/labels{/name}", + "comments_url": "https://api.github.com/repos/uqfoundation/dill/issues/112/comments", + "events_url": "https://api.github.com/repos/uqfoundation/dill/issues/112/events", + "html_url": "https://github.com/uqfoundation/dill/issues/112", + "id": 91151250, + "number": 112, + "title": "get_objgraph script missing import on windows", + "user": { + "login": "mmckerns", + "id": 321534, + "avatar_url": "https://avatars.githubusercontent.com/u/321534?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mmckerns", + "html_url": "https://github.com/mmckerns", + "followers_url": "https://api.github.com/users/mmckerns/followers", + "following_url": "https://api.github.com/users/mmckerns/following{/other_user}", + "gists_url": "https://api.github.com/users/mmckerns/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mmckerns/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mmckerns/subscriptions", + "organizations_url": "https://api.github.com/users/mmckerns/orgs", + "repos_url": "https://api.github.com/users/mmckerns/repos", + "events_url": "https://api.github.com/users/mmckerns/events{/privacy}", + "received_events_url": "https://api.github.com/users/mmckerns/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/uqfoundation/dill/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2015-06-26T04:41:25Z", + "updated_at": "2015-06-26T05:00:42Z", + "closed_at": null, + "body": "Apparently, `_curses` is not easily available for windows, and needs to be installed by hand.\r\nThere seems to be a `pip install`-able build here:\r\nhttp://www.lfd.uci.edu/~gohlke/pythonlibs/xugyqnq9/curses-2.2-cp27-none-win32.whl", + "score": 3.8476286 + }, + { + "url": "https://api.github.com/repos/simphony/simphony-jyulb/issues/26", + "repository_url": "https://api.github.com/repos/simphony/simphony-jyulb", + "labels_url": "https://api.github.com/repos/simphony/simphony-jyulb/issues/26/labels{/name}", + "comments_url": "https://api.github.com/repos/simphony/simphony-jyulb/issues/26/comments", + "events_url": "https://api.github.com/repos/simphony/simphony-jyulb/issues/26/events", + "html_url": "https://github.com/simphony/simphony-jyulb/issues/26", + "id": 92013411, + "number": 26, + "title": "install of simphony-jyu-lb fails on Ubuntu 12.04.5 LTS - 32bit", + "user": { + "login": "nathanfranklin", + "id": 8287580, + "avatar_url": "https://avatars.githubusercontent.com/u/8287580?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nathanfranklin", + "html_url": "https://github.com/nathanfranklin", + "followers_url": "https://api.github.com/users/nathanfranklin/followers", + "following_url": "https://api.github.com/users/nathanfranklin/following{/other_user}", + "gists_url": "https://api.github.com/users/nathanfranklin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nathanfranklin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nathanfranklin/subscriptions", + "organizations_url": "https://api.github.com/users/nathanfranklin/orgs", + "repos_url": "https://api.github.com/users/nathanfranklin/repos", + "events_url": "https://api.github.com/users/nathanfranklin/events{/privacy}", + "received_events_url": "https://api.github.com/users/nathanfranklin/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/simphony/simphony-jyulb/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2015-06-30T07:29:11Z", + "updated_at": "2015-11-09T10:02:06Z", + "closed_at": null, + "body": "```\r\n(simphony)franklin@ubuntu:~/simphony-framework$ uname -a\r\nLinux ubuntu 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:50:54 UTC 2014 i686 i686 i386 GNU/Linux\r\n```\r\n\r\nCommand and error message:\r\n```\r\n(simphony)franklin@ubuntu:~/simphony-framework$ make simphony-jyu-lb\r\npip install --upgrade git+https://github.com/simphony/simphony-jyulb.git@0.1.3\r\nCollecting git+https://github.com/simphony/simphony-jyulb.git@0.1.3\r\n Cloning https://github.com/simphony/simphony-jyulb.git (to 0.1.3) to /tmp/pip-_VTrNG-build\r\n/home/franklin/simphony/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.\r\n InsecurePlatformWarning\r\nRequirement already up-to-date: simphony in /home/franklin/simphony/lib/python2.7/site-packages (from jyu-engine==0.1.3)\r\nRequirement already up-to-date: enum34>=1.0.4 in /home/franklin/simphony/lib/python2.7/site-packages (from simphony->jyu-engine==0.1.3)\r\nRequirement already up-to-date: stevedore>=1.2.0 in /home/franklin/simphony/lib/python2.7/site-packages (from simphony->jyu-engine==0.1.3)\r\nRequirement already up-to-date: numpy>=1.4.1 in /home/franklin/simphony/lib/python2.7/site-packages (from simphony->jyu-engine==0.1.3)\r\nCollecting argparse (from stevedore>=1.2.0->simphony->jyu-engine==0.1.3)\r\n Using cached argparse-1.3.0-py2.py3-none-any.whl\r\nRequirement already up-to-date: six>=1.9.0 in /home/franklin/simphony/lib/python2.7/site-packages (from stevedore>=1.2.0->simphony->jyu-engine==0.1.3)\r\nRequirement already up-to-date: pbr<2.0,>=0.11 in /home/franklin/simphony/lib/python2.7/site-packages (from stevedore>=1.2.0->simphony->jyu-engine==0.1.3)\r\nInstalling collected packages: jyu-engine, argparse\r\n Running setup.py install for jyu-engine\r\n Complete output from command /home/franklin/simphony/bin/python -c \"import setuptools, tokenize;__file__='/tmp/pip-_VTrNG-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record /tmp/pip-5dn3qX-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/franklin/simphony/include/site/python2.7/jyu-engine:\r\n running install\r\n running build\r\n running build_py\r\n creating build\r\n creating build/lib.linux-i686-2.7\r\n creating build/lib.linux-i686-2.7/jyulb\r\n copying jyulb/__init__.py -> build/lib.linux-i686-2.7/jyulb\r\n copying jyulb/cuba_extension.py -> build/lib.linux-i686-2.7/jyulb\r\n creating build/lib.linux-i686-2.7/jyulb/internal\r\n copying jyulb/internal/__init__.py -> build/lib.linux-i686-2.7/jyulb/internal\r\n creating build/lib.linux-i686-2.7/jyulb/fileio\r\n copying jyulb/fileio/__init__.py -> build/lib.linux-i686-2.7/jyulb/fileio\r\n creating build/lib.linux-i686-2.7/jyulb/internal/isothermal\r\n copying jyulb/internal/isothermal/__init__.py -> build/lib.linux-i686-2.7/jyulb/internal/isothermal\r\n copying jyulb/internal/isothermal/jyu_engine.py -> build/lib.linux-i686-2.7/jyulb/internal/isothermal\r\n creating build/lib.linux-i686-2.7/jyulb/internal/common\r\n copying jyulb/internal/common/__init__.py -> build/lib.linux-i686-2.7/jyulb/internal/common\r\n copying jyulb/internal/common/proxy_lattice.py -> build/lib.linux-i686-2.7/jyulb/internal/common\r\n creating build/lib.linux-i686-2.7/jyulb/internal/isothermal/tests\r\n copying jyulb/internal/isothermal/tests/__init__.py -> build/lib.linux-i686-2.7/jyulb/internal/isothermal/tests\r\n copying jyulb/internal/isothermal/tests/test_plugin_integration.py -> build/lib.linux-i686-2.7/jyulb/internal/isothermal/tests\r\n copying jyulb/internal/isothermal/tests/test_jyu_engine.py -> build/lib.linux-i686-2.7/jyulb/internal/isothermal/tests\r\n creating build/lib.linux-i686-2.7/jyulb/internal/common/tests\r\n copying jyulb/internal/common/tests/__init__.py -> build/lib.linux-i686-2.7/jyulb/internal/common/tests\r\n copying jyulb/internal/common/tests/test_proxy_lattice.py -> build/lib.linux-i686-2.7/jyulb/internal/common/tests\r\n creating build/lib.linux-i686-2.7/jyulb/fileio/isothermal\r\n copying jyulb/fileio/isothermal/__init__.py -> build/lib.linux-i686-2.7/jyulb/fileio/isothermal\r\n copying jyulb/fileio/isothermal/jyu_engine.py -> build/lib.linux-i686-2.7/jyulb/fileio/isothermal\r\n creating build/lib.linux-i686-2.7/jyulb/fileio/common\r\n copying jyulb/fileio/common/__init__.py -> build/lib.linux-i686-2.7/jyulb/fileio/common\r\n copying jyulb/fileio/common/jyu_lattice_proxy.py -> build/lib.linux-i686-2.7/jyulb/fileio/common\r\n creating build/lib.linux-i686-2.7/jyulb/fileio/isothermal/tests\r\n copying jyulb/fileio/isothermal/tests/__init__.py -> build/lib.linux-i686-2.7/jyulb/fileio/isothermal/tests\r\n copying jyulb/fileio/isothermal/tests/test_plugin_integration.py -> build/lib.linux-i686-2.7/jyulb/fileio/isothermal/tests\r\n copying jyulb/fileio/isothermal/tests/test_jyu_engine.py -> build/lib.linux-i686-2.7/jyulb/fileio/isothermal/tests\r\n creating build/lib.linux-i686-2.7/jyulb/fileio/common/tests\r\n copying jyulb/fileio/common/tests/__init__.py -> build/lib.linux-i686-2.7/jyulb/fileio/common/tests\r\n copying jyulb/fileio/common/tests/test_jyu_lattice_proxy.py -> build/lib.linux-i686-2.7/jyulb/fileio/common/tests\r\n running build_ext\r\n building 'jyulb.internal.isothermal.solver' extension\r\n creating build/temp.linux-i686-2.7\r\n creating build/temp.linux-i686-2.7/jyulb\r\n creating build/temp.linux-i686-2.7/jyulb/internal\r\n creating build/temp.linux-i686-2.7/jyulb/internal/isothermal\r\n creating build/temp.linux-i686-2.7/JYU-LB\r\n creating build/temp.linux-i686-2.7/JYU-LB/include\r\n creating build/temp.linux-i686-2.7/JYU-LB/include/common\r\n creating build/temp.linux-i686-2.7/JYU-LB/include/collision\r\n creating build/temp.linux-i686-2.7/JYU-LB/include/kernel\r\n creating build/temp.linux-i686-2.7/JYU-LB/include/solver\r\n gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -IJYU-LB/include/common/ -IJYU-LB/include/dvs/ -IJYU-LB/include/collision/ -IJYU-LB/include/kernel/ -IJYU-LB/include/solver/ -I/home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c jyulb/internal/isothermal/solver.cpp -o build/temp.linux-i686-2.7/jyulb/internal/isothermal/solver.o -fopenmp -O3\r\n cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]\r\n In file included from /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1804:0,\r\n from /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:17,\r\n from /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:4,\r\n from jyulb/internal/isothermal/solver.cpp:281:\r\n /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning \"Using deprecated NumPy API, disable it by \" \"#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\" [-Wcpp]\r\n In file included from JYU-LB/include/common/node.h:10:0,\r\n from jyulb/internal/isothermal/solver.cpp:284:\r\n /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/__multiarray_api.h:1629:1: warning: ‘int _import_array()’ defined but not used [-Wunused-function]\r\n /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/__ufunc_api.h:241:1: warning: ‘int _import_umath()’ defined but not used [-Wunused-function]\r\n gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -IJYU-LB/include/common/ -IJYU-LB/include/dvs/ -IJYU-LB/include/collision/ -IJYU-LB/include/kernel/ -IJYU-LB/include/solver/ -I/home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c JYU-LB/include/common/node.cpp -o build/temp.linux-i686-2.7/JYU-LB/include/common/node.o -fopenmp -O3\r\n cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]\r\n gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -IJYU-LB/include/common/ -IJYU-LB/include/dvs/ -IJYU-LB/include/collision/ -IJYU-LB/include/kernel/ -IJYU-LB/include/solver/ -I/home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c JYU-LB/include/common/filter.cpp -o build/temp.linux-i686-2.7/JYU-LB/include/common/filter.o -fopenmp -O3\r\n cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]\r\n gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -IJYU-LB/include/common/ -IJYU-LB/include/dvs/ -IJYU-LB/include/collision/ -IJYU-LB/include/kernel/ -IJYU-LB/include/solver/ -I/home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c JYU-LB/include/collision/collision.cpp -o build/temp.linux-i686-2.7/JYU-LB/include/collision/collision.o -fopenmp -O3\r\n cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]\r\n gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -IJYU-LB/include/common/ -IJYU-LB/include/dvs/ -IJYU-LB/include/collision/ -IJYU-LB/include/kernel/ -IJYU-LB/include/solver/ -I/home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c JYU-LB/include/kernel/kernel.cpp -o build/temp.linux-i686-2.7/JYU-LB/include/kernel/kernel.o -fopenmp -O3\r\n cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]\r\n JYU-LB/include/kernel/kernel.cpp:48:1: warning: this decimal constant is unsigned only in ISO C90 [enabled by default]\r\n gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -IJYU-LB/include/common/ -IJYU-LB/include/dvs/ -IJYU-LB/include/collision/ -IJYU-LB/include/kernel/ -IJYU-LB/include/solver/ -I/home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c JYU-LB/include/solver/solver.cpp -o build/temp.linux-i686-2.7/JYU-LB/include/solver/solver.o -fopenmp -O3\r\n cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]\r\n g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-i686-2.7/jyulb/internal/isothermal/solver.o build/temp.linux-i686-2.7/JYU-LB/include/common/node.o build/temp.linux-i686-2.7/JYU-LB/include/common/filter.o build/temp.linux-i686-2.7/JYU-LB/include/collision/collision.o build/temp.linux-i686-2.7/JYU-LB/include/kernel/kernel.o build/temp.linux-i686-2.7/JYU-LB/include/solver/solver.o -o build/lib.linux-i686-2.7/jyulb/internal/isothermal/solver.so -fopenmp -O3\r\n building 'jyulb.internal.common.domain' extension\r\n creating build/temp.linux-i686-2.7/jyulb/internal/common\r\n gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -IJYU-LB/include/common/ -I/home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c jyulb/internal/common/domain.cpp -o build/temp.linux-i686-2.7/jyulb/internal/common/domain.o -fopenmp -O3\r\n cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]\r\n In file included from /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/ndarraytypes.h:1804:0,\r\n from /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/ndarrayobject.h:17,\r\n from /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/arrayobject.h:4,\r\n from jyulb/internal/common/domain.cpp:275:\r\n /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning \"Using deprecated NumPy API, disable it by \" \"#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION\" [-Wcpp]\r\n jyulb/internal/common/domain.cpp: In function ‘PyObject* __pyx_pf_5jyulb_8internal_6common_6domain_9PyNodeSet_get_n(__pyx_obj_5jyulb_8internal_6common_6domain_PyNodeSet*, PyArrayObject*)’:\r\n jyulb/internal/common/domain.cpp:1588:197: error: invalid conversion from ‘__pyx_t_5numpy_uint32_t* {aka long unsigned int*}’ to ‘const UINT* {aka const unsigned int*}’ [-fpermissive]\r\n JYU-LB/include/common/node.h:20:18: error: initializing argument 1 of ‘virtual UINT NodeSet::get_n(const UINT*) const’ [-fpermissive]\r\n jyulb/internal/common/domain.cpp: In function ‘PyObject* __pyx_pf_5jyulb_8internal_6common_6domain_9PyNodeSet_2get_ijk(__pyx_obj_5jyulb_8internal_6common_6domain_PyNodeSet*, unsigned int, PyArrayObject*)’:\r\n jyulb/internal/common/domain.cpp:1826:198: error: invalid conversion from ‘__pyx_t_5numpy_uint32_t* {aka long unsigned int*}’ to ‘UINT* {aka unsigned int*}’ [-fpermissive]\r\n JYU-LB/include/common/node.h:21:18: error: initializing argument 2 of ‘virtual void NodeSet::get_ijk(UINT, UINT*) const’ [-fpermissive]\r\n jyulb/internal/common/domain.cpp: In function ‘int __pyx_pf_5jyulb_8internal_6common_6domain_9PyLattice___cinit__(__pyx_obj_5jyulb_8internal_6common_6domain_PyLattice*, PyArrayObject*, PyArrayObject*)’:\r\n jyulb/internal/common/domain.cpp:2184:325: error: invalid conversion from ‘__pyx_t_5numpy_uint32_t* {aka long unsigned int*}’ to ‘const UINT* {aka const unsigned int*}’ [-fpermissive]\r\n JYU-LB/include/common/node.h:36:14: error: initializing argument 1 of ‘Lattice::Lattice(const UINT*, const double*)’ [-fpermissive]\r\n jyulb/internal/common/domain.cpp: In function ‘PyObject* __pyx_pf_5jyulb_8internal_6common_6domain_24PyAbstractIsothermalData_24get_n(__pyx_obj_5jyulb_8internal_6common_6domain_PyAbstractIsothermalData*, PyArrayObject*)’:\r\n jyulb/internal/common/domain.cpp:5741:212: error: invalid conversion from ‘__pyx_t_5numpy_uint32_t* {aka long unsigned int*}’ to ‘const UINT* {aka const unsigned int*}’ [-fpermissive]\r\n JYU-LB/include/common/node.h:20:18: error: initializing argument 1 of ‘virtual UINT NodeSet::get_n(const UINT*) const’ [-fpermissive]\r\n jyulb/internal/common/domain.cpp: In function ‘PyObject* __pyx_pf_5jyulb_8internal_6common_6domain_24PyAbstractIsothermalData_26get_ijk(__pyx_obj_5jyulb_8internal_6common_6domain_PyAbstractIsothermalData*, unsigned int, PyArrayObject*)’:\r\n jyulb/internal/common/domain.cpp:5891:213: error: invalid conversion from ‘__pyx_t_5numpy_uint32_t* {aka long unsigned int*}’ to ‘UINT* {aka unsigned int*}’ [-fpermissive]\r\n JYU-LB/include/common/node.h:21:18: error: initializing argument 2 of ‘virtual void NodeSet::get_ijk(UINT, UINT*) const’ [-fpermissive]\r\n In file included from JYU-LB/include/common/node.h:10:0,\r\n from jyulb/internal/common/domain.cpp:278:\r\n /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/__multiarray_api.h: At global scope:\r\n /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/__multiarray_api.h:1629:1: warning: ‘int _import_array()’ defined but not used [-Wunused-function]\r\n /home/franklin/simphony/local/lib/python2.7/site-packages/numpy/core/include/numpy/__ufunc_api.h:241:1: warning: ‘int _import_umath()’ defined but not used [-Wunused-function]\r\n error: command 'gcc' failed with exit status 1\r\n \r\n ----------------------------------------\r\nCommand \"/home/franklin/simphony/bin/python -c \"import setuptools, tokenize;__file__='/tmp/pip-_VTrNG-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record /tmp/pip-5dn3qX-record/install-record.txt --single-version-externally-managed --compile --install-headers /home/franklin/simphony/include/site/python2.7/jyu-engine\" failed with error code 1 in /tmp/pip-_VTrNG-build\r\nmake: *** [simphony-jyu-lb] Error 1\r\n```", + "score": 0.7653773 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/403", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/403/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/403/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/403/events", + "html_url": "https://github.com/pypa/setuptools/issues/403", + "id": 144281214, + "number": 403, + "title": "Unable to uninstall package in develop mode", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/major", + "name": "major", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 7, + "created_at": "2015-06-30T11:14:48Z", + "updated_at": "2016-03-29T14:27:48Z", + "closed_at": null, + "body": "Originally reported by: **lansman (Bitbucket: [lansman](http://bitbucket.org/lansman), GitHub: [lansman](http://github.com/lansman))**\n\n----------------------------------------\n\n* Windows 7 x64\n* setuptools 18.0.1\n* pip 7.0.3\n* mercurial 3.4.1 x64\n* Python 2.7.10 x32 (i access it via `python2.exe` also have python3 installed on my computer, can access it via `python.exe`). \n*But below i work only with python2.exe*\n\nI have a project MY_SCRIPT with mercurial repo in it.\n\nCreated simple setup.py inside it\n```\nfrom setuptools import setup\n\nsetup(\n name='MY_SCRIPT',\n packages=[...], \n use_scm_version=True,\n setup_requires=['setuptools_scm'],\n)\n```\n\ninstall it\n`python.exe setup.py develop`\n\nbut when issuing `pip list` got an error near my script\n\n```\n'Error when trying to get requirement for VCS system Command \"hg showconfig paths.default\" failed with error code 1\n```\n\nOK, went to /.hg/hgrc and added to paths section new const\n```\n[paths]\ndefault=\n```\n\nnow `pip list` works fine and i can see my package in it:\n`MY_SCRIPT (0.1.dev90+n80eec607bac7.d20150630, )`\n\nwhen i add new commits in folder, version in `pip list` output also bumps, so a link exists. Also i can see folders `MY_SCRIPT` and `MY_SCRIPT-0.0.0.dist-info` and `MY_SCRIPT-0.1.dev90+n80eec607bac7.d20150630.dist-info` in site-packages folder.\n**\nBut i cannot disable editable mode (delete my package from pip).**\n\n`pip uninstall MY_SCRIPT` outputs:\n`Can't uninstall 'MY_SCRIPT'. No files were found to uninstall.`\n\n```cd \npython2.exe setup.py develop --uninstall```\n\noutputs:\n```\npython2.exe setup.py develop --uninstall\noptions (after parsing config files):\noptions (after parsing command line):\noption dict for 'aliases' command:\n {}\noption dict for 'develop' command:\n {'uninstall': ('command line', 1)}\nrunning develop\nDistribution.get_command_obj(): creating 'develop' command object\n setting options for 'develop' command:\n setting options for 'develop' command:\n uninstall = 1 (from command line)\nDistribution.get_command_obj(): creating 'egg_info' command object\nDistribution.get_command_obj(): creating 'install' command object\npre-finalize_{unix,other}:\n prefix: None\n exec_prefix: None\n home: None\n user: 0\n install_base: None\n install_platbase: None\n root: None\n install_purelib: None\n install_platlib: None\n install_lib: None\n install_headers: None\n install_scripts: None\n install_data: None\n compile: None\n compile: True\n optimize: None\n force: None\n skip_build: 0\n record: None\n old_and_unmanageable: None\n single_version_externally_managed: None\npost-finalize_{unix,other}():\n prefix: C:\\Python27\\ArcGIS10.2\n exec_prefix: None\n home: None\n user: 0\n install_base: C:\\Python27\\ArcGIS10.2\n install_platbase: C:\\Python27\\ArcGIS10.2\n root: None\n install_purelib: $base/Lib/site-packages\n install_platlib: $base/Lib/site-packages\n install_lib: None\n install_headers: $base/Include/$dist_name\n install_scripts: $base/Scripts\n install_data: $base\n compile: None\n compile: True\n optimize: None\n force: None\n skip_build: 0\n record: None\n old_and_unmanageable: None\n single_version_externally_managed: None\npost-expand_basedirs():\n prefix: C:\\Python27\\ArcGIS10.2\n exec_prefix: None\n home: None\n user: 0\n install_base: C:\\Python27\\ArcGIS10.2\n install_platbase: C:\\Python27\\ArcGIS10.2\n root: None\n install_purelib: $base/Lib/site-packages\n install_platlib: $base/Lib/site-packages\n install_lib: None\n install_headers: $base/Include/$dist_name\n install_scripts: $base/Scripts\n install_data: $base\n compile: None\n compile: True\n optimize: None\n force: None\n skip_build: 0\n record: None\n old_and_unmanageable: None\n single_version_externally_managed: None\nconfig vars:\n{'base': 'C:\\\\Python27\\\\ArcGIS10.2',\n 'dist_fullname': 'MY_SCRIPT-0.1.dev90+n80eec607bac7.d20150630',\n 'dist_name': 'MY_SCRIPT',\n 'dist_version': '0.1.dev90+n80eec607bac7.d20150630',\n 'exec_prefix': 'C:\\\\Python27\\\\ArcGIS10.2',\n 'platbase': 'C:\\\\Python27\\\\ArcGIS10.2',\n 'prefix': 'C:\\\\Python27\\\\ArcGIS10.2',\n 'py_version': '2.7.10',\n 'py_version_nodot': '27',\n 'py_version_short': '2.7',\n 'sys_exec_prefix': 'C:\\\\Python27\\\\ArcGIS10.2',\n 'sys_prefix': 'C:\\\\Python27\\\\ArcGIS10.2',\n 'userbase': 'C:\\\\Users\\\\MY_USER\\\\AppData\\\\Roaming\\\\Python',\n 'usersite': 'C:\\\\Users\\\\MY_USER\\\\AppData\\\\Roaming\\\\Python\\\\Python27\\\\site-packages'}\npost-expand_dirs():\n prefix: C:\\Python27\\ArcGIS10.2\n exec_prefix: None\n home: None\n user: 0\n install_base: C:\\Python27\\ArcGIS10.2\n install_platbase: C:\\Python27\\ArcGIS10.2\n root: None\n install_purelib: C:\\Python27\\ArcGIS10.2/Lib/site-packages\n install_platlib: C:\\Python27\\ArcGIS10.2/Lib/site-packages\n install_lib: None\n install_headers: C:\\Python27\\ArcGIS10.2/Include/MY_SCRIPT\n install_scripts: C:\\Python27\\ArcGIS10.2/Scripts\n install_data: C:\\Python27\\ArcGIS10.2\n compile: None\n compile: True\n optimize: None\n force: None\n skip_build: 0\n record: None\n old_and_unmanageable: None\n single_version_externally_managed: None\nafter prepending root:\n prefix: C:\\Python27\\ArcGIS10.2\n exec_prefix: None\n home: None\n user: 0\n install_base: C:\\Python27\\ArcGIS10.2\n install_platbase: C:\\Python27\\ArcGIS10.2\n root: None\n install_purelib: C:\\Python27\\ArcGIS10.2\\Lib\\site-packages\n install_platlib: C:\\Python27\\ArcGIS10.2\\Lib\\site-packages\n install_lib: C:\\Python27\\ArcGIS10.2\\Lib\\site-packages\\\n install_headers: C:\\Python27\\ArcGIS10.2\\Include\\MY_SCRIPT\n install_scripts: C:\\Python27\\ArcGIS10.2\\Scripts\n install_data: C:\\Python27\\ArcGIS10.2\n compile: None\n compile: True\n optimize: None\n force: None\n skip_build: 0\n record: None\n old_and_unmanageable: None\n single_version_externally_managed: None\nDistribution.get_command_obj(): creating 'build' command object\nDistribution.get_command_obj(): creating 'install_lib' command object\nDistribution.get_command_obj(): creating 'install_scripts' command object\n```\n\nBut my script isn't deleted from pip actually.\n\nAlso was added to PYTHON path manually before installing in develop mode (this is convenient to me) and contents of site-packages/easy-install.pth\n```\nimport sys; sys.__plen = len(sys.path)\nimport sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)\n```\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/403\n", + "score": 1.0874753 + }, + { + "url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/16", + "repository_url": "https://api.github.com/repos/dronekit/dronekit-sitl", + "labels_url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/16/labels{/name}", + "comments_url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/16/comments", + "events_url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/16/events", + "html_url": "https://github.com/dronekit/dronekit-sitl/issues/16", + "id": 93917057, + "number": 16, + "title": "dronekit-sitl-runner should spawn mavproxy to set up UDP", + "user": { + "login": "hamishwillee", + "id": 5368500, + "avatar_url": "https://avatars.githubusercontent.com/u/5368500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hamishwillee", + "html_url": "https://github.com/hamishwillee", + "followers_url": "https://api.github.com/users/hamishwillee/followers", + "following_url": "https://api.github.com/users/hamishwillee/following{/other_user}", + "gists_url": "https://api.github.com/users/hamishwillee/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hamishwillee/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hamishwillee/subscriptions", + "organizations_url": "https://api.github.com/users/hamishwillee/orgs", + "repos_url": "https://api.github.com/users/hamishwillee/repos", + "events_url": "https://api.github.com/users/hamishwillee/events{/privacy}", + "received_events_url": "https://api.github.com/users/hamishwillee/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/dronekit/dronekit-sitl/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 11, + "created_at": "2015-07-09T00:06:37Z", + "updated_at": "2015-11-13T01:00:58Z", + "closed_at": null, + "body": "To set up SITL you call the following lines( in separate terminals):\r\n```\r\ndronekit-sitl copter-3.4-dev -I0 -S --model quad --home=-35.363261,149.165230,584,353\r\nmavproxy.py --master tcp:127.0.0.1:5760 --sitl 127.0.0.1:5501 --out 127.0.0.1:14550 --out 127.0.0.1:14551\r\n```\r\nThe first line starts SITL which only exposes its TCP connection and waits.\r\n\r\nThe second line spawns an instance of mavproxy that connects SITL TCP and forwards packets to UDP localhost.\r\n\r\nThe requirement is that dronekit-sitle-runner spawn mavproxy for you. This would be more like using the familiar `sim_vehicle.sh`", + "score": 0.28503266 + }, + { + "url": "https://api.github.com/repos/pyFFTW/pyFFTW/issues/64", + "repository_url": "https://api.github.com/repos/pyFFTW/pyFFTW", + "labels_url": "https://api.github.com/repos/pyFFTW/pyFFTW/issues/64/labels{/name}", + "comments_url": "https://api.github.com/repos/pyFFTW/pyFFTW/issues/64/comments", + "events_url": "https://api.github.com/repos/pyFFTW/pyFFTW/issues/64/events", + "html_url": "https://github.com/pyFFTW/pyFFTW/issues/64", + "id": 95904256, + "number": 64, + "title": "Clean install from requirements.txt file - ImportError: No module named 'numpy'", + "user": { + "login": "ferdinandvanwyk", + "id": 2574004, + "avatar_url": "https://avatars.githubusercontent.com/u/2574004?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ferdinandvanwyk", + "html_url": "https://github.com/ferdinandvanwyk", + "followers_url": "https://api.github.com/users/ferdinandvanwyk/followers", + "following_url": "https://api.github.com/users/ferdinandvanwyk/following{/other_user}", + "gists_url": "https://api.github.com/users/ferdinandvanwyk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ferdinandvanwyk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ferdinandvanwyk/subscriptions", + "organizations_url": "https://api.github.com/users/ferdinandvanwyk/orgs", + "repos_url": "https://api.github.com/users/ferdinandvanwyk/repos", + "events_url": "https://api.github.com/users/ferdinandvanwyk/events{/privacy}", + "received_events_url": "https://api.github.com/users/ferdinandvanwyk/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pyFFTW/pyFFTW/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pyFFTW/pyFFTW/labels/help%20wanted", + "name": "help wanted", + "color": "009800" + }, + { + "url": "https://api.github.com/repos/pyFFTW/pyFFTW/labels/more%20information%20needed", + "name": "more information needed", + "color": "009800" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 16, + "created_at": "2015-07-19T10:21:31Z", + "updated_at": "2016-01-29T22:22:21Z", + "closed_at": null, + "body": "I am trying to set up a project using pyFFTW and want all my requirements to be listed in the `requirements.txt` file and installed via\r\n```\r\npip install -r requirements.txt\r\n```\r\n\r\nHowever, given a `requirements.txt` file with only the following inside\r\n```\r\nnumpy\r\npyfftw\r\n```\r\n\r\nWhen I run the installation command, I get the following error:\r\n```\r\n$ pip install -r requirements.txt \r\nDownloading/unpacking numpy (from -r requirements.txt (line 1))\r\n Downloading numpy-1.9.2.tar.gz (4.0MB): 4.0MB downloaded\r\n Running setup.py (path:/home/vanwyk/py_envs/py3/build/numpy/setup.py) egg_info for package numpy\r\n Running from numpy source directory.\r\n \r\n warning: no previously-included files matching '*.pyc' found anywhere in distribution\r\n warning: no previously-included files matching '*.pyo' found anywhere in distribution\r\n warning: no previously-included files matching '*.pyd' found anywhere in distribution\r\nDownloading/unpacking pyfftw (from -r requirements.txt (line 2))\r\n Downloading pyFFTW-0.9.2.tar.gz (336kB): 336kB downloaded\r\n Running setup.py (path:/home/vanwyk/py_envs/py3/build/pyfftw/setup.py) egg_info for package pyfftw\r\n Traceback (most recent call last):\r\n File \"\", line 17, in \r\n File \"/home/vanwyk/py_envs/py3/build/pyfftw/setup.py\", line 25, in \r\n import numpy\r\n ImportError: No module named 'numpy'\r\n Complete output from command python setup.py egg_info:\r\n Traceback (most recent call last):\r\n\r\n File \"\", line 17, in \r\n\r\n File \"/home/vanwyk/py_envs/py3/build/pyfftw/setup.py\", line 25, in \r\n\r\n import numpy\r\n\r\nImportError: No module named 'numpy'\r\n\r\n----------------------------------------\r\nCleaning up...\r\n```\r\n\r\nBut if I install `numpy` and `pyfftw` separately things work fine. Is there any way to make installing from `requirements.txt` work so installing dependencies doesn't become a two-step process?\r\n\r\nUbuntu 14.04 LTS\r\nPython 3.4 running in virtualenv", + "score": 0.7448452 + }, + { + "url": "https://api.github.com/repos/cobrateam/splinter/issues/422", + "repository_url": "https://api.github.com/repos/cobrateam/splinter", + "labels_url": "https://api.github.com/repos/cobrateam/splinter/issues/422/labels{/name}", + "comments_url": "https://api.github.com/repos/cobrateam/splinter/issues/422/comments", + "events_url": "https://api.github.com/repos/cobrateam/splinter/issues/422/events", + "html_url": "https://github.com/cobrateam/splinter/issues/422", + "id": 97335882, + "number": 422, + "title": "Custom firefox profile doesn't work in Windows", + "user": { + "login": "endolith", + "id": 58611, + "avatar_url": "https://avatars.githubusercontent.com/u/58611?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/endolith", + "html_url": "https://github.com/endolith", + "followers_url": "https://api.github.com/users/endolith/followers", + "following_url": "https://api.github.com/users/endolith/following{/other_user}", + "gists_url": "https://api.github.com/users/endolith/gists{/gist_id}", + "starred_url": "https://api.github.com/users/endolith/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/endolith/subscriptions", + "organizations_url": "https://api.github.com/users/endolith/orgs", + "repos_url": "https://api.github.com/users/endolith/repos", + "events_url": "https://api.github.com/users/endolith/events{/privacy}", + "received_events_url": "https://api.github.com/users/endolith/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/cobrateam/splinter/labels/bug", + "name": "bug", + "color": "ed1313" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 2, + "created_at": "2015-07-26T17:29:41Z", + "updated_at": "2015-07-27T15:19:00Z", + "closed_at": null, + "body": "[Documentation](http://splinter.readthedocs.org/en/latest/drivers/firefox.html#how-to-use-a-specific-profile-for-firefox) says you can select an existing firefox profile instead of creating a temporary one each time:\r\n\r\n browser = Browser('firefox', profile='my_profile')\r\n\r\nBut this doesn't actually work, it doesn't know where to search for the profile:\r\n\r\n```\r\nbrowser = Browser('firefox', profile='default')\r\n...\r\nWindowsError: [Error 3] The system cannot find the path specified: 'default/*.*'\r\n```\r\n\r\nsame for `profile='272kp1a1.default'`, `profile='272kp1a1'`, etc. though it isn't explained in the docs which type of string is correct.", + "score": 2.9287922 + }, + { + "url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5115", + "repository_url": "https://api.github.com/repos/scikit-learn/scikit-learn", + "labels_url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5115/labels{/name}", + "comments_url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5115/comments", + "events_url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5115/events", + "html_url": "https://github.com/scikit-learn/scikit-learn/issues/5115", + "id": 100597083, + "number": 5115, + "title": "GridSearchCV freezes indefinitely with multithreading enabled (i.e. w/ n_jobs != 1)", + "user": { + "login": "eric-czech", + "id": 6130352, + "avatar_url": "https://avatars.githubusercontent.com/u/6130352?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/eric-czech", + "html_url": "https://github.com/eric-czech", + "followers_url": "https://api.github.com/users/eric-czech/followers", + "following_url": "https://api.github.com/users/eric-czech/following{/other_user}", + "gists_url": "https://api.github.com/users/eric-czech/gists{/gist_id}", + "starred_url": "https://api.github.com/users/eric-czech/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/eric-czech/subscriptions", + "organizations_url": "https://api.github.com/users/eric-czech/orgs", + "repos_url": "https://api.github.com/users/eric-czech/repos", + "events_url": "https://api.github.com/users/eric-czech/events{/privacy}", + "received_events_url": "https://api.github.com/users/eric-czech/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/scikit-learn/scikit-learn/labels/Bug", + "name": "Bug", + "color": "e10c02" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 33, + "created_at": "2015-08-12T17:47:36Z", + "updated_at": "2016-05-06T19:14:47Z", + "closed_at": null, + "body": "I've been intermittently running into this issue (in the subject) with GridSearchCV over a year now, across python 2.7, 3.3, and 3.4, two jobs, several different mac osx platforms/laptops, and many different versions of numpy and scikit-learn (I keep them updated pretty well).\r\n\r\nI've tried all of these suggestions and none of them __always__ work:\r\n\r\nhttps://github.com/scikit-learn/scikit-learn/issues/3605 - Setting multiprocessing start method to 'forkserver'\r\nhttps://github.com/scikit-learn/scikit-learn/issues/2889 - Having issues ONLY when custom scoring functions are passed (I've absolutely had this problem where the same GridSearchCV calls with n_jobs != 1 freeze with a custom scorer but do just fine without one)\r\nhttps://github.com/joblib/joblib/issues/138 - Setting environment variables from MKL thread counts (I have tried this when running a numpy/sklearn built against mkl from an Anaconda distribution)\r\nScaling inputs and making sure there are no errors with n_jobs=1 - I'm completely sure that the things I'm trying to do on multiple threads run correctly on one thread, and in a small amount of time\r\n\r\nIt's a very frustrating problem that always seems to pop back up right when I'm confident it's gone, and the ONLY workaround that works __100% of the time__ for me is going to the source for GridSearchCV in whatever sklearn distribution I'm on an manually changing the backend set in the call to Paralell to 'threading' (instead of multiprocessing).\r\n\r\nI haven't benchmarked the difference between that hack and setting n_jobs=1, but would there be any reason to expect any gains with the threading backend over no parallelization at all? Certainly, it wouldn't be as good as multiprocessing but at least it's more stable.\r\n\r\nbtw the most recent versions I've had the same problem on are:\r\n- Mac OS 10.9.5\r\n- Python 3.4.3 :: Continuum Analytics, Inc.\r\n- scikit-learn==0.16.1\r\n- scipy==0.16.0\r\n- numpy==1.9.2\r\n- pandas==0.16.2\r\n- joblib==0.8.4", + "score": 0.24770187 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/3028", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/3028/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/3028/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/3028/events", + "html_url": "https://github.com/pypa/pip/issues/3028", + "id": 100766896, + "number": 3028, + "title": "pip install zc.recipe.egg fails on pip >= 7.x", + "user": { + "login": "kalbermattenm", + "id": 1681332, + "avatar_url": "https://avatars.githubusercontent.com/u/1681332?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kalbermattenm", + "html_url": "https://github.com/kalbermattenm", + "followers_url": "https://api.github.com/users/kalbermattenm/followers", + "following_url": "https://api.github.com/users/kalbermattenm/following{/other_user}", + "gists_url": "https://api.github.com/users/kalbermattenm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kalbermattenm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kalbermattenm/subscriptions", + "organizations_url": "https://api.github.com/users/kalbermattenm/orgs", + "repos_url": "https://api.github.com/users/kalbermattenm/repos", + "events_url": "https://api.github.com/users/kalbermattenm/events{/privacy}", + "received_events_url": "https://api.github.com/users/kalbermattenm/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/setuptools", + "name": "setuptools", + "color": "0052cc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 10, + "created_at": "2015-08-13T13:18:03Z", + "updated_at": "2015-11-23T06:32:03Z", + "closed_at": null, + "body": "On Windows, I was using pip 7.0.1 to install some eggs, notably `zc.recipe.egg` which is part of buildout.\r\n\r\nSince I upgraded virtualenv to version 13.1.0, which comes with a local pip wheel and thus installs pip 7.1.0, when I run `pip install zc.recipe.egg` in my virtual env, I get an error:\r\n```\r\nD:\\Applications\\tmp\\test2>Scripts\\pip.exe install zc.recipe.egg\r\nCollecting zc.recipe.egg\r\nInstalling collected packages: zc.recipe.egg\r\nzc.recipe.egg is in an unsupported or invalid wheel\r\n```\r\nThe error message `is in an unsupported or invalid wheel` is not very explicit and I do not know why pip 7.1.0 (and only this version of pip) is complaining about this egg ?\r\n\r\nI only have this problem with this egg...\r\n\r\nDoes anyone have a clue on what this means, why it appeared when I change my pip version and if there is a way to fix it ?", + "score": 7.2523046 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/26665", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/26665/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/26665/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/26665/events", + "html_url": "https://github.com/saltstack/salt/issues/26665", + "id": 103287611, + "number": 26665, + "title": "salt on MacOS X - adding python RAET lib breaks \"salt-call --versions\" output", + "user": { + "login": "TheBigBear", + "id": 471105, + "avatar_url": "https://avatars.githubusercontent.com/u/471105?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/TheBigBear", + "html_url": "https://github.com/TheBigBear", + "followers_url": "https://api.github.com/users/TheBigBear/followers", + "following_url": "https://api.github.com/users/TheBigBear/following{/other_user}", + "gists_url": "https://api.github.com/users/TheBigBear/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TheBigBear/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TheBigBear/subscriptions", + "organizations_url": "https://api.github.com/users/TheBigBear/orgs", + "repos_url": "https://api.github.com/users/TheBigBear/repos", + "events_url": "https://api.github.com/users/TheBigBear/events{/privacy}", + "received_events_url": "https://api.github.com/users/TheBigBear/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Core", + "name": "Core", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Help%20Wanted", + "name": "Help Wanted", + "color": "009800" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/OS%20X", + "name": "OS X", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P4", + "name": "P4", + "color": "031a39" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/13", + "html_url": "https://github.com/saltstack/salt/milestones/Approved", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/13/labels", + "id": 9265, + "number": 13, + "title": "Approved", + "description": "All issues that are ready to be worked on, both bugs and features.", + "creator": { + "login": "thatch45", + "id": 507599, + "avatar_url": "https://avatars.githubusercontent.com/u/507599?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/thatch45", + "html_url": "https://github.com/thatch45", + "followers_url": "https://api.github.com/users/thatch45/followers", + "following_url": "https://api.github.com/users/thatch45/following{/other_user}", + "gists_url": "https://api.github.com/users/thatch45/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thatch45/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thatch45/subscriptions", + "organizations_url": "https://api.github.com/users/thatch45/orgs", + "repos_url": "https://api.github.com/users/thatch45/repos", + "events_url": "https://api.github.com/users/thatch45/events{/privacy}", + "received_events_url": "https://api.github.com/users/thatch45/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 3040, + "closed_issues": 3781, + "state": "open", + "created_at": "2011-05-14T04:00:56Z", + "updated_at": "2016-06-21T19:49:47Z", + "due_on": null, + "closed_at": null + }, + "comments": 1, + "created_at": "2015-08-26T14:49:41Z", + "updated_at": "2015-09-25T21:25:42Z", + "closed_at": null, + "body": "On a Mac OS X 10.10.5 \r\n```uname -a``` is reporting: \r\n\r\n```\r\nDarwin uk-it-100 14.5.0 Darwin Kernel Version 14.5.0: Wed Jul 29 02:26:53 PDT 2015; root:xnu-2782.40.9~1/RELEASE_X86_64 x86_6\r\n```\r\n\r\nand my ```salt-call --versions``` is reporting:\r\n\r\n```\r\n Salt: 2015.5.5\r\n Python: 2.6.9 (unknown, Jul 14 2015, 19:46:31)\r\n Jinja2: 2.8\r\n M2Crypto: 0.22\r\n msgpack-python: 0.4.6\r\n msgpack-pure: 0.1.3\r\n pycrypto: 2.6.1\r\n libnacl: Not Installed\r\n PyYAML: 3.11\r\n ioflo: 1.3.9\r\n PyZMQ: 14.7.0\r\n RAET: Not Installed\r\n ZMQ: 4.1.3\r\n Mako: 1.0.1\r\n Tornado: 4.2.1\r\n timelib: Not Installed\r\n dateutil: 2.4.2\r\n```\r\n\r\n__But if I do__ a ```pip install -U RAET```, this adds both ```RAET``` and ```libnacl```, as expected.\r\n\r\nlog of ```pip install -U RAET```:\r\n\r\n```\r\npip install RAET \r\nCollecting RAET\r\n/Library/Python/2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.\r\n InsecurePlatformWarning\r\n Using cached raet-0.6.3.tar.gz\r\nRequirement already satisfied (use --upgrade to upgrade): ioflo>=1.2.1 in /Library/Python/2.6/site-packages (from RAET)\r\nCollecting libnacl>=1.4.0 (from RAET)\r\n Using cached libnacl-1.4.3.tar.gz\r\nRequirement already satisfied (use --upgrade to upgrade): six>=1.6.1 in /Library/Python/2.6/site-packages (from RAET)\r\nRequirement already satisfied (use --upgrade to upgrade): importlib>=1.0.3 in /Library/Python/2.6/site-packages (from RAET)\r\nRequirement already satisfied (use --upgrade to upgrade): argparse>=1.2.1 in /Library/Python/2.6/site-packages (from RAET)\r\nRequirement already satisfied (use --upgrade to upgrade): enum34>=1.0.4 in /Library/Python/2.6/site-packages (from RAET)\r\nRequirement already satisfied (use --upgrade to upgrade): ordereddict in /Library/Python/2.6/site-packages (from enum34>=1.0.4->RAET)\r\nInstalling collected packages: libnacl, RAET\r\n Running setup.py install for libnacl\r\n Running setup.py install for RAET\r\nSuccessfully installed RAET-0.6.3 libnacl-1.4.3\r\n```\r\n\r\n__But after that__ the ```salt-call --versions``` \"breaks\" and only shows:\r\n```\r\nsalt-call --versions\r\nTraceback (most recent call last):\r\n File \"/usr/local/bin/salt-call\", line 9, in \r\n load_entry_point('salt==2015.5.5', 'console_scripts', 'salt-call')()\r\n File \"/Library/Python/2.6/site-packages/salt/scripts.py\", line 221, in salt_call\r\n import salt.cli.call\r\n File \"/Library/Python/2.6/site-packages/salt/cli/call.py\", line 9, in \r\n import salt.cli.caller\r\n File \"/Library/Python/2.6/site-packages/salt/cli/caller.py\", line 35, in \r\n from raet import raeting, nacling\r\n File \"/Library/Python/2.6/site-packages/raet/__init__.py\", line 12, in \r\n importlib.import_module(\".{0}\".format(m), package='raet')\r\n File \"/Library/Python/2.6/site-packages/importlib/__init__.py\", line 37, in import_module\r\n __import__(name)\r\n File \"/Library/Python/2.6/site-packages/raet/nacling.py\", line 11, in \r\n import libnacl\r\n File \"/Library/Python/2.6/site-packages/libnacl/__init__.py\", line 89, in \r\n nacl = _get_nacl()\r\n File \"/Library/Python/2.6/site-packages/libnacl/__init__.py\", line 55, in _get_nacl\r\n raise OSError(msg)\r\nOSError: Could not locate nacl lib, searched for libsodium, tweetnacl\r\n```\r\nUntil I do a ```pip unistall libnacl RAET```, after which ```salt-call --versions``` works again as expected.\r\n\r\nPS: I \"think\" I had seen the same (or very similar) issue with the ```python RAET``` and ```ibnacl``` lib on windows around the early 2015.5 series, but on a ```2015.8.0rc3``` I no longer see that issue there.", + "score": 0.7841893 + }, + { + "url": "https://api.github.com/repos/PyCQA/pylint/issues/634", + "repository_url": "https://api.github.com/repos/PyCQA/pylint", + "labels_url": "https://api.github.com/repos/PyCQA/pylint/issues/634/labels{/name}", + "comments_url": "https://api.github.com/repos/PyCQA/pylint/issues/634/comments", + "events_url": "https://api.github.com/repos/PyCQA/pylint/issues/634/events", + "html_url": "https://github.com/PyCQA/pylint/issues/634", + "id": 121204667, + "number": 634, + "title": "[easy] html report raises UnicodeEncodeError on unicode docstrings", + "user": { + "login": "pylint-bot", + "id": 16198247, + "avatar_url": "https://avatars.githubusercontent.com/u/16198247?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pylint-bot", + "html_url": "https://github.com/pylint-bot", + "followers_url": "https://api.github.com/users/pylint-bot/followers", + "following_url": "https://api.github.com/users/pylint-bot/following{/other_user}", + "gists_url": "https://api.github.com/users/pylint-bot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pylint-bot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pylint-bot/subscriptions", + "organizations_url": "https://api.github.com/users/pylint-bot/orgs", + "repos_url": "https://api.github.com/users/pylint-bot/repos", + "events_url": "https://api.github.com/users/pylint-bot/events{/privacy}", + "received_events_url": "https://api.github.com/users/pylint-bot/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/PyCQA/pylint/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 9, + "created_at": "2015-08-31T19:38:26Z", + "updated_at": "2015-12-09T10:18:46Z", + "closed_at": null, + "body": "Originally reported by: **Bjorn Pettersen (BitBucket: [thebjorn](http://bitbucket.org/thebjorn), GitHub: @thebjorn?)**\n\n----------------------------------------\n\nThis is triggered by unicode docstrings in duplicated code, e.g. create a module where this code is duplicated:\n\n```\n#!python\n\n# -*- coding: utf-8 -*-\n\ndef funcname(hello):\n u'æøå'\n for i in range(hello):\n print 'world'\n return hello + 'world'\n\n```\n\nand you'll get the following error (notice that there is no reference to which file is in error):\n\n```\n#!python\n\n(dev) go|c:\\srv\\tmp> pylint upyli -fhtml\nNo config file found, using default configuration\nTraceback (most recent call last):\n File \"c:\\python27\\Lib\\runpy.py\", line 162, in _run_module_as_main\n \"__main__\", fname, loader, pkg_name)\n File \"c:\\python27\\Lib\\runpy.py\", line 72, in _run_code\n exec code in run_globals\n File \"c:\\srv\\venv\\dev\\Scripts\\pylint.exe\\__main__.py\", line 9, in \n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\__init__.py\", line 23, in run_pylint\n Run(sys.argv[1:])\n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\lint.py\", line 1332, in __init__\n linter.check(args)\n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\lint.py\", line 747, in check\n self._do_check(files_or_modules)\n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\lint.py\", line 878, in _do_check\n checker.close()\n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\checkers\\similar.py\", line 320, in close\n self.add_message('R0801', args=(len(couples), '\\n'.join(msg)))\n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\checkers\\__init__.py\", line 101, in add_message\n self.linter.add_message(msg_id, line, node, args, confidence)\n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\utils.py\", line 410, in add_message\n (abspath, path, module, obj, line or 1, col_offset or 0), msg, confidence))\n File \"c:\\srv\\venv\\dev\\lib\\site-packages\\pylint\\reporters\\html.py\", line 70, in handle_message\n self.msgs += [str(getattr(msg, field)) for field in self.msgargs]\nUnicodeEncodeError: 'ascii' codec can't encode characters in position 87-89: ordinal not in range(128)\n```\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/logilab/pylint/issue/634\n", + "score": 0.5391859 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/424", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/424/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/424/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/424/events", + "html_url": "https://github.com/pypa/setuptools/issues/424", + "id": 144281624, + "number": 424, + "title": "__PYVENV_LAUNCHER__ not considered when cross-compiling", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/minor", + "name": "minor", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2015-09-01T13:59:03Z", + "updated_at": "2016-03-31T14:54:30Z", + "closed_at": null, + "body": "Originally reported by: **commodo (Bitbucket: [commodo](http://bitbucket.org/commodo), GitHub: [commodo](http://github.com/commodo))**\n\n----------------------------------------\n\nWell, maybe I did not formulate this too well.\nContext: we're cross-compiling python-setuptools for OpenWRT, and we're using the __PYVENV_LAUNCHER__ to create/cross-compile scripts (easy_install and pip) to have \"#!/usr/bin/python2.7\" in the script header rather than the host python (which is in a build path like /home/x/work/openwrt/staging_dir/host/bin/python2).\n\nIt seems that the command/install_scripts.py file provides and executable path for python, which happens to be the host python.\nThat means, that when the target setuptools is built, it will try to run the python at that long build path and won't work.\n\nNot sure what the best fix is, but for now, we're patching (in OpenWRT) with this (check below please):\nhttps://github.com/commodo/packages/commit/b9a0a650352684d8111758c5381c2853585b2015\n\nThis worked for python-setuptools up to a point ; can't be sure when this changed, since I am not comfortable with Mercurial (i.e. I was lazy to dig deeper in commits).\nThis is our current fix, but we'd like an official upstream version.\n\nThanks :)\nP.S: while I'm reporting this, maybe I'll try to see why I added this patch as well:\nhttps://github.com/openwrt/packages/blob/master/lang/python-setuptools/patches/0001-remove-windows-support.patch\nIt was added some time ago and I forgot why.\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/424\n", + "score": 0.7631212 + }, + { + "url": "https://api.github.com/repos/c-w/Gutenberg/issues/22", + "repository_url": "https://api.github.com/repos/c-w/Gutenberg", + "labels_url": "https://api.github.com/repos/c-w/Gutenberg/issues/22/labels{/name}", + "comments_url": "https://api.github.com/repos/c-w/Gutenberg/issues/22/comments", + "events_url": "https://api.github.com/repos/c-w/Gutenberg/issues/22/events", + "html_url": "https://github.com/c-w/Gutenberg/issues/22", + "id": 104579988, + "number": 22, + "title": "frozenset on query", + "user": { + "login": "franciscovargas", + "id": 5540172, + "avatar_url": "https://avatars.githubusercontent.com/u/5540172?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/franciscovargas", + "html_url": "https://github.com/franciscovargas", + "followers_url": "https://api.github.com/users/franciscovargas/followers", + "following_url": "https://api.github.com/users/franciscovargas/following{/other_user}", + "gists_url": "https://api.github.com/users/franciscovargas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/franciscovargas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/franciscovargas/subscriptions", + "organizations_url": "https://api.github.com/users/franciscovargas/orgs", + "repos_url": "https://api.github.com/users/franciscovargas/repos", + "events_url": "https://api.github.com/users/franciscovargas/events{/privacy}", + "received_events_url": "https://api.github.com/users/franciscovargas/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/c-w/Gutenberg/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "c-w", + "id": 1086421, + "avatar_url": "https://avatars.githubusercontent.com/u/1086421?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/c-w", + "html_url": "https://github.com/c-w", + "followers_url": "https://api.github.com/users/c-w/followers", + "following_url": "https://api.github.com/users/c-w/following{/other_user}", + "gists_url": "https://api.github.com/users/c-w/gists{/gist_id}", + "starred_url": "https://api.github.com/users/c-w/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/c-w/subscriptions", + "organizations_url": "https://api.github.com/users/c-w/orgs", + "repos_url": "https://api.github.com/users/c-w/repos", + "events_url": "https://api.github.com/users/c-w/events{/privacy}", + "received_events_url": "https://api.github.com/users/c-w/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 11, + "created_at": "2015-09-02T21:55:50Z", + "updated_at": "2016-05-29T21:30:51Z", + "closed_at": null, + "body": "The query example ```(print(get_etexts('title', 'Moby Dick; Or, The Whale')))``` is returning frozenset([]) for me is this a current bug or has pip just set this up wrongly ?", + "score": 1.7549808 + }, + { + "url": "https://api.github.com/repos/vmalyi/adb_android/issues/23", + "repository_url": "https://api.github.com/repos/vmalyi/adb_android", + "labels_url": "https://api.github.com/repos/vmalyi/adb_android/issues/23/labels{/name}", + "comments_url": "https://api.github.com/repos/vmalyi/adb_android/issues/23/comments", + "events_url": "https://api.github.com/repos/vmalyi/adb_android/issues/23/events", + "html_url": "https://github.com/vmalyi/adb_android/issues/23", + "id": 104803785, + "number": 23, + "title": "ImportError: No module named 'var'", + "user": { + "login": "Blooprint", + "id": 6580235, + "avatar_url": "https://avatars.githubusercontent.com/u/6580235?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Blooprint", + "html_url": "https://github.com/Blooprint", + "followers_url": "https://api.github.com/users/Blooprint/followers", + "following_url": "https://api.github.com/users/Blooprint/following{/other_user}", + "gists_url": "https://api.github.com/users/Blooprint/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Blooprint/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Blooprint/subscriptions", + "organizations_url": "https://api.github.com/users/Blooprint/orgs", + "repos_url": "https://api.github.com/users/Blooprint/repos", + "events_url": "https://api.github.com/users/Blooprint/events{/privacy}", + "received_events_url": "https://api.github.com/users/Blooprint/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/vmalyi/adb_android/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 10, + "created_at": "2015-09-03T23:55:56Z", + "updated_at": "2016-06-02T03:04:57Z", + "closed_at": null, + "body": "error in the adb_android.py file. help?", + "score": 1.2356366 + }, + { + "url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5269", + "repository_url": "https://api.github.com/repos/scikit-learn/scikit-learn", + "labels_url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5269/labels{/name}", + "comments_url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5269/comments", + "events_url": "https://api.github.com/repos/scikit-learn/scikit-learn/issues/5269/events", + "html_url": "https://github.com/scikit-learn/scikit-learn/issues/5269", + "id": 106353942, + "number": 5269, + "title": "Overflow error with sklearn.datasets.load_svmlight_file()", + "user": { + "login": "makemate", + "id": 12397548, + "avatar_url": "https://avatars.githubusercontent.com/u/12397548?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/makemate", + "html_url": "https://github.com/makemate", + "followers_url": "https://api.github.com/users/makemate/followers", + "following_url": "https://api.github.com/users/makemate/following{/other_user}", + "gists_url": "https://api.github.com/users/makemate/gists{/gist_id}", + "starred_url": "https://api.github.com/users/makemate/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/makemate/subscriptions", + "organizations_url": "https://api.github.com/users/makemate/orgs", + "repos_url": "https://api.github.com/users/makemate/repos", + "events_url": "https://api.github.com/users/makemate/events{/privacy}", + "received_events_url": "https://api.github.com/users/makemate/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/scikit-learn/scikit-learn/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/scikit-learn/scikit-learn/labels/Need%20Contributor", + "name": "Need Contributor", + "color": "009800" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 11, + "created_at": "2015-09-14T14:25:41Z", + "updated_at": "2015-12-10T14:47:49Z", + "closed_at": null, + "body": "Scikit-learn version: 0.16.1 OS X Yosemite 10.10.5\r\n\r\nI've created a SVMlight file with only one line from a pandas dataframe:\r\n\r\n```\r\nfrom sklearn.datasets import load_svmlight_file\r\nfrom sklearn.datasets import dump_svmlight_file\r\n\r\ndump_svmlight_file(toy_data.drop([\"Output\"], axis=1),toy_data['Output'],\"../data/oneline_pid.txt\", query_id=toy_data['EventID'])\r\n```\r\n\r\nWhen I open the file in an editor the result looks like this:\r\n\r\n0 qid:72048431380967004 0:1440446648 1:72048431380967004 2:236784985 \r\n\r\nWhen I try to load the file with query_id=True I get an overflow error.\r\n\r\n```\r\ntrain = load_svmlight_file(\"../data/oneline_pid.txt\", dtype=np.uint64, query_id=True)\r\n```\r\nOverflowError: signed integer is greater than maximum\r\n\r\nIf I load the file with query_id=False there appears no error message but the value for the query_id is wrong. This is the output:\r\n\r\n[[ 1440446648 72048431380967008 236784985 ]]\r\n\r\n72048431380967004 appears now as 72048431380967008.\r\n\r\nHow do I avoid this error, the maximum value of np.uint64 is 9223372036854775807 so there should be no overflow error.\r\n\r\nHave tried to load with np.int64 as data type too, but the output is the same.\r\n\r\n\r\n", + "score": 0.48332724 + }, + { + "url": "https://api.github.com/repos/home-assistant/home-assistant/issues/393", + "repository_url": "https://api.github.com/repos/home-assistant/home-assistant", + "labels_url": "https://api.github.com/repos/home-assistant/home-assistant/issues/393/labels{/name}", + "comments_url": "https://api.github.com/repos/home-assistant/home-assistant/issues/393/comments", + "events_url": "https://api.github.com/repos/home-assistant/home-assistant/issues/393/events", + "html_url": "https://github.com/home-assistant/home-assistant/issues/393", + "id": 107148696, + "number": 393, + "title": "Loading configuration.yaml triggers UnicodeEncodeError on Windows", + "user": { + "login": "pavoni", + "id": 4487313, + "avatar_url": "https://avatars.githubusercontent.com/u/4487313?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pavoni", + "html_url": "https://github.com/pavoni", + "followers_url": "https://api.github.com/users/pavoni/followers", + "following_url": "https://api.github.com/users/pavoni/following{/other_user}", + "gists_url": "https://api.github.com/users/pavoni/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pavoni/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pavoni/subscriptions", + "organizations_url": "https://api.github.com/users/pavoni/orgs", + "repos_url": "https://api.github.com/users/pavoni/repos", + "events_url": "https://api.github.com/users/pavoni/events{/privacy}", + "received_events_url": "https://api.github.com/users/pavoni/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/home-assistant/home-assistant/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/home-assistant/home-assistant/labels/windows", + "name": "windows", + "color": "fef2c0" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2015-09-18T07:29:07Z", + "updated_at": "2015-09-20T20:34:52Z", + "closed_at": null, + "body": "I just tried running master on my windows machine (using 'python setup.py develop' (this does run python 3.4) - and I get the following:-\r\n\r\n````\r\n$ hass\r\nConfig directory: C:\\Users\\Greg\\AppData\\Roaming\\.homeassistant\r\nTraceback (most recent call last):\r\n File \"c:\\Python34\\Scripts\\hass-script.py\", line 9, in \r\n load_entry_point('homeassistant==0.7.3.dev0', 'console_scripts', 'hass')()\r\n File \"c:\\users\\greg\\home-assistant\\homeassistant\\__main__.py\", line 250, in main\r\n skip_pip=args.skip_pip, log_rotate_days=args.log_rotate_days)\r\n File \"c:\\users\\greg\\home-assistant\\homeassistant\\bootstrap.py\", line 224, in from_config_file\r\n config_dict = config_util.load_config_file(config_path)\r\n File \"c:\\users\\greg\\home-assistant\\homeassistant\\config.py\", line 117, in load_config_file\r\n return load_yaml_config_file(config_path)\r\n File \"c:\\users\\greg\\home-assistant\\homeassistant\\config.py\", line 148, in load_yaml_config_file\r\n conf_dict = parse(config_path)\r\n File \"c:\\users\\greg\\home-assistant\\homeassistant\\config.py\", line 130, in parse\r\n return yaml.load(conf_file) or {}\r\n File \"c:\\Python34\\lib\\site-packages\\yaml\\__init__.py\", line 70, in load\r\n loader = Loader(stream)\r\n File \"c:\\Python34\\lib\\site-packages\\yaml\\loader.py\", line 34, in __init__\r\n Reader.__init__(self, stream)\r\n File \"c:\\Python34\\lib\\site-packages\\yaml\\reader.py\", line 85, in __init__\r\n self.determine_encoding()\r\n File \"c:\\Python34\\lib\\site-packages\\yaml\\reader.py\", line 124, in determine_encoding\r\n self.update_raw()\r\n File \"c:\\Python34\\lib\\site-packages\\yaml\\reader.py\", line 178, in update_raw\r\n data = self.stream.read(size)\r\n File \"c:\\Python34\\lib\\codecs.py\", line 319, in decode\r\n (result, consumed) = self._buffer_decode(data, self.errors, final)\r\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 1709: invalid start byte\r\n````\r\n\r\nI get the same on the dev branch", + "score": 3.3511043 + }, + { + "url": "https://api.github.com/repos/pytest-dev/pytest/issues/1029", + "repository_url": "https://api.github.com/repos/pytest-dev/pytest", + "labels_url": "https://api.github.com/repos/pytest-dev/pytest/issues/1029/labels{/name}", + "comments_url": "https://api.github.com/repos/pytest-dev/pytest/issues/1029/comments", + "events_url": "https://api.github.com/repos/pytest-dev/pytest/issues/1029/events", + "html_url": "https://github.com/pytest-dev/pytest/issues/1029", + "id": 107425753, + "number": 1029, + "title": "pytest2.8 invariantly writes to working directory + fails on readonly filesystem", + "user": { + "login": "asottile", + "id": 1810591, + "avatar_url": "https://avatars.githubusercontent.com/u/1810591?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/asottile", + "html_url": "https://github.com/asottile", + "followers_url": "https://api.github.com/users/asottile/followers", + "following_url": "https://api.github.com/users/asottile/following{/other_user}", + "gists_url": "https://api.github.com/users/asottile/gists{/gist_id}", + "starred_url": "https://api.github.com/users/asottile/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/asottile/subscriptions", + "organizations_url": "https://api.github.com/users/asottile/orgs", + "repos_url": "https://api.github.com/users/asottile/repos", + "events_url": "https://api.github.com/users/asottile/events{/privacy}", + "received_events_url": "https://api.github.com/users/asottile/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pytest-dev/pytest/labels/backward%20compatibility", + "name": "backward compatibility", + "color": "f7c6c7" + }, + { + "url": "https://api.github.com/repos/pytest-dev/pytest/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/pytest-dev/pytest/labels/easy", + "name": "easy", + "color": "bfe5bf" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "RonnyPfannschmidt", + "id": 156838, + "avatar_url": "https://avatars.githubusercontent.com/u/156838?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/RonnyPfannschmidt", + "html_url": "https://github.com/RonnyPfannschmidt", + "followers_url": "https://api.github.com/users/RonnyPfannschmidt/followers", + "following_url": "https://api.github.com/users/RonnyPfannschmidt/following{/other_user}", + "gists_url": "https://api.github.com/users/RonnyPfannschmidt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/RonnyPfannschmidt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/RonnyPfannschmidt/subscriptions", + "organizations_url": "https://api.github.com/users/RonnyPfannschmidt/orgs", + "repos_url": "https://api.github.com/users/RonnyPfannschmidt/repos", + "events_url": "https://api.github.com/users/RonnyPfannschmidt/events{/privacy}", + "received_events_url": "https://api.github.com/users/RonnyPfannschmidt/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/pytest-dev/pytest/milestones/9", + "html_url": "https://github.com/pytest-dev/pytest/milestones/2.8.6", + "labels_url": "https://api.github.com/repos/pytest-dev/pytest/milestones/9/labels", + "id": 1459484, + "number": 9, + "title": "2.8.6", + "description": "", + "creator": { + "login": "RonnyPfannschmidt", + "id": 156838, + "avatar_url": "https://avatars.githubusercontent.com/u/156838?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/RonnyPfannschmidt", + "html_url": "https://github.com/RonnyPfannschmidt", + "followers_url": "https://api.github.com/users/RonnyPfannschmidt/followers", + "following_url": "https://api.github.com/users/RonnyPfannschmidt/following{/other_user}", + "gists_url": "https://api.github.com/users/RonnyPfannschmidt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/RonnyPfannschmidt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/RonnyPfannschmidt/subscriptions", + "organizations_url": "https://api.github.com/users/RonnyPfannschmidt/orgs", + "repos_url": "https://api.github.com/users/RonnyPfannschmidt/repos", + "events_url": "https://api.github.com/users/RonnyPfannschmidt/events{/privacy}", + "received_events_url": "https://api.github.com/users/RonnyPfannschmidt/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 9, + "closed_issues": 0, + "state": "closed", + "created_at": "2015-12-14T15:29:51Z", + "updated_at": "2016-06-19T18:49:56Z", + "due_on": null, + "closed_at": "2016-02-12T16:01:53Z" + }, + "comments": 20, + "created_at": "2015-09-21T00:09:05Z", + "updated_at": "2016-01-22T22:35:53Z", + "closed_at": null, + "body": "I believe these to be the same issue so I'm only making a single report.\r\n\r\n```\r\n$ virtualenv venv\r\n...\r\n$ . venv/bin/activate\r\n$ pip install pytest\r\n...\r\n$ py.test foo.py\r\n============================= test session starts ==============================\r\nplatform linux2 -- Python 2.7.6, pytest-2.8.0, py-1.4.30, pluggy-0.3.1\r\nrootdir: /tmp/foo, inifile: \r\n\r\n=============================== in 0.00 seconds ===============================\r\nERROR: file not found: foo.py\r\n(venv)asottile@work:/tmp/foo$ ls -al .cache/v/cache/lastfailed \r\n-rw-rw-r-- 1 asottile asottile 2 Sep 20 17:03 .cache/v/cache/lastfailed\r\n```\r\n\r\nAnd the error from our CI server (which is running a repo inside docker)\r\n\r\n```\r\n15:06:43 docker run -t -v /nail/scratch/jenkins_prod_slave/workspace/packages-ubuntu-allocate_playground:/work:ro nginx_test_container /bin/bash -c \"cd /work/itest && . /venv34/bin/activate && py.test -s test_nginx.py\"\r\n15:06:43 ============================= test session starts ==============================\r\n15:06:43 platform linux -- Python 3.4.2, pytest-2.8.0, py-1.4.30, pluggy-0.3.1\r\n15:06:43 rootdir: /work, inifile: \r\n15:06:43 \r\ncollecting 0 items\r\ncollecting 5 items\r\ncollected 5 items \r\n15:06:43 \r\n15:06:44 test_nginx.py\r\n...\r\n15:06:51 .Traceback (most recent call last):\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/py/_error.py\", line 64, in checked_call\r\n15:06:51 return func(*args, **kwargs)\r\n15:06:51 OSError: [Errno 30] Read-only file system: '/work/.cache/v/cache/lastfailed'\r\n15:06:51 \r\n15:06:51 During handling of the above exception, another exception occurred:\r\n15:06:51 \r\n15:06:51 Traceback (most recent call last):\r\n15:06:51 File \"/venv34/bin/py.test\", line 11, in \r\n15:06:51 sys.exit(main())\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/config.py\", line 48, in main\r\n15:06:51 return config.hook.pytest_cmdline_main(config=config)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 724, in __call__\r\n15:06:51 return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 338, in _hookexec\r\n15:06:51 return self._inner_hookexec(hook, methods, kwargs)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 333, in \r\n15:06:51 _MultiCall(methods, kwargs, hook.spec_opts).execute()\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 596, in execute\r\n15:06:51 res = hook_impl.function(*args)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/main.py\", line 115, in pytest_cmdline_main\r\n15:06:51 return wrap_session(config, _main)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/main.py\", line 110, in wrap_session\r\n15:06:51 exitstatus=session.exitstatus)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 724, in __call__\r\n15:06:51 return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 338, in _hookexec\r\n15:06:51 return self._inner_hookexec(hook, methods, kwargs)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 333, in \r\n15:06:51 _MultiCall(methods, kwargs, hook.spec_opts).execute()\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 595, in execute\r\n15:06:51 return _wrapped_call(hook_impl.function(*args), self.execute)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 249, in _wrapped_call\r\n15:06:51 wrap_controller.send(call_outcome)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/terminal.py\", line 361, in pytest_sessionfinish\r\n15:06:51 outcome.get_result()\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 278, in get_result\r\n15:06:51 raise ex[1].with_traceback(ex[2])\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 264, in __init__\r\n15:06:51 self.result = func()\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/vendored_packages/pluggy.py\", line 596, in execute\r\n15:06:51 res = hook_impl.function(*args)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/cacheprovider.py\", line 140, in pytest_sessionfinish\r\n15:06:51 config.cache.set(\"cache/lastfailed\", self.lastfailed)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/_pytest/cacheprovider.py\", line 73, in set\r\n15:06:51 with path.open(\"w\") as f:\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/py/_path/local.py\", line 353, in open\r\n15:06:51 return py.error.checked_call(open, self.strpath, mode)\r\n15:06:51 File \"/venv34/lib/python3.4/site-packages/py/_error.py\", line 84, in checked_call\r\n15:06:51 raise cls(\"%s%r\" % (func.__name__, args))\r\n15:06:51 py.error.EROFS: [Read-only file system]: open('/work/.cache/v/cache/lastfailed', 'w')\r\n15:06:51 make: *** [itest] Error 1\r\n...\r\n```", + "score": 0.4553057 + }, + { + "url": "https://api.github.com/repos/giampaolo/psutil/issues/685", + "repository_url": "https://api.github.com/repos/giampaolo/psutil", + "labels_url": "https://api.github.com/repos/giampaolo/psutil/issues/685/labels{/name}", + "comments_url": "https://api.github.com/repos/giampaolo/psutil/issues/685/comments", + "events_url": "https://api.github.com/repos/giampaolo/psutil/issues/685/events", + "html_url": "https://github.com/giampaolo/psutil/issues/685", + "id": 107655340, + "number": 685, + "title": "virtual_memory() gives highly inaccurate results", + "user": { + "login": "coderforlife", + "id": 1537688, + "avatar_url": "https://avatars.githubusercontent.com/u/1537688?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/coderforlife", + "html_url": "https://github.com/coderforlife", + "followers_url": "https://api.github.com/users/coderforlife/followers", + "following_url": "https://api.github.com/users/coderforlife/following{/other_user}", + "gists_url": "https://api.github.com/users/coderforlife/gists{/gist_id}", + "starred_url": "https://api.github.com/users/coderforlife/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/coderforlife/subscriptions", + "organizations_url": "https://api.github.com/users/coderforlife/orgs", + "repos_url": "https://api.github.com/users/coderforlife/repos", + "events_url": "https://api.github.com/users/coderforlife/events{/privacy}", + "received_events_url": "https://api.github.com/users/coderforlife/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/giampaolo/psutil/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/giampaolo/psutil/labels/OpSys-Linux", + "name": "OpSys-Linux", + "color": "FFFFFF" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 17, + "created_at": "2015-09-22T06:43:56Z", + "updated_at": "2016-03-30T11:28:10Z", + "closed_at": null, + "body": "These commands were done right after each other:\r\n\r\n In [1]: import psutil\r\n\r\n In [2]: psutil.virtual_memory()\r\n Out[2]: svmem(total=50468696064L, available=4217393152L, percent=91.6, used=50133450752L, free=335245312L, active=2109054976, inactive=2236395520, buffers=372736L, cached=3881775104)\r\n\r\n In [3]: !free\r\n total used free shared buff/cache available\r\n Mem: 49285836 1006960 327452 33552 47951424 47819748\r\n Swap: 16777212 21152 16756060\r\n\r\nfree reports KiB and psutil gives bytes. After considering that, total is spot on and free is very close. The others are not though:\r\n * buff/cache is 8% of what it should be\r\n * used is 48x what is should be\r\n * available is 8% of what is should be\r\n\r\nOverall it makes it look like I have only 4 GiB free when I should have ~46GB free.\r\n\r\nMachine info:\r\n * Python v2.7.5\r\n * psutil v3.2.1 (latest on PIP)\r\n * CentOS Linux release 7.1.1503 (Core)\r\n * Linux Kernel 3.10.0-229.7.2.el7.x86_64 SMP\r\n * RAM: 47.00 GB\r\n * CPU(s): 24x Intel(R) Xeon(R) CPU X5690 @ 3.47GHz\r\n\r\n\r\n", + "score": 0.8640775 + }, + { + "url": "https://api.github.com/repos/byt3bl33d3r/MITMf/issues/205", + "repository_url": "https://api.github.com/repos/byt3bl33d3r/MITMf", + "labels_url": "https://api.github.com/repos/byt3bl33d3r/MITMf/issues/205/labels{/name}", + "comments_url": "https://api.github.com/repos/byt3bl33d3r/MITMf/issues/205/comments", + "events_url": "https://api.github.com/repos/byt3bl33d3r/MITMf/issues/205/events", + "html_url": "https://github.com/byt3bl33d3r/MITMf/issues/205", + "id": 108662954, + "number": 205, + "title": "Plugins enabled by MITMf-API were not correctly initialized", + "user": { + "login": "xmcp", + "id": 6646473, + "avatar_url": "https://avatars.githubusercontent.com/u/6646473?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/xmcp", + "html_url": "https://github.com/xmcp", + "followers_url": "https://api.github.com/users/xmcp/followers", + "following_url": "https://api.github.com/users/xmcp/following{/other_user}", + "gists_url": "https://api.github.com/users/xmcp/gists{/gist_id}", + "starred_url": "https://api.github.com/users/xmcp/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/xmcp/subscriptions", + "organizations_url": "https://api.github.com/users/xmcp/orgs", + "repos_url": "https://api.github.com/users/xmcp/repos", + "events_url": "https://api.github.com/users/xmcp/events{/privacy}", + "received_events_url": "https://api.github.com/users/xmcp/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/byt3bl33d3r/MITMf/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/byt3bl33d3r/MITMf/labels/MITMf-API", + "name": "MITMf-API", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2015-09-28T13:56:05Z", + "updated_at": "2016-06-15T15:43:27Z", + "closed_at": null, + "body": "**OS**: Kali Linux 2\r\n**MITMf Version**: Latest in `master` (`f6ffad2879`)\r\n\r\n## Reproducing\r\n\r\n`./mitmf.py -i eth0 --spoof --arp --gateway 192.168.1.1 --targets 192.168.1.104`\r\n\r\n [*] MITMf v0.9.8 - 'The Dark Side'\r\n |\r\n |_ Net-Creds v1.0 online\r\n |_ Spoof v0.6\r\n | |_ ARP spoofing enabled\r\n |_ Sergio-Proxy v0.2.1 online\r\n |_ SSLstrip v0.9 by Moxie Marlinspike online\r\n |\r\n |_ MITMf-API online\r\n * Running on http://127.0.0.1:9999/\r\n |_ HTTP server online\r\n |_ DNSChef v0.4 online\r\n |_ SMB server online\r\n\r\n 2015-09-28 21:46:14 192.168.1.104 [type:IE-6 os:Windows XP] www.microsoft.com\r\n 2015-09-28 21:46:14 192.168.1.104 [type:IE-6 os:Windows XP] go.microsoft.com\r\n 2015-09-28 21:46:14 192.168.1.104 [type:IE-6 os:Windows XP] cn.msn.com\r\n 2015-09-28 21:46:23 192.168.1.104 [type:IE-6 os:Windows XP] s.xmcp.tk\r\n 127.0.0.1 - - [28/Sep/2015 21:46:26] \"GET /Upsidedownternet/1 HTTP/1.1\" 200 -\r\n 2015-09-28 21:46:30 192.168.1.104 [type:IE-6 os:Windows XP] s.xmcp.tk\r\n 2015-09-28 21:46:30 [ProxyPlugins] Exception occurred in hooked function\r\n Traceback (most recent call last):\r\n File \"/root/MITMf/core/proxyplugins.py\", line 116, in hook\r\n a = f(**args)\r\n File \"/root/MITMf/plugins/upsidedownternet.py\", line 59, in response\r\n self.clientlog.info(\"Error: {}\".format(e), extra=request.clientInfo)\r\n AttributeError: 'Upsidedownternet' object has no attribute 'clientlog'\r\n\r\n## Explanation\r\n\r\nOnly plugins that appear in command line argument are fully initialized:\r\n\r\n # file: mitmf.py\r\n for plugin in plugins:\r\n if vars(options)[plugin.optname] is True:\r\n ProxyPlugins().add_plugin(plugin)\r\n ...\r\n plugin.setup_logger()\r\n plugin.initialize(options)\r\n ...\r\n plugin.start_config_watch()\r\n\r\nSo, if I enable a new plugin that isn't in the command line argument, it will not be initialized.\r\n\r\n # file: mitmfapi.py\r\n for p in ProxyPlugins().all_plugins:\r\n if (p.name == plugin) and (p not in ProxyPlugins().plugin_list):\r\n ProxyPlugins().add_plugin(p)\r\n # no any initializing code here\r\n return json.dumps({\"plugin\": plugin, \"response\": \"success\"})\r\n\r\n**I don't know whether this is a bug or a design defect, as it's impossible to pass options to plugins in Web API.**", + "score": 1.0333146 + }, + { + "url": "https://api.github.com/repos/xonsh/xonsh/issues/398", + "repository_url": "https://api.github.com/repos/xonsh/xonsh", + "labels_url": "https://api.github.com/repos/xonsh/xonsh/issues/398/labels{/name}", + "comments_url": "https://api.github.com/repos/xonsh/xonsh/issues/398/comments", + "events_url": "https://api.github.com/repos/xonsh/xonsh/issues/398/events", + "html_url": "https://github.com/xonsh/xonsh/issues/398", + "id": 108938374, + "number": 398, + "title": "Pyreadline and color code issue in windows ", + "user": { + "login": "jsarver", + "id": 1960956, + "avatar_url": "https://avatars.githubusercontent.com/u/1960956?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jsarver", + "html_url": "https://github.com/jsarver", + "followers_url": "https://api.github.com/users/jsarver/followers", + "following_url": "https://api.github.com/users/jsarver/following{/other_user}", + "gists_url": "https://api.github.com/users/jsarver/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jsarver/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jsarver/subscriptions", + "organizations_url": "https://api.github.com/users/jsarver/orgs", + "repos_url": "https://api.github.com/users/jsarver/repos", + "events_url": "https://api.github.com/users/jsarver/events{/privacy}", + "received_events_url": "https://api.github.com/users/jsarver/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/xonsh/xonsh/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/xonsh/xonsh/milestones/4", + "html_url": "https://github.com/xonsh/xonsh/milestones/v0.4.0", + "labels_url": "https://api.github.com/repos/xonsh/xonsh/milestones/4/labels", + "id": 1779851, + "number": 4, + "title": "v0.4.0", + "description": "", + "creator": { + "login": "scopatz", + "id": 320553, + "avatar_url": "https://avatars.githubusercontent.com/u/320553?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/scopatz", + "html_url": "https://github.com/scopatz", + "followers_url": "https://api.github.com/users/scopatz/followers", + "following_url": "https://api.github.com/users/scopatz/following{/other_user}", + "gists_url": "https://api.github.com/users/scopatz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/scopatz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/scopatz/subscriptions", + "organizations_url": "https://api.github.com/users/scopatz/orgs", + "repos_url": "https://api.github.com/users/scopatz/repos", + "events_url": "https://api.github.com/users/scopatz/events{/privacy}", + "received_events_url": "https://api.github.com/users/scopatz/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 181, + "closed_issues": 167, + "state": "open", + "created_at": "2016-05-20T22:54:44Z", + "updated_at": "2016-06-21T20:30:50Z", + "due_on": "2016-06-30T04:00:00Z", + "closed_at": null + }, + "comments": 5, + "created_at": "2015-09-29T19:07:25Z", + "updated_at": "2016-06-05T18:57:08Z", + "closed_at": null, + "body": "First off, this tool is really awesome and I love it. That being said I am having an unusual issue and I think I've narrowed it down to pyreadline. \r\n\r\nI am running windows 7 Miniconda3 python 3.4.3 64 bit and here are the steps I do to recreate the issue.\r\n\r\n conda create -n shelltest -c scopatz xonsh\r\n\r\nIt then asks me to install the follwoing which I say yes.\r\n\r\n The following NEW packages will be INSTALLED:\r\n\r\n pip: 7.1.2-py34_0\r\n ply: 3.7-py34_0\r\n python: 3.4.3-0\r\n setuptools: 18.3.2-py34_0\r\n wheel: 0.26.0-py34_1\r\n xonsh: 0.2.0-py34_1\r\n\r\nEverything installs as expected so I run \"Activate shelltest\" to activate my virtualenv and type \"xonsh\" to run my xonsh shell and get the following prompt:\r\n\r\n ☺←[1;32m☻jsarver@mycomputername☺←[1;34m☻ ~☺←[1;32m☻ ☺←[1;34m☻$☺←[0m☻\r\n\r\nSoo.. I get the odd color codes instead of the default green and blue prompt, that is strange. After some fooling around I discoverd if I install pyreadline then run xonsh I get this prompt:\r\n\r\n jsarver@mycomputername ~ $\r\n\r\nOk now things are looking up, but now if I try to utilize any multiline functionality like defining a function in the xonsh command line like so:\r\n\r\n def foo():\r\n\r\nI get the following error.\r\n\r\n jsarver@mycomputername ~ $ def foo():\r\n pre_input_hook failed\r\n Readline internal error\r\n Traceback (most recent call last):\r\n File \"C:\\Miniconda3\\envs\\shelltest\\lib\\site-packages\\pyreadline\\modes\\basemode.py\", line 124, in readline_setup\r\n self.pre_input_hook()\r\n File \"C:\\Miniconda3\\envs\\shelltest\\lib\\site-packages\\xonsh\\readline_shell.py\", line 81, in inserter\r\n readline.redisplay()\r\n AttributeError: 'module' object has no attribute 'redisplay'\r\n \r\n During handling of the above exception, another exception occurred:\r\n \r\n Traceback (most recent call last):\r\n File \"C:\\Miniconda3\\envs\\shelltest\\lib\\site-packages\\pyreadline\\console\\console.py\", line 768, in hook_wrapper_23\r\n res = ensure_str(readline_hook(prompt))\r\n File \"C:\\Miniconda3\\envs\\shelltest\\lib\\site-packages\\pyreadline\\rlmain.py\", line 569, in readline\r\n self.readline_setup(prompt)\r\n File \"C:\\Miniconda3\\envs\\shelltest\\lib\\site-packages\\pyreadline\\rlmain.py\", line 564, in readline_setup\r\n BaseReadline.readline_setup(self, prompt)\r\n File \"C:\\Miniconda3\\envs\\shelltest\\lib\\site-packages\\pyreadline\\rlmain.py\", line 253, in readline_setup\r\n return self.mode.readline_setup(prompt)\r\n File \"C:\\Miniconda3\\envs\\shelltest\\lib\\site-packages\\pyreadline\\modes\\basemode.py\", line 127, in readline_setup\r\n traceback.print_exc()\r\n NameError: name 'traceback' is not defined\r\n xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK=True\r\n File \"\", line None\r\n SyntaxError: None: no further code\r\n\r\nIf I uninstall pyreadline and go back to to funky looking prompt I can define functions all day and it works fine. I'm sure I can just change my prompt to not use color but feel I should report this because it doesn't seem to be working as intended. I did uninstall my python installations and reinstalled a fresh miniconda in the hopes it was just a borked python install, still no luck. Please let me know if there is anything else I can provide to help troubleshoot this.\r\n\r\nThanks\r\nJosh\r\n", + "score": 4.003031 + }, + { + "url": "https://api.github.com/repos/HDFGroup/hdf-compass/issues/60", + "repository_url": "https://api.github.com/repos/HDFGroup/hdf-compass", + "labels_url": "https://api.github.com/repos/HDFGroup/hdf-compass/issues/60/labels{/name}", + "comments_url": "https://api.github.com/repos/HDFGroup/hdf-compass/issues/60/comments", + "events_url": "https://api.github.com/repos/HDFGroup/hdf-compass/issues/60/events", + "html_url": "https://github.com/HDFGroup/hdf-compass/issues/60", + "id": 109167973, + "number": 60, + "title": "OPeNDAP plug-in issues", + "user": { + "login": "kyang2014", + "id": 10265107, + "avatar_url": "https://avatars.githubusercontent.com/u/10265107?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kyang2014", + "html_url": "https://github.com/kyang2014", + "followers_url": "https://api.github.com/users/kyang2014/followers", + "following_url": "https://api.github.com/users/kyang2014/following{/other_user}", + "gists_url": "https://api.github.com/users/kyang2014/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kyang2014/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kyang2014/subscriptions", + "organizations_url": "https://api.github.com/users/kyang2014/orgs", + "repos_url": "https://api.github.com/users/kyang2014/repos", + "events_url": "https://api.github.com/users/kyang2014/events{/privacy}", + "received_events_url": "https://api.github.com/users/kyang2014/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/HDFGroup/hdf-compass/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/HDFGroup/hdf-compass/labels/OPeNDAP", + "name": "OPeNDAP", + "color": "bfdadc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/HDFGroup/hdf-compass/milestones/1", + "html_url": "https://github.com/HDFGroup/hdf-compass/milestones/0.6.0", + "labels_url": "https://api.github.com/repos/HDFGroup/hdf-compass/milestones/1/labels", + "id": 1366956, + "number": 1, + "title": "0.6.0", + "description": "", + "creator": { + "login": "giumas", + "id": 2849257, + "avatar_url": "https://avatars.githubusercontent.com/u/2849257?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/giumas", + "html_url": "https://github.com/giumas", + "followers_url": "https://api.github.com/users/giumas/followers", + "following_url": "https://api.github.com/users/giumas/following{/other_user}", + "gists_url": "https://api.github.com/users/giumas/gists{/gist_id}", + "starred_url": "https://api.github.com/users/giumas/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/giumas/subscriptions", + "organizations_url": "https://api.github.com/users/giumas/orgs", + "repos_url": "https://api.github.com/users/giumas/repos", + "events_url": "https://api.github.com/users/giumas/events{/privacy}", + "received_events_url": "https://api.github.com/users/giumas/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 9, + "closed_issues": 11, + "state": "open", + "created_at": "2015-10-20T19:46:17Z", + "updated_at": "2015-11-03T13:39:15Z", + "due_on": null, + "closed_at": null + }, + "comments": 41, + "created_at": "2015-09-30T20:02:59Z", + "updated_at": "2015-10-27T22:47:18Z", + "closed_at": null, + "body": "By enabling opendap_model in the compass_viewer, I can build HDF-compass on Linux. So I can test the opendap plug-in at least from my development environment.\r\n\r\nIn general,\r\nOne can open a URL served via DAP via \"Open Resource\". A simple netCDF style DAP service can be opened with the following limitations.\r\n1) The current opendap model misses group attributes (at least for root) \r\n\r\nThe attributes under the root group(or global attributes) can not be displayed. It seems the feature is missing. \r\n\r\n\"\r\n File \"/mnt/scr1/kent/hdf-compass-kent/hdf-compass/build/HDFCompass/out00-PYZ.pyz/compass_viewer.frame\", line 388, in on_menu_reopen\r\n File \"/mnt/scr1/kent/hdf-compass-kent/hdf-compass/build/HDFCompass/out00-PYZ.pyz/opendap_model\", line 272, in __init__\r\nAttributeError: 'NoneType' object has no attribute 'attributes'\r\n\r\nNote: Pydap client on the command-line can successfully retrieve the global attribute. So this is an issue related to the opendap model. \r\nPydap output is as follows:\r\n>>> dataset = open_url('http://test.opendap.org/dap/data/nc/coads_climatology.nc')\r\n>>> print dataset.attributes\r\n{'NC_GLOBAL': {'history': 'FERRET V4.30 (debug/no GUI) 15-Aug-96'}, 'DODS_EXTRA'\r\n: {'Unlimited_Dimension': 'TIME'}}\r\n\r\nI think it is promising to fix this issue. It seems the opendap_model just forgets considering the global attribute case.\r\n\r\n2) Can not serve any object names that contain special characters\r\n\r\n The opendap plug-in can only address the object names that include underscore,letter and numeric values(CF naming conventions). So essentially all HDF5 data served by the default option of the Hyrax OPeNDAP services can not be served since a \"/\" is always included in an HDF5 object name. \r\nSymptom: the plug-in just opens the file without displaying any objects. The file name displayed by the plug-in looks like to be escaped with %...h5 for the dot in an HDF5 file name. \r\n\r\nPydap command-line client doesn't have an issue to open an HDF5 file served by the default HDF5 handler although I may see %.. displayed for the special characters inside the variable names.\r\n\r\n3) Can and potentially will not serve compound datatype objects well because of the limitation of pydap\r\n\r\nMy version of the pydap(installed by using pip) can only handle a scalar compound datatype HDF5 dataset. So we should NOT expect the opendap module to be able to serve compound datatype objects well even if bugs are fixed.\r\n", + "score": 0.53101325 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:24 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "397597", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "23", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "link": "; rel=\"next\", ; rel=\"last\"", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "bae57931a6fe678a3dffe9be8e7819c8", + "x-github-request-id": "AE1408AB:F652:8339FF3:5769F4BC" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/issues?q=windows+pip+label%3Abug+language%3Apython+state%3Aopen+&sort=created&order=asc&type=all&per_page=100&page=2&q=windows+pip+label:bug+language:python+state:open+&sort=created&order=asc&type=all&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 161, + "incomplete_results": false, + "items": [ + { + "url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/42", + "repository_url": "https://api.github.com/repos/dronekit/dronekit-sitl", + "labels_url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/42/labels{/name}", + "comments_url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/42/comments", + "events_url": "https://api.github.com/repos/dronekit/dronekit-sitl/issues/42/events", + "html_url": "https://github.com/dronekit/dronekit-sitl/issues/42", + "id": 109433303, + "number": 42, + "title": "Can't get any builds to work on Windows using new pip build", + "user": { + "login": "hamishwillee", + "id": 5368500, + "avatar_url": "https://avatars.githubusercontent.com/u/5368500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hamishwillee", + "html_url": "https://github.com/hamishwillee", + "followers_url": "https://api.github.com/users/hamishwillee/followers", + "following_url": "https://api.github.com/users/hamishwillee/following{/other_user}", + "gists_url": "https://api.github.com/users/hamishwillee/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hamishwillee/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hamishwillee/subscriptions", + "organizations_url": "https://api.github.com/users/hamishwillee/orgs", + "repos_url": "https://api.github.com/users/hamishwillee/repos", + "events_url": "https://api.github.com/users/hamishwillee/events{/privacy}", + "received_events_url": "https://api.github.com/users/hamishwillee/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/dronekit/dronekit-sitl/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 10, + "created_at": "2015-10-02T05:29:11Z", + "updated_at": "2015-10-20T22:44:01Z", + "closed_at": null, + "body": "I uninstalled dronekit-sitl, then re-installed using ``pip2 install dronekit-sitl -UI``. Then called ``dronekit-sitl --reset``. I tried all the builds a number of times. I rebooted the computer. Repeatable results below. \r\n\r\nThe following three downloaded and started fine (ie binding the port). However only one heartbeat was received in all cases on Mission Planner - ie failed with timeout.\r\n```\r\ndronekit-sitl copter-3.3-rc11\r\ndronekit-sitl copter-3.3-rc5\r\ndronekit-sitl rover-2.50\r\n```\r\n\r\nThis failed with an exception:\r\n\r\n```\r\n>dronekit-sitl copter-3.2.1\r\nos: win, apm: copter, release: 3.2.1\r\nDownloading SITL from http://d3jdmgrrydviou.cloudfront.net/copter/sitl-win-v3.2.1.tar.gz\r\nExtracted.\r\nExecute: ['.\\\\ArduCopter.elf']\r\nStarting sketch 'ArduCopter'\r\nERROR: Floating point exception\r\nStarting SITL input\r\n```\r\n\r\nThis one seems to have buggered up paths:\r\n```\r\nC:\\Apps\\WinPython-64bit-2.7.10.2\\python-2.7.10.amd64>dronekit-sitl plane-3.3.0\r\nos: win, apm: plane, release: 3.3.0\r\nDownloading SITL from http://d3jdmgrrydviou.cloudfront.net/plane/sitl-win-v3.3.0.tar.gz\r\nExtracted.\r\nTraceback (most recent call last):\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\runpy.py\", line 162, in _run_module_as_main\r\n \"__main__\", fname, loader, pkg_name)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\runpy.py\", line 72, in _run_code\r\n exec code in run_globals\r\n File \"C:\\Apps\\WinPython-64bit-2.7.10.2\\python-2.7.10.amd64\\Scripts\\dronekit-sitl.exe\\__main__.py\", line 9, in \r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\site-packages\\dronekit\\sitl\\__init__.py\", line 306, in main\r\n sitl.launch(args, verbose=True, local=local)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\site-packages\\dronekit\\sitl\\__init__.py\", line 148, in launch\r\n elf = open(os.path.join(wd, args[0])).read()\r\nIOError: [Errno 2] No such file or directory: 'C:\\\\Apps\\\\WinPython-64bit-2.7.10.2\\\\settings\\\\.dronekit\\\\sitl\\\\plane-3.3.0\\\\.\\\\ArduPlane.elf'\r\n```\r\n\r\n\r\nThis one failed to download:\r\n```\r\n>dronekit-sitl solo-1.1.46\r\n\r\nos: win, apm: solo, release: 1.1.46\r\nDownloading SITL from http://d3jdmgrrydviou.cloudfront.net/solo/sitl-win-v1.1.46.tar.gz\r\nTraceback (most recent call last):\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\runpy.py\", line 162, in _run_module_as_main\r\n \"__main__\", fname, loader, pkg_name)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\runpy.py\", line 72, in _run_code\r\n exec code in run_globals\r\n File \"C:\\Apps\\WinPython-64bit-2.7.10.2\\python-2.7.10.amd64\\Scripts\\dronekit-sitl.exe\\__main__.py\", line 9, in \r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\site-packages\\dronekit\\sitl\\__init__.py\", line 304, in main\r\n sitl.download(target, verbose=True)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\site-packages\\dronekit\\sitl\\__init__.py\", line 119, in download\r\n return download(self.system, self.version, target, verbose=verbose)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\site-packages\\dronekit\\sitl\\__init__.py\", line 97, in download\r\n testfile.retrieve(sitl_file, sitl_target + '/sitl.tar.gz')\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\urllib.py\", line 245, in retrieve\r\n fp = self.open(url, data)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\urllib.py\", line 213, in open\r\n return getattr(self, name)(url)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\urllib.py\", line 364, in open_http\r\n return self.http_error(url, fp, errcode, errmsg, headers)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\urllib.py\", line 381, in http_error\r\n return self.http_error_default(url, fp, errcode, errmsg, headers)\r\n File \"c:\\apps\\winpython-64bit-2.7.10.2\\python-2.7.10.amd64\\lib\\urllib.py\", line 386, in http_error_default\r\n raise IOError, ('http error', errcode, errmsg, headers)\r\nIOError: ('http error', 404, 'Not Found', )\r\n```\r\n\r\n\r\n\r\n\r\n", + "score": 6.0475206 + }, + { + "url": "https://api.github.com/repos/python-pillow/Pillow/issues/1462", + "repository_url": "https://api.github.com/repos/python-pillow/Pillow", + "labels_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1462/labels{/name}", + "comments_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1462/comments", + "events_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1462/events", + "html_url": "https://github.com/python-pillow/Pillow/issues/1462", + "id": 109579585, + "number": 1462, + "title": "TypeError in PngImagePlugin._save", + "user": { + "login": "codewarrior0", + "id": 307683, + "avatar_url": "https://avatars.githubusercontent.com/u/307683?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/codewarrior0", + "html_url": "https://github.com/codewarrior0", + "followers_url": "https://api.github.com/users/codewarrior0/followers", + "following_url": "https://api.github.com/users/codewarrior0/following{/other_user}", + "gists_url": "https://api.github.com/users/codewarrior0/gists{/gist_id}", + "starred_url": "https://api.github.com/users/codewarrior0/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/codewarrior0/subscriptions", + "organizations_url": "https://api.github.com/users/codewarrior0/orgs", + "repos_url": "https://api.github.com/users/codewarrior0/repos", + "events_url": "https://api.github.com/users/codewarrior0/events{/privacy}", + "received_events_url": "https://api.github.com/users/codewarrior0/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/python-pillow/Pillow/labels/Bug", + "name": "Bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 22, + "created_at": "2015-10-02T22:00:02Z", + "updated_at": "2016-04-19T20:08:43Z", + "closed_at": null, + "body": "Using Python 2.7.9 for 64-bit Windows. Pillow 3.0.0 installed via `pip install pillow`. Script file:\r\n\r\n```\r\nimport os\r\n\r\nimport PIL.Image\r\nbasedir = \"../data/PIL_Images\"\r\nim = PIL.Image.open(os.path.join(basedir, \"tinysample.tiff\"))\r\nim.save(os.path.join(basedir, \"tinysample.png\"))\r\n```\r\n\r\nError traceback:\r\n```\r\nTraceback (most recent call last):\r\n File \"pyi_lib_PIL_img_conversion.py\", line 17, in \r\n im.save(os.path.join(basedir, \"tinysample.png\"))\r\n File \"c:\\Users\\Rio\\Documents\\src\\pyinst1328\\.env27\\lib\\site-packages\\PIL\\Image.py\", line 1665, in save\r\n save_handler(self, fp, filename)\r\n File \"c:\\Users\\Rio\\Documents\\src\\pyinst1328\\.env27\\lib\\site-packages\\PIL\\PngImagePlugin.py\", line 757, in _save\r\n data = name + b\"\\0\\0\" + zlib.compress(im.info[\"icc_profile\"])\r\nTypeError: must be string or read-only buffer, not tuple\r\n```\r\n\r\n[Input image file is here.](https://www.dropbox.com/s/4o6zm09was4hf18/tinysample.tiff?dl=0)\r\n\r\nThis code previously worked with `pillow==2.9.0` installed.\r\n\r\nWith `pillow==3.0.0`, `im.info[\"icc_profile\"]` is a tuple of length 1 containing a single bytestring. With `pillow==2.9.0`, `im.info[\"icc_profile\"]` is a bytestring.", + "score": 0.7864037 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/11238", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/11238/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/11238/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/11238/events", + "html_url": "https://github.com/pydata/pandas/issues/11238", + "id": 109705560, + "number": 11238, + "title": "column-specific min_itemsize doesn't work with append_to_multiple ", + "user": { + "login": "BrenBarn", + "id": 1439047, + "avatar_url": "https://avatars.githubusercontent.com/u/1439047?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/BrenBarn", + "html_url": "https://github.com/BrenBarn", + "followers_url": "https://api.github.com/users/BrenBarn/followers", + "following_url": "https://api.github.com/users/BrenBarn/following{/other_user}", + "gists_url": "https://api.github.com/users/BrenBarn/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BrenBarn/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BrenBarn/subscriptions", + "organizations_url": "https://api.github.com/users/BrenBarn/orgs", + "repos_url": "https://api.github.com/users/BrenBarn/repos", + "events_url": "https://api.github.com/users/BrenBarn/events{/privacy}", + "received_events_url": "https://api.github.com/users/BrenBarn/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Novice", + "name": "Difficulty Novice", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/IO%20HDF5", + "name": "IO HDF5", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 7, + "created_at": "2015-10-04T21:27:09Z", + "updated_at": "2015-10-05T20:27:07Z", + "closed_at": null, + "body": "The `HDFStore.append_to_multiple` passes on its entire `min_itemsize` argument to every sub-append. Because not all columns are in every append, it fails when it tries to set a min_itemsize for a certain column when appending to a table that doesn't use that column. \r\n\r\nSimple example:\r\n\r\n```\r\n>>> store.append_to_multiple({\r\n... 'index': [\"IX\"],\r\n... 'nums': [\"Num\", \"BigNum\", \"RandNum\"],\r\n... \"strs\": [\"Str\", \"LongStr\"]\r\n... }, d.iloc[[0]], 'index', min_itemsize={\"Str\": 10, \"LongStr\": 100})\r\nTraceback (most recent call last):\r\n File \"\", line 5, in \r\n }, d.iloc[[0]], 'index', min_itemsize={\"Str\": 10, \"LongStr\": 100})\r\n File \"c:\\users\\brenbarn\\documents\\python\\extensions\\pandas\\pandas\\io\\pytables.py\", line 1002, in append_to_multiple\r\n self.append(k, val, data_columns=dc, **kwargs)\r\n File \"c:\\users\\brenbarn\\documents\\python\\extensions\\pandas\\pandas\\io\\pytables.py\", line 920, in append\r\n **kwargs)\r\n File \"c:\\users\\brenbarn\\documents\\python\\extensions\\pandas\\pandas\\io\\pytables.py\", line 1265, in _write_to_group\r\n s.write(obj=value, append=append, complib=complib, **kwargs)\r\n File \"c:\\users\\brenbarn\\documents\\python\\extensions\\pandas\\pandas\\io\\pytables.py\", line 3773, in write\r\n **kwargs)\r\n File \"c:\\users\\brenbarn\\documents\\python\\extensions\\pandas\\pandas\\io\\pytables.py\", line 3460, in create_axes\r\n self.validate_min_itemsize(min_itemsize)\r\n File \"c:\\users\\brenbarn\\documents\\python\\extensions\\pandas\\pandas\\io\\pytables.py\", line 3101, in validate_min_itemsize\r\n \"data_column\" % k)\r\nValueError: min_itemsize has the key [LongStr] which is not an axis or data_column\r\n```\r\n\r\nThis apparently means that you can't use `min_itemsize` without manually creating and appending to each separate table beforehand, which is the kind of thing `append_to_multiple` is supposed to shield you from.\r\n\r\nI think `append_to_multiple` should special-case `min_itemsize` and split it into separate dicts for each sub-append. I don't know if there are other potential kwargs that need to be \"allocated\" separately to sub-appends, but if there are it might be good to split them too.", + "score": 0.40817347 + }, + { + "url": "https://api.github.com/repos/ckoepp/TwitterSearch/issues/27", + "repository_url": "https://api.github.com/repos/ckoepp/TwitterSearch", + "labels_url": "https://api.github.com/repos/ckoepp/TwitterSearch/issues/27/labels{/name}", + "comments_url": "https://api.github.com/repos/ckoepp/TwitterSearch/issues/27/comments", + "events_url": "https://api.github.com/repos/ckoepp/TwitterSearch/issues/27/events", + "html_url": "https://github.com/ckoepp/TwitterSearch/issues/27", + "id": 111019745, + "number": 27, + "title": "Program randomly freezes", + "user": { + "login": "DoisKoh", + "id": 5701052, + "avatar_url": "https://avatars.githubusercontent.com/u/5701052?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/DoisKoh", + "html_url": "https://github.com/DoisKoh", + "followers_url": "https://api.github.com/users/DoisKoh/followers", + "following_url": "https://api.github.com/users/DoisKoh/following{/other_user}", + "gists_url": "https://api.github.com/users/DoisKoh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/DoisKoh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/DoisKoh/subscriptions", + "organizations_url": "https://api.github.com/users/DoisKoh/orgs", + "repos_url": "https://api.github.com/users/DoisKoh/repos", + "events_url": "https://api.github.com/users/DoisKoh/events{/privacy}", + "received_events_url": "https://api.github.com/users/DoisKoh/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/ckoepp/TwitterSearch/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 6, + "created_at": "2015-10-12T17:26:13Z", + "updated_at": "2016-06-02T09:42:37Z", + "closed_at": null, + "body": "Hello... I'm using your library and I don't know why but my program randomly freezes sometimes. My program is pretty simple and is pretty much just copying the code sample you provide @https://twittersearch.readthedocs.org/en/latest/index.html (actually, your code sample was also freezing when I tried it).\r\n\r\nCould it have to do with the version of python I'm using? (2.7.9)\r\nI installed TwitterSearch through pip. I hope its not some deadlock issue.\r\n\r\nHere's what I've been running:\r\n\r\n```python\r\nfrom TwitterSearch import *\r\nfrom time import sleep\r\ntry:\r\n tso = TwitterSearchOrder() # create a TwitterSearchOrder object\r\n tso.set_keywords(['#vr', '-RT']) # let's define all words we would like to have a look for\r\n tso.set_language('en') # hell no German, I want English!\r\n tso.set_include_entities(False) # and don't give us all those entity information\r\n\r\n # it's about time to create a TwitterSearch object with our secret tokens\r\n ts = TwitterSearch(\r\n consumer_key = 'xxxx',\r\n consumer_secret = 'xxxx',\r\n access_token = 'xxxx',\r\n access_token_secret = 'xxxx'\r\n )\r\n\r\n # open file for writing\r\n text_file = open(\"#vrtest.txt\", \"w\")\r\n\r\n # check when to stop\r\n iterations = 0\r\n max_tweets = 100000\r\n\r\n # callback fucntion used to check if we need to pause the program\r\n def my_callback_closure(current_ts_instance): # accepts ONE argument: an instance of TwitterSearch\r\n queries, tweets_seen = current_ts_instance.get_statistics()\r\n \r\n if queries > 0 and (queries % 2) == 0: # trigger delay every other query\r\n print(\"\\nQueries: \" + str(queries) + \" now sleeping, 1 minute.\\n\");\r\n sleep(60) # sleep for 60 seconds\r\n\r\n # this is where the fun actually starts :)\r\n for tweet in ts.search_tweets_iterable(tso, callback=my_callback_closure):\r\n \r\n current_line = \"%s\" % ( tweet['text'] )\r\n \r\n iterations = iterations + 1\r\n print( \"i: \" + str(iterations) + \" - \" + tweet['user']['screen_name'] + \" tweeted: \" + current_line )\r\n \r\n text_file.write(current_line.encode('utf-8', 'ignore') + \"\\n\")\r\n\r\n # wait 1 second every 10 tweets\r\n if (iterations % 10 == 0):\r\n print(\"\\nSleeping 1 second.\\n\")\r\n sleep(1)\r\n \r\n if (iterations >= max_tweets):\r\n break\r\n\r\nexcept TwitterSearchException as e: # take care of all those ugly errors if there are some\r\n print(e)\r\n\r\nfinally:\r\n # close file\r\n text_file.close()\r\n```\r\n", + "score": 0.678968 + }, + { + "url": "https://api.github.com/repos/bibanon/BASC-Archiver/issues/24", + "repository_url": "https://api.github.com/repos/bibanon/BASC-Archiver", + "labels_url": "https://api.github.com/repos/bibanon/BASC-Archiver/issues/24/labels{/name}", + "comments_url": "https://api.github.com/repos/bibanon/BASC-Archiver/issues/24/comments", + "events_url": "https://api.github.com/repos/bibanon/BASC-Archiver/issues/24/events", + "html_url": "https://github.com/bibanon/BASC-Archiver/issues/24", + "id": 112495066, + "number": 24, + "title": "0.9.0: --runonce doesn't work.", + "user": { + "login": "HASJ", + "id": 9345660, + "avatar_url": "https://avatars.githubusercontent.com/u/9345660?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/HASJ", + "html_url": "https://github.com/HASJ", + "followers_url": "https://api.github.com/users/HASJ/followers", + "following_url": "https://api.github.com/users/HASJ/following{/other_user}", + "gists_url": "https://api.github.com/users/HASJ/gists{/gist_id}", + "starred_url": "https://api.github.com/users/HASJ/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/HASJ/subscriptions", + "organizations_url": "https://api.github.com/users/HASJ/orgs", + "repos_url": "https://api.github.com/users/HASJ/repos", + "events_url": "https://api.github.com/users/HASJ/events{/privacy}", + "received_events_url": "https://api.github.com/users/HASJ/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/bibanon/BASC-Archiver/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/bibanon/BASC-Archiver/labels/confirm%20fixed", + "name": "confirm fixed", + "color": "d4c5f9" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "DanielOaks", + "id": 251281, + "avatar_url": "https://avatars.githubusercontent.com/u/251281?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/DanielOaks", + "html_url": "https://github.com/DanielOaks", + "followers_url": "https://api.github.com/users/DanielOaks/followers", + "following_url": "https://api.github.com/users/DanielOaks/following{/other_user}", + "gists_url": "https://api.github.com/users/DanielOaks/gists{/gist_id}", + "starred_url": "https://api.github.com/users/DanielOaks/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/DanielOaks/subscriptions", + "organizations_url": "https://api.github.com/users/DanielOaks/orgs", + "repos_url": "https://api.github.com/users/DanielOaks/repos", + "events_url": "https://api.github.com/users/DanielOaks/events{/privacy}", + "received_events_url": "https://api.github.com/users/DanielOaks/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 9, + "created_at": "2015-10-21T01:49:26Z", + "updated_at": "2016-01-24T00:56:31Z", + "closed_at": null, + "body": "Script just keeps running. Windows version.", + "score": 1.2674693 + }, + { + "url": "https://api.github.com/repos/tartley/colorama/issues/77", + "repository_url": "https://api.github.com/repos/tartley/colorama", + "labels_url": "https://api.github.com/repos/tartley/colorama/issues/77/labels{/name}", + "comments_url": "https://api.github.com/repos/tartley/colorama/issues/77/comments", + "events_url": "https://api.github.com/repos/tartley/colorama/issues/77/events", + "html_url": "https://github.com/tartley/colorama/issues/77", + "id": 112779309, + "number": 77, + "title": "Colorama master doesn't work with The Fuck; 0.3.3 partly works; 0.3.2 works", + "user": { + "login": "hugovk", + "id": 1324225, + "avatar_url": "https://avatars.githubusercontent.com/u/1324225?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hugovk", + "html_url": "https://github.com/hugovk", + "followers_url": "https://api.github.com/users/hugovk/followers", + "following_url": "https://api.github.com/users/hugovk/following{/other_user}", + "gists_url": "https://api.github.com/users/hugovk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hugovk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hugovk/subscriptions", + "organizations_url": "https://api.github.com/users/hugovk/orgs", + "repos_url": "https://api.github.com/users/hugovk/repos", + "events_url": "https://api.github.com/users/hugovk/events{/privacy}", + "received_events_url": "https://api.github.com/users/hugovk/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/tartley/colorama/labels/bug", + "name": "bug", + "color": "e11d21" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 12, + "created_at": "2015-10-22T11:05:18Z", + "updated_at": "2016-05-31T08:03:39Z", + "closed_at": null, + "body": "Windows 7, Python 2.7, Git BASH.\r\n\r\n * [The Fuck](https://github.com/nvbn/thefuck) works properly with Colorama 0.3.2.\r\n\r\n * The Fuck works with Colorama 0.3.3 but the text isn't coloured and it prints characters like `←[1m`.\r\n\r\n * The Fuck doesn't work with Colorama master branch and the text isn't coloured and it prints characters like `←[1m`.\r\n\r\n---\r\n\r\nInstall latest dev version:\r\n=\r\n\r\n```bash\r\n~/github/colorama (master)\r\n$ python setup.py develop\r\nrunning develop\r\nrunning egg_info\r\nwriting colorama.egg-info\\PKG-INFO\r\nwriting top-level names to colorama.egg-info\\top_level.txt\r\nwriting dependency_links to colorama.egg-info\\dependency_links.txt\r\nreading manifest file 'colorama.egg-info\\SOURCES.txt'\r\nreading manifest template 'MANIFEST.in'\r\nwriting manifest file 'colorama.egg-info\\SOURCES.txt'\r\nrunning build_ext\r\nCreating c:\\python27\\lib\\site-packages\\colorama.egg-link (link to .)\r\nAdding colorama 0.3.3 to easy-install.pth file\r\n\r\nInstalled c:\\users\\hugovk\\github\\colorama\r\nProcessing dependencies for colorama==0.3.3\r\nFinished processing dependencies for colorama==0.3.3\r\n```\r\n\r\nCreate a new branch, try and push it, then use [The Fuck](https://github.com/nvbn/thefuck) to push it properly:\r\n\r\n```bash\r\n~/github/colorama (master)\r\n$ git checkout -b test_branch1\r\nSwitched to a new branch 'test_branch1'\r\n\r\n~/github/colorama (test_branch1)\r\n$ git push\r\nfatal: The current branch test_branch1 has no upstream branch.\r\nTo push the current branch and set the remote as upstream, use\r\n\r\n git push --set-upstream origin test_branch1\r\n\r\n\r\n~/github/colorama (test_branch1)\r\n$ fuck\r\n←[1mgit push --set-upstream origin test_branch1←[0m\r\nfatal: remote part of refspec is not a valid name in\r\nUnexpected end of command stream\r\n```\r\nText was monochrome, command didn't work.\r\n\r\n---\r\n\r\nTry the same thing with Colorama 0.3.2:\r\n=\r\n\r\n```bash\r\n~/github/colorama (test_branch1)\r\n$ pip install colorama==0.3.2\r\nCollecting colorama==0.3.2\r\n Using cached colorama-0.3.2.tar.gz\r\nInstalling collected packages: colorama\r\n Found existing installation: colorama 0.3.3\r\n Uninstalling colorama-0.3.3:\r\n Successfully uninstalled colorama-0.3.3\r\n Running setup.py install for colorama\r\nSuccessfully installed colorama-0.3.3\r\n\r\n~/github/colorama (test_branch1)\r\n$ git push\r\nfatal: The current branch test_branch1 has no upstream branch.\r\nTo push the current branch and set the remote as upstream, use\r\n\r\n git push --set-upstream origin test_branch1\r\n\r\n\r\n~/github/colorama (test_branch1)\r\n$ fuck\r\ngit push --set-upstream origin test_branch1\r\nTotal 0 (delta 0), reused 0 (delta 0)\r\nTo https://github.com/hugovk/colorama\r\n * [new branch] test_branch1 -> test_branch1\r\nBranch test_branch1 set up to track remote branch test_branch1 from origin.\r\n```\r\n\r\nThe command worked, and those last five lines were coloured light grey.\r\n\r\n---\r\n\r\nAnd with Colorama 0.3.3:\r\n=\r\n\r\n```bash\r\n~/github/colorama (test_branch1)\r\n$ pip install colorama==0.3.3\r\nCollecting colorama==0.3.3\r\n Using cached colorama-0.3.3.tar.gz\r\nInstalling collected packages: colorama\r\n Found existing installation: colorama 0.3.2\r\n Uninstalling colorama-0.3.2:\r\n Successfully uninstalled colorama-0.3.2\r\n Running setup.py install for colorama\r\nSuccessfully installed colorama-0.3.3\r\n\r\n~/github/colorama (test_branch1)\r\n$ git checkout -b test_branch2\r\nSwitched to a new branch 'test_branch2'\r\n\r\n~/github/colorama (test_branch2)\r\n$ git push\r\nfatal: The current branch test_branch2 has no upstream branch.\r\nTo push the current branch and set the remote as upstream, use\r\n\r\n git push --set-upstream origin test_branch2\r\n\r\n\r\n~/github/colorama (test_branch2)\r\n$ fuck\r\n←[1mgit push --set-upstream origin test_branch2←[0m\r\nTotal 0 (delta 0), reused 0 (delta 0)\r\nTo https://github.com/hugovk/colorama\r\n * [new branch] test_branch2 -> test_branch2\r\nBranch test_branch2 set up to track remote branch test_branch2 from origin.\r\n```\r\n\r\nThe command worked, but the text is monochrome and shows `←[1m` type characters.\r\n\r\n---\r\n\r\nNote the above was with thefuck==1.45, but similar results are had with latest thefuck==3.1.\r\n\r\n", + "score": 0.77801967 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/3215", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/3215/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/3215/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/3215/events", + "html_url": "https://github.com/pypa/pip/issues/3215", + "id": 113997545, + "number": 3215, + "title": "HTTPS certificate verification fails if using proxy pip 7.1.2", + "user": { + "login": "mayukuse24", + "id": 9818793, + "avatar_url": "https://avatars.githubusercontent.com/u/9818793?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mayukuse24", + "html_url": "https://github.com/mayukuse24", + "followers_url": "https://api.github.com/users/mayukuse24/followers", + "following_url": "https://api.github.com/users/mayukuse24/following{/other_user}", + "gists_url": "https://api.github.com/users/mayukuse24/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mayukuse24/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mayukuse24/subscriptions", + "organizations_url": "https://api.github.com/users/mayukuse24/orgs", + "repos_url": "https://api.github.com/users/mayukuse24/repos", + "events_url": "https://api.github.com/users/mayukuse24/events{/privacy}", + "received_events_url": "https://api.github.com/users/mayukuse24/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/proxy", + "name": "proxy", + "color": "0052cc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 42, + "created_at": "2015-10-29T07:48:58Z", + "updated_at": "2016-05-27T19:51:48Z", + "closed_at": null, + "body": "When using a proxy (CONNECT via plain HTTP), pip gets the HTTPS certificate verification wrong. Rather than verifying that the certificate received through the tunnel matches the host at the tunnel's end, it compares it to the proxy itself:\r\n\r\nGetting page https://pypi.python.org/simple/plog/\r\n Could not fetch URL https://pypi.python.org/simple/plog/: connection error: hostname 'proxy.iiit.ac.in' doesn't match either of 'www.python.org', 'python.org', 'pypi.python.org', 'docs.python.org', 'testpypi.python.org', 'bugs.python.org', 'wiki.python.org', 'hg.python.org', 'mail.python.org', 'packaging.python.org', 'pythonhosted.org', 'www.pythonhosted.org', 'test.pythonhosted.org', 'us.pycon.org', 'id.python.org'\r\n\r\nAlthough this issue was closed at https://github.com/pypa/pip/issues/1905 for pip 1.5.6 . It still shows up for version 7.1.2", + "score": 5.2823005 + }, + { + "url": "https://api.github.com/repos/BhallaLab/moose-gui/issues/4", + "repository_url": "https://api.github.com/repos/BhallaLab/moose-gui", + "labels_url": "https://api.github.com/repos/BhallaLab/moose-gui/issues/4/labels{/name}", + "comments_url": "https://api.github.com/repos/BhallaLab/moose-gui/issues/4/comments", + "events_url": "https://api.github.com/repos/BhallaLab/moose-gui/issues/4/events", + "html_url": "https://github.com/BhallaLab/moose-gui/issues/4", + "id": 114535115, + "number": 4, + "title": "dependency `python-suds` does not work on MacOSX ", + "user": { + "login": "dilawar", + "id": 895681, + "avatar_url": "https://avatars.githubusercontent.com/u/895681?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dilawar", + "html_url": "https://github.com/dilawar", + "followers_url": "https://api.github.com/users/dilawar/followers", + "following_url": "https://api.github.com/users/dilawar/following{/other_user}", + "gists_url": "https://api.github.com/users/dilawar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dilawar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dilawar/subscriptions", + "organizations_url": "https://api.github.com/users/dilawar/orgs", + "repos_url": "https://api.github.com/users/dilawar/repos", + "events_url": "https://api.github.com/users/dilawar/events{/privacy}", + "received_events_url": "https://api.github.com/users/dilawar/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/BhallaLab/moose-gui/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/BhallaLab/moose-gui/labels/status:in-progress", + "name": "status:in-progress", + "color": "f7c6c7" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "hrani", + "id": 11624899, + "avatar_url": "https://avatars.githubusercontent.com/u/11624899?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/hrani", + "html_url": "https://github.com/hrani", + "followers_url": "https://api.github.com/users/hrani/followers", + "following_url": "https://api.github.com/users/hrani/following{/other_user}", + "gists_url": "https://api.github.com/users/hrani/gists{/gist_id}", + "starred_url": "https://api.github.com/users/hrani/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/hrani/subscriptions", + "organizations_url": "https://api.github.com/users/hrani/orgs", + "repos_url": "https://api.github.com/users/hrani/repos", + "events_url": "https://api.github.com/users/hrani/events{/privacy}", + "received_events_url": "https://api.github.com/users/hrani/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/BhallaLab/moose-gui/milestones/1", + "html_url": "https://github.com/BhallaLab/moose-gui/milestones/ghevar_3.0.2", + "labels_url": "https://api.github.com/repos/BhallaLab/moose-gui/milestones/1/labels", + "id": 1388750, + "number": 1, + "title": "ghevar_3.0.2", + "description": "Release 3.0.2. Code name: ghevar", + "creator": { + "login": "dilawar", + "id": 895681, + "avatar_url": "https://avatars.githubusercontent.com/u/895681?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dilawar", + "html_url": "https://github.com/dilawar", + "followers_url": "https://api.github.com/users/dilawar/followers", + "following_url": "https://api.github.com/users/dilawar/following{/other_user}", + "gists_url": "https://api.github.com/users/dilawar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dilawar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dilawar/subscriptions", + "organizations_url": "https://api.github.com/users/dilawar/orgs", + "repos_url": "https://api.github.com/users/dilawar/repos", + "events_url": "https://api.github.com/users/dilawar/events{/privacy}", + "received_events_url": "https://api.github.com/users/dilawar/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 1, + "closed_issues": 0, + "state": "open", + "created_at": "2015-11-02T12:53:35Z", + "updated_at": "2015-11-30T10:05:11Z", + "due_on": null, + "closed_at": null + }, + "comments": 12, + "created_at": "2015-11-02T06:35:17Z", + "updated_at": "2015-11-30T10:50:56Z", + "closed_at": null, + "body": "I've install suds using pip yet the moosegui does not launch: (On MacOSX).\r\n\r\n~~~\r\nFile \"/opt/local/lib/moose/gui/biomodelsclient.py\", line 49, in \r\n from suds.client import Client\r\nImportError: No module named suds.client\r\n~~~\r\n\r\nThis is probably related to this http://stackoverflow.com/questions/14973852/suds-install-error-no-module-named-client\r\n\r\n/cc @hrani @subhacom @aviralg ", + "score": 1.2651639 + }, + { + "url": "https://api.github.com/repos/xonsh/xonsh/issues/460", + "repository_url": "https://api.github.com/repos/xonsh/xonsh", + "labels_url": "https://api.github.com/repos/xonsh/xonsh/issues/460/labels{/name}", + "comments_url": "https://api.github.com/repos/xonsh/xonsh/issues/460/comments", + "events_url": "https://api.github.com/repos/xonsh/xonsh/issues/460/events", + "html_url": "https://github.com/xonsh/xonsh/issues/460", + "id": 114540132, + "number": 460, + "title": "“Failed building wheel for xonsh” error on Windows", + "user": { + "login": "uranusjr", + "id": 605277, + "avatar_url": "https://avatars.githubusercontent.com/u/605277?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/uranusjr", + "html_url": "https://github.com/uranusjr", + "followers_url": "https://api.github.com/users/uranusjr/followers", + "following_url": "https://api.github.com/users/uranusjr/following{/other_user}", + "gists_url": "https://api.github.com/users/uranusjr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/uranusjr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/uranusjr/subscriptions", + "organizations_url": "https://api.github.com/users/uranusjr/orgs", + "repos_url": "https://api.github.com/users/uranusjr/repos", + "events_url": "https://api.github.com/users/uranusjr/events{/privacy}", + "received_events_url": "https://api.github.com/users/uranusjr/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/xonsh/xonsh/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/xonsh/xonsh/milestones/4", + "html_url": "https://github.com/xonsh/xonsh/milestones/v0.4.0", + "labels_url": "https://api.github.com/repos/xonsh/xonsh/milestones/4/labels", + "id": 1779851, + "number": 4, + "title": "v0.4.0", + "description": "", + "creator": { + "login": "scopatz", + "id": 320553, + "avatar_url": "https://avatars.githubusercontent.com/u/320553?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/scopatz", + "html_url": "https://github.com/scopatz", + "followers_url": "https://api.github.com/users/scopatz/followers", + "following_url": "https://api.github.com/users/scopatz/following{/other_user}", + "gists_url": "https://api.github.com/users/scopatz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/scopatz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/scopatz/subscriptions", + "organizations_url": "https://api.github.com/users/scopatz/orgs", + "repos_url": "https://api.github.com/users/scopatz/repos", + "events_url": "https://api.github.com/users/scopatz/events{/privacy}", + "received_events_url": "https://api.github.com/users/scopatz/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 181, + "closed_issues": 167, + "state": "open", + "created_at": "2016-05-20T22:54:44Z", + "updated_at": "2016-06-21T20:30:50Z", + "due_on": "2016-06-30T04:00:00Z", + "closed_at": null + }, + "comments": 8, + "created_at": "2015-11-02T07:17:39Z", + "updated_at": "2016-06-05T18:57:09Z", + "closed_at": null, + "body": "Log below:\r\n\r\n~~~\r\nC:\\Users\\uranusjr\\Documents\\programming\\pepsi\\pepsi>pip install xonsh\r\nCollecting xonsh\r\n Downloading xonsh-0.2.2.tar.gz (158kB)\r\n 100% |████████████████████████████████| 159kB 655kB/s\r\nCollecting ply (from xonsh)\r\n Downloading ply-3.8.tar.gz (157kB)\r\n 100% |████████████████████████████████| 159kB 873kB/s\r\nBuilding wheels for collected packages: xonsh, ply\r\n Running setup.py bdist_wheel for xonsh\r\n Complete output from command C:\\Python\\34\\python.exe -c \"import setuptools;__file__='C:\\\\Users\\\\uranusjr\\\\AppData\\\\Loc\r\nal\\\\Temp\\\\pip-build-j7y2_1iy\\\\xonsh\\\\setup.py';exec(compile(open(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec\r\n'))\" bdist_wheel -d C:\\Users\\uranusjr\\AppData\\Local\\Temp\\tmpiyapkapspip-wheel-:\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n UnicodeDecodeError: 'cp950' codec can't decode byte 0xe2 in position 2829: illegal multibyte sequence\r\n\r\n ----------------------------------------\r\n Failed building wheel for xonsh\r\n Running setup.py bdist_wheel for ply\r\n Stored in directory: C:\\Users\\uranusjr\\AppData\\Local\\pip\\Cache\\wheels\\d9\\34\\fe\\b9f5d00d8690911944b0c24811ed7f5fb2c5d89\r\nf9c4d6053c7\r\nSuccessfully built ply\r\nFailed to build xonsh\r\nInstalling collected packages: ply, xonsh\r\n Running setup.py install for xonsh\r\nSuccessfully installed ply-3.8 xonsh-0.2.2\r\n~~~\r\n\r\nI believe this is related to the content in the setup script (having seen this error numerous times myself), but didn’t look deep into this. The setup seems to complete, however, and I do get to import xonsh in Python. The prompt would be in gibberish, but I don’t think the two problems are related. (Currently looking into this one.) Edit: Seems that I missed the Windows Guide on the main page. Scratch the last part.", + "score": 3.9802055 + }, + { + "url": "https://api.github.com/repos/mila-udem/fuel/issues/267", + "repository_url": "https://api.github.com/repos/mila-udem/fuel", + "labels_url": "https://api.github.com/repos/mila-udem/fuel/issues/267/labels{/name}", + "comments_url": "https://api.github.com/repos/mila-udem/fuel/issues/267/comments", + "events_url": "https://api.github.com/repos/mila-udem/fuel/issues/267/events", + "html_url": "https://github.com/mila-udem/fuel/issues/267", + "id": 114691796, + "number": 267, + "title": "Install on windows failing w/ python35", + "user": { + "login": "aluo-x", + "id": 15619682, + "avatar_url": "https://avatars.githubusercontent.com/u/15619682?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aluo-x", + "html_url": "https://github.com/aluo-x", + "followers_url": "https://api.github.com/users/aluo-x/followers", + "following_url": "https://api.github.com/users/aluo-x/following{/other_user}", + "gists_url": "https://api.github.com/users/aluo-x/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aluo-x/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aluo-x/subscriptions", + "organizations_url": "https://api.github.com/users/aluo-x/orgs", + "repos_url": "https://api.github.com/users/aluo-x/repos", + "events_url": "https://api.github.com/users/aluo-x/events{/privacy}", + "received_events_url": "https://api.github.com/users/aluo-x/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/mila-udem/fuel/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/mila-udem/fuel/labels/installation", + "name": "installation", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2015-11-02T21:49:52Z", + "updated_at": "2015-11-24T05:01:19Z", + "closed_at": null, + "body": "Using the pip install git command, it fails with the following output:\r\n```\r\nrunning install\r\nrunning bdist_egg\r\nrunning egg_info\r\ncreating fuel.egg-info\r\nwriting fuel.egg-info\\PKG-INFO\r\nwriting requirements to fuel.egg-info\\requires.txt\r\nwriting entry points to fuel.egg-info\\entry_points.txt\r\nwriting top-level names to fuel.egg-info\\top_level.txt\r\nwriting dependency_links to fuel.egg-info\\dependency_links.txt\r\nwriting manifest file 'fuel.egg-info\\SOURCES.txt'\r\nreading manifest file 'fuel.egg-info\\SOURCES.txt'\r\nwriting manifest file 'fuel.egg-info\\SOURCES.txt'\r\ninstalling library code to build\\bdist.win-amd64\\egg\r\nrunning install_lib\r\nrunning build_py\r\ncreating build\r\ncreating build\\lib.win-amd64-3.5\r\ncreating build\\lib.win-amd64-3.5\\doctests\r\ncopying doctests\\__init__.py -> build\\lib.win-amd64-3.5\\doctests\r\ncreating build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\config_parser.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\exceptions.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\iterator.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\schemes.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\server.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\streams.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\utils.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\version.py -> build\\lib.win-amd64-3.5\\fuel\r\ncopying fuel\\__init__.py -> build\\lib.win-amd64-3.5\\fuel\r\ncreating build\\lib.win-amd64-3.5\\fuel\\bin\r\ncopying fuel\\bin\\fuel_convert.py -> build\\lib.win-amd64-3.5\\fuel\\bin\r\ncopying fuel\\bin\\fuel_download.py -> build\\lib.win-amd64-3.5\\fuel\\bin\r\ncopying fuel\\bin\\fuel_info.py -> build\\lib.win-amd64-3.5\\fuel\\bin\r\ncopying fuel\\bin\\__init__.py -> build\\lib.win-amd64-3.5\\fuel\\bin\r\ncreating build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\adult.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\base.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\binarized_mnist.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\caltech101_silhouettes.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\cifar10.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\cifar100.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\iris.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\mnist.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\svhn.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncopying fuel\\converters\\__init__.py -> build\\lib.win-amd64-3.5\\fuel\\converters\r\ncreating build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\adult.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\base.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\billion.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\binarized_mnist.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\caltech101_silhouettes.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\cifar10.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\cifar100.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\hdf5.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\iris.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\mnist.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\svhn.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\text.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\toy.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncopying fuel\\datasets\\__init__.py -> build\\lib.win-amd64-3.5\\fuel\\datasets\r\ncreating build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\adult.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\base.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\binarized_mnist.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\caltech101_silhouettes.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\cifar10.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\cifar100.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\iris.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\mnist.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\svhn.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncopying fuel\\downloaders\\__init__.py -> build\\lib.win-amd64-3.5\\fuel\\downloaders\r\ncreating build\\lib.win-amd64-3.5\\fuel\\transformers\r\ncopying fuel\\transformers\\defaults.py -> build\\lib.win-amd64-3.5\\fuel\\transformers\r\ncopying fuel\\transformers\\image.py -> build\\lib.win-amd64-3.5\\fuel\\transformers\r\ncopying fuel\\transformers\\text.py -> build\\lib.win-amd64-3.5\\fuel\\transformers\r\ncopying fuel\\transformers\\__init__.py -> build\\lib.win-amd64-3.5\\fuel\\transformers\r\ncreating build\\lib.win-amd64-3.5\\tests\r\ncreating build\\lib.win-amd64-3.5\\tests\\transformers\r\ncopying tests\\transformers\\test_image.py -> build\\lib.win-amd64-3.5\\tests\\transformers\r\ncopying tests\\transformers\\test_transformers.py -> build\\lib.win-amd64-3.5\\tests\\transformers\r\ncopying tests\\transformers\\__init__.py -> build\\lib.win-amd64-3.5\\tests\\transformers\r\nrunning build_ext\r\nbuilding 'fuel.transformers._image' extension\r\nerror: [WinError 2] The system cannot find the file specified\r\n```", + "score": 3.4713938 + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/issues/459", + "repository_url": "https://api.github.com/repos/pypa/setuptools", + "labels_url": "https://api.github.com/repos/pypa/setuptools/issues/459/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/setuptools/issues/459/comments", + "events_url": "https://api.github.com/repos/pypa/setuptools/issues/459/events", + "html_url": "https://github.com/pypa/setuptools/issues/459", + "id": 144282183, + "number": 459, + "title": "Incorrect sys.argv[0] for generated console scripts on Windows", + "user": { + "login": "bb-migration", + "id": 18138808, + "avatar_url": "https://avatars.githubusercontent.com/u/18138808?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bb-migration", + "html_url": "https://github.com/bb-migration", + "followers_url": "https://api.github.com/users/bb-migration/followers", + "following_url": "https://api.github.com/users/bb-migration/following{/other_user}", + "gists_url": "https://api.github.com/users/bb-migration/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bb-migration/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bb-migration/subscriptions", + "organizations_url": "https://api.github.com/users/bb-migration/orgs", + "repos_url": "https://api.github.com/users/bb-migration/repos", + "events_url": "https://api.github.com/users/bb-migration/events{/privacy}", + "received_events_url": "https://api.github.com/users/bb-migration/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/bug", + "name": "bug", + "color": "ee0701" + }, + { + "url": "https://api.github.com/repos/pypa/setuptools/labels/minor", + "name": "minor", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 0, + "created_at": "2015-11-07T16:11:19Z", + "updated_at": "2016-03-29T14:31:16Z", + "closed_at": null, + "body": "Originally reported by: **pombredanne (Bitbucket: [pombredanne](http://bitbucket.org/pombredanne), GitHub: [pombredanne](http://github.com/pombredanne))**\n\n----------------------------------------\n\nThe code that generates entry point console script return an incorrect value for sys.argv[0] on windows:\nhttps://bitbucket.org/pypa/setuptools/src/4ce518784af886e6977fa2dbe58359d0fe161d0d/setuptools/command/easy_install.py?at=default&fileviewer=file-view-default#easy_install.py-2008\n\nEven if the script was called from the CLI as XXXX, sys.argv[0] will be XXXX-script.py\nIt should instead by XXXX.\n\npip handles this by fixing sys.argv[0] in the generated launcher script for wheels here https://github.com/pypa/pip/blob/1da0ea13f3f0ab789edd62012d09bf69be045f68/pip/wheel.py#L416\n\ndistlib fixes sys.argv[0] here in a similar way in the launcher script :\nhttps://bitbucket.org/pypa/distlib/src/6ada86eea2700f10edcd81f831139c6ae20edb74/distlib/scripts.py?at=default&fileviewer=file-view-default#scripts.py-55\n\nSetuptools does not and it should IMHO.\n\nSee also this issue: https://github.com/pypa/pip/issues/3233\n\n\nAnd where this was discovered: https://github.com/mitsuhiko/click/issues/365\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/pypa/setuptools/issue/459\n", + "score": 3.7618823 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/11679", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/11679/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/11679/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/11679/events", + "html_url": "https://github.com/pydata/pandas/issues/11679", + "id": 118394225, + "number": 11679, + "title": "error in in _convert_to_indexer while using .loc with tz-aware DateTimeIndex", + "user": { + "login": "lopezco", + "id": 6637618, + "avatar_url": "https://avatars.githubusercontent.com/u/6637618?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lopezco", + "html_url": "https://github.com/lopezco", + "followers_url": "https://api.github.com/users/lopezco/followers", + "following_url": "https://api.github.com/users/lopezco/following{/other_user}", + "gists_url": "https://api.github.com/users/lopezco/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lopezco/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lopezco/subscriptions", + "organizations_url": "https://api.github.com/users/lopezco/orgs", + "repos_url": "https://api.github.com/users/lopezco/repos", + "events_url": "https://api.github.com/users/lopezco/events{/privacy}", + "received_events_url": "https://api.github.com/users/lopezco/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Timezones", + "name": "Timezones", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/40", + "html_url": "https://github.com/pydata/pandas/milestones/0.18.2", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/40/labels", + "id": 1639795, + "number": 40, + "title": "0.18.2", + "description": "", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 183, + "closed_issues": 208, + "state": "open", + "created_at": "2016-03-11T21:24:45Z", + "updated_at": "2016-06-21T12:43:02Z", + "due_on": "2016-06-28T04:00:00Z", + "closed_at": null + }, + "comments": 6, + "created_at": "2015-11-23T14:37:50Z", + "updated_at": "2016-04-25T15:23:21Z", + "closed_at": null, + "body": "Hello,\r\n\r\nI encounter some problems using the data provided here: [data.txt](https://github.com/pydata/pandas/files/41644/data.txt)\r\n\r\nWhen I was trying to use **.loc** on my **DateTimeIndex**, I go t the following error\r\n``` python\r\nKeyError: \"['2015-03-01T02:00:00.000000000+0100'] not in index\"\r\n```\r\nNotice that the error occurs only if we have the DST changing time in the DateTimeIndex\r\n\r\nWhile debugging I've found that the error comes from the _convert_to_indexer method at: \r\n``` python\r\n# indexing.py\r\nmask = check == -1\r\nif mask.any():\r\n raise KeyError('%s not in index' % objarr[mask]) <------------------------------------\r\n```\r\nHere is the copy-paste example using the data on the .txt attached:\r\n``` python\r\ndata = pd.read_csv(\"data.txt\"), parse_dates={'time':['Date']})\r\ndata.set_index('time', inplace=True)\r\ndata.index = data.index.tz_localize('Europe/Paris', ambiguous='infer').tz_convert('UTC')\r\n\r\nfor i in range(1, len(data)):\r\n try:-aware \r\n data.loc[data.index[:i], 'value'] = -1\r\n except Exception as e:\r\n print i,e\r\n break\r\n\r\n```\r\n\r\nOther important fact: the error occurs for pandas version 0.17.0 and 0.17.1. However, I've managed to make it work with an older version of pandas (**0.16.2**) \r\n\r\nI hope this is explicit enough.\r\n\r\n**UPDATE**\r\n``` python\r\nIn[19]: pd.show_versions()\r\n\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 2.7.6.final.0\r\npython-bits: 64\r\nOS: Linux\r\nOS-release: 3.19.0-33-generic\r\nmachine: x86_64\r\nprocessor: x86_64\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: en_US.UTF-8\r\n\r\npandas: 0.17.1\r\nnose: 1.3.7\r\npip: 7.1.2\r\nsetuptools: 18.5\r\nCython: 0.23.4\r\nnumpy: 1.10.1\r\nscipy: 0.16.1\r\nstatsmodels: None\r\nIPython: 4.0.0\r\nsphinx: None\r\npatsy: None\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: None\r\ntables: None\r\nnumexpr: 2.4.6\r\nmatplotlib: 1.5.0\r\nopenpyxl: None\r\nxlrd: None\r\nxlwt: None\r\nxlsxwriter: None\r\nlxml: None\r\nbs4: None\r\nhtml5lib: None\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: None\r\npymysql: None\r\npsycopg2: None\r\nJinja2: None\r\n```", + "score": 0.6430466 + }, + { + "url": "https://api.github.com/repos/duniter/sakia/issues/284", + "repository_url": "https://api.github.com/repos/duniter/sakia", + "labels_url": "https://api.github.com/repos/duniter/sakia/issues/284/labels{/name}", + "comments_url": "https://api.github.com/repos/duniter/sakia/issues/284/comments", + "events_url": "https://api.github.com/repos/duniter/sakia/issues/284/events", + "html_url": "https://github.com/duniter/sakia/issues/284", + "id": 120968202, + "number": 284, + "title": "Fix appveyor build", + "user": { + "login": "Insoleet", + "id": 1170293, + "avatar_url": "https://avatars.githubusercontent.com/u/1170293?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Insoleet", + "html_url": "https://github.com/Insoleet", + "followers_url": "https://api.github.com/users/Insoleet/followers", + "following_url": "https://api.github.com/users/Insoleet/following{/other_user}", + "gists_url": "https://api.github.com/users/Insoleet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Insoleet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Insoleet/subscriptions", + "organizations_url": "https://api.github.com/users/Insoleet/orgs", + "repos_url": "https://api.github.com/users/Insoleet/repos", + "events_url": "https://api.github.com/users/Insoleet/events{/privacy}", + "received_events_url": "https://api.github.com/users/Insoleet/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/duniter/sakia/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/duniter/sakia/labels/enhancement", + "name": "enhancement", + "color": "84b6eb" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/duniter/sakia/milestones/9", + "html_url": "https://github.com/duniter/sakia/milestones/future", + "labels_url": "https://api.github.com/repos/duniter/sakia/milestones/9/labels", + "id": 1373119, + "number": 9, + "title": "future", + "description": null, + "creator": { + "login": "M5oul", + "id": 4758871, + "avatar_url": "https://avatars.githubusercontent.com/u/4758871?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/M5oul", + "html_url": "https://github.com/M5oul", + "followers_url": "https://api.github.com/users/M5oul/followers", + "following_url": "https://api.github.com/users/M5oul/following{/other_user}", + "gists_url": "https://api.github.com/users/M5oul/gists{/gist_id}", + "starred_url": "https://api.github.com/users/M5oul/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/M5oul/subscriptions", + "organizations_url": "https://api.github.com/users/M5oul/orgs", + "repos_url": "https://api.github.com/users/M5oul/repos", + "events_url": "https://api.github.com/users/M5oul/events{/privacy}", + "received_events_url": "https://api.github.com/users/M5oul/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 24, + "closed_issues": 1, + "state": "open", + "created_at": "2015-10-23T18:54:25Z", + "updated_at": "2016-05-12T19:35:05Z", + "due_on": null, + "closed_at": null + }, + "comments": 1, + "created_at": "2015-12-08T09:30:05Z", + "updated_at": "2016-01-15T19:28:43Z", + "closed_at": null, + "body": "So with the migration to python 3.5, we broke a couple of things on appveyor : \r\n\r\n- No prebuild binary for pyqt 5.5.1 for python 3.5? It seems like we have to wait for PyQt 5.6. In the meantime, we are missing a conda package for PyQt5...\r\n- cx_freeze cannot be installed on windows via pip ( https://bitbucket.org/anthony_tuininga/cx_freeze/issues/56/missed-cxfreeze-postinstall-script-in )", + "score": 1.1817191 + }, + { + "url": "https://api.github.com/repos/python-pillow/Pillow/issues/1597", + "repository_url": "https://api.github.com/repos/python-pillow/Pillow", + "labels_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1597/labels{/name}", + "comments_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1597/comments", + "events_url": "https://api.github.com/repos/python-pillow/Pillow/issues/1597/events", + "html_url": "https://github.com/python-pillow/Pillow/issues/1597", + "id": 122312021, + "number": 1597, + "title": "Segmentation fault", + "user": { + "login": "playnet", + "id": 1932020, + "avatar_url": "https://avatars.githubusercontent.com/u/1932020?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/playnet", + "html_url": "https://github.com/playnet", + "followers_url": "https://api.github.com/users/playnet/followers", + "following_url": "https://api.github.com/users/playnet/following{/other_user}", + "gists_url": "https://api.github.com/users/playnet/gists{/gist_id}", + "starred_url": "https://api.github.com/users/playnet/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/playnet/subscriptions", + "organizations_url": "https://api.github.com/users/playnet/orgs", + "repos_url": "https://api.github.com/users/playnet/repos", + "events_url": "https://api.github.com/users/playnet/events{/privacy}", + "received_events_url": "https://api.github.com/users/playnet/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/python-pillow/Pillow/labels/Bug", + "name": "Bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/python-pillow/Pillow/labels/Tiff", + "name": "Tiff", + "color": "fef2c0" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 12, + "created_at": "2015-12-15T16:32:36Z", + "updated_at": "2015-12-30T15:01:56Z", + "closed_at": null, + "body": "\r\n[rdf.zip](https://github.com/python-pillow/Pillow/files/62856/rdf.zip)\r\ngithub don't eat .tif file, unzip it and\r\n\r\n```\r\nPython 2.7.6 (default, Jun 22 2015, 17:58:13) \r\n[GCC 4.8.2] on linux2\r\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n>>> import PIL.Image\r\n>>> filename=\"rdf.tif\"\r\n>>> img = PIL.Image.open(filename)\r\n>>> img.info\r\n{'resolution': (72.0, 72.0), 'compression': 'tiff_lzw'}\r\n>>> img.size\r\n(518, 556)\r\n>>> img.save(\"rdf.1.tif\", format='TIFF')\r\nSegmentation fault\r\n\r\n$ pip show Pillow\r\n---\r\nName: Pillow\r\nVersion: 3.0.0\r\nLocation: /usr/local/lib/python2.7/dist-packages\r\nRequires: \r\n\r\n$ dpkg -l|grep tiff\r\nii libtiff-tools 4.0.3-7ubuntu0.3 amd64 TIFF manipulation and conversion tools\r\nii libtiff4:amd64 3.9.7-2ubuntu1 amd64 Tag Image File Format (TIFF) library (old version)\r\nii libtiff5:amd64 4.0.3-7ubuntu0.3 amd64 Tag Image File Format (TIFF) library\r\nii libtiff5:i386 4.0.3-7ubuntu0.3 i386 Tag Image File Format (TIFF) library\r\nii libtiff5-dev:amd64 4.0.3-7ubuntu0.3 amd64 Tag Image File Format library (TIFF), development files\r\nii libtiffxx5:amd64 4.0.3-7ubuntu0.3 amd64 Tag Image File Format (TIFF) library -- C++ interface\r\n\r\n```\r\n\r\n```\r\nuname -a\r\nLinux playnet 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux\r\ncat /etc/lsb-release\r\nDISTRIB_ID=LinuxMint\r\nDISTRIB_RELEASE=17.2\r\nDISTRIB_CODENAME=rafaela\r\nDISTRIB_DESCRIPTION=\"Linux Mint 17.2 Rafaela\"\r\n```\r\n\r\nAnd\r\n```\r\nLinux build64 2.6.32-042stab111.12 #1 SMP Thu Sep 17 11:38:20 MSK 2015 x86_64 x86_64 x86_64 GNU/Linux\r\n$cat /etc/redhat-release \r\nCentOS release 6.7 (Final)\r\n$python -V\r\nPython 2.6.6\r\n\r\n```\r\n", + "score": 0.5389216 + }, + { + "url": "https://api.github.com/repos/FCS-analysis/PyCorrFit/issues/147", + "repository_url": "https://api.github.com/repos/FCS-analysis/PyCorrFit", + "labels_url": "https://api.github.com/repos/FCS-analysis/PyCorrFit/issues/147/labels{/name}", + "comments_url": "https://api.github.com/repos/FCS-analysis/PyCorrFit/issues/147/comments", + "events_url": "https://api.github.com/repos/FCS-analysis/PyCorrFit/issues/147/events", + "html_url": "https://github.com/FCS-analysis/PyCorrFit/issues/147", + "id": 122768994, + "number": 147, + "title": "MacOSx builds fail to open data since release 0.9.5", + "user": { + "login": "weidemann", + "id": 5793720, + "avatar_url": "https://avatars.githubusercontent.com/u/5793720?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/weidemann", + "html_url": "https://github.com/weidemann", + "followers_url": "https://api.github.com/users/weidemann/followers", + "following_url": "https://api.github.com/users/weidemann/following{/other_user}", + "gists_url": "https://api.github.com/users/weidemann/gists{/gist_id}", + "starred_url": "https://api.github.com/users/weidemann/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/weidemann/subscriptions", + "organizations_url": "https://api.github.com/users/weidemann/orgs", + "repos_url": "https://api.github.com/users/weidemann/repos", + "events_url": "https://api.github.com/users/weidemann/events{/privacy}", + "received_events_url": "https://api.github.com/users/weidemann/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/FCS-analysis/PyCorrFit/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/FCS-analysis/PyCorrFit/labels/Mac", + "name": "Mac", + "color": "c7def8" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 5, + "created_at": "2015-12-17T16:22:35Z", + "updated_at": "2016-05-30T15:33:26Z", + "closed_at": null, + "body": "tested PyCorrFit latest release 0.9.5\r\n\r\nDoes not allow file loading under MacOS.\r\nDoes not allow to cancel during the infinite loading time.\r\n\r\nCan load the files but crashes when using Win_64 bit version.", + "score": 0.3749455 + }, + { + "url": "https://api.github.com/repos/F483/btctxstore/issues/17", + "repository_url": "https://api.github.com/repos/F483/btctxstore", + "labels_url": "https://api.github.com/repos/F483/btctxstore/issues/17/labels{/name}", + "comments_url": "https://api.github.com/repos/F483/btctxstore/issues/17/comments", + "events_url": "https://api.github.com/repos/F483/btctxstore/issues/17/events", + "html_url": "https://github.com/F483/btctxstore/issues/17", + "id": 123678009, + "number": 17, + "title": "Signing encoding error.", + "user": { + "login": "F483", + "id": 977605, + "avatar_url": "https://avatars.githubusercontent.com/u/977605?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/F483", + "html_url": "https://github.com/F483", + "followers_url": "https://api.github.com/users/F483/followers", + "following_url": "https://api.github.com/users/F483/following{/other_user}", + "gists_url": "https://api.github.com/users/F483/gists{/gist_id}", + "starred_url": "https://api.github.com/users/F483/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/F483/subscriptions", + "organizations_url": "https://api.github.com/users/F483/orgs", + "repos_url": "https://api.github.com/users/F483/repos", + "events_url": "https://api.github.com/users/F483/events{/privacy}", + "received_events_url": "https://api.github.com/users/F483/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/F483/btctxstore/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2015-12-23T15:27:34Z", + "updated_at": "2016-02-29T00:52:14Z", + "closed_at": null, + "body": "> matthewr\r\n> 7:04 AM @f483 on line 283 of control.py in btctxstore: the first parameter to struct needs to be a byte string otherwise it doesn't run on windows. I don't have commit access so I can't change this but might want to look into it.\r\n\r\nI don't think its that simple, the error must be before that as all input should be sanitized and normalized before it gets that far. I will check if the unittest cover all possible inputs and add them if not. Then fix anything that breaks.\r\n\r\n@robertsdotpm do you have a stack trace or the input that caused the problem.", + "score": 0.46075937 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/11983", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/11983/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/11983/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/11983/events", + "html_url": "https://github.com/pydata/pandas/issues/11983", + "id": 125369922, + "number": 11983, + "title": "Panel resample by periods does not work in 0.17.1 for certain panels", + "user": { + "login": "rekcahpassyla", + "id": 7807926, + "avatar_url": "https://avatars.githubusercontent.com/u/7807926?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rekcahpassyla", + "html_url": "https://github.com/rekcahpassyla", + "followers_url": "https://api.github.com/users/rekcahpassyla/followers", + "following_url": "https://api.github.com/users/rekcahpassyla/following{/other_user}", + "gists_url": "https://api.github.com/users/rekcahpassyla/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rekcahpassyla/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rekcahpassyla/subscriptions", + "organizations_url": "https://api.github.com/users/rekcahpassyla/orgs", + "repos_url": "https://api.github.com/users/rekcahpassyla/repos", + "events_url": "https://api.github.com/users/rekcahpassyla/events{/privacy}", + "received_events_url": "https://api.github.com/users/rekcahpassyla/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Period", + "name": "Period", + "color": "eb6420" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Resample", + "name": "Resample", + "color": "207de5" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2016-01-07T10:48:52Z", + "updated_at": "2016-04-11T22:06:17Z", + "closed_at": null, + "body": "This code works in 0.15.2 but breaks in 0.17.1\r\n\r\n```python\r\nimport pandas as pd\r\nimport numpy as np\r\n\r\npd.show_versions()\r\n\r\nitems = ['foo']\r\nmajor_axis = pd.date_range('2013-04-01', '2013-06-30')\r\nminor_axis = [0]\r\n\r\np = pd.Panel(\r\n np.ones(major_axis.size).reshape(1, -1, 1),\r\n items=items,\r\n major_axis=major_axis\r\n)\r\n\r\np.resample('Q', how='mean', axis=1, kind='period')\r\n```\r\n\r\n### 0.15.2:\r\n```\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 2.7.11.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 26 Stepping 5, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: en_GB\r\n\r\npandas: 0.15.2\r\nnose: 1.3.7\r\nCython: 0.22\r\nnumpy: 1.9.3\r\nscipy: 0.16.0\r\nstatsmodels: None\r\nIPython: 3.2.1\r\nsphinx: 1.3.1\r\npatsy: 0.3.0\r\ndateutil: 2.4.1\r\npytz: 2015.7\r\nbottleneck: 1.0.0\r\ntables: 3.2.0\r\nnumexpr: 2.4.3\r\nmatplotlib: 1.4.3\r\nopenpyxl: 1.8.5\r\nxlrd: 0.9.4\r\nxlwt: 0.7.5\r\nxlsxwriter: 0.7.3\r\nlxml: 3.4.4\r\nbs4: 4.3.2\r\nhtml5lib: 0.999\r\nhttplib2: None\r\napiclient: None\r\nrpy2: None\r\nsqlalchemy: 1.0.9\r\npymysql: None\r\npsycopg2: None\r\nOut[1]: \r\n\r\nDimensions: 1 (items) x 1 (major_axis) x 1 (minor_axis)\r\nItems axis: foo to foo\r\nMajor_axis axis: 2013Q2 to 2013Q2\r\nMinor_axis axis: 0 to 0\r\n```\r\n\r\n### 0.17.1:\r\n\r\n```\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 2.7.11.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 26 Stepping 5, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.17.1\r\nnose: 1.3.7\r\npip: 7.1.2\r\nsetuptools: 19.1.1\r\nCython: 0.23.4\r\nnumpy: 1.10.2\r\nscipy: 0.16.0\r\nstatsmodels: 0.6.1\r\nIPython: 3.2.1\r\nsphinx: 1.3\r\npatsy: 0.4.0\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: 1.0.0\r\ntables: 3.2.2\r\nnumexpr: 2.4.4\r\nmatplotlib: 1.4.3\r\nopenpyxl: None\r\nxlrd: 0.9.4\r\nxlwt: None\r\nxlsxwriter: 0.7.7\r\nlxml: None\r\nbs4: 4.3.2\r\nhtml5lib: 0.999\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: 1.0.10\r\npymysql: None\r\npsycopg2: None\r\nJinja2: None\r\n\r\n\r\nIn [11]: p.resample('Q', how='mean', axis=1, kind='period')\r\n---------------------------------------------------------------------------\r\nNotImplementedError Traceback (most recent call last)\r\n in ()\r\n----> 1 p.resample('Q', how='mean', axis=1, kind='period')\r\n\r\nc:\\python\\envs\\pandas-0.17\\lib\\site-packages\\pandas\\core\\generic.pyc in resample(self, rule, how, axis, fill_method, closed, label, convention, kind,\r\nloffset, limit, base)\r\n 3641 fill_method=fill_method, convention=convention,\r\n 3642 limit=limit, base=base)\r\n-> 3643 return sampler.resample(self).__finalize__(self)\r\n 3644\r\n 3645 def first(self, offset):\r\n\r\nc:\\python\\envs\\pandas-0.17\\lib\\site-packages\\pandas\\tseries\\resample.pyc in resample(self, obj)\r\n 80\r\n 81 if isinstance(ax, DatetimeIndex):\r\n---> 82 rs = self._resample_timestamps()\r\n 83 elif isinstance(ax, PeriodIndex):\r\n 84 offset = to_offset(self.freq)\r\n\r\nc:\\python\\envs\\pandas-0.17\\lib\\site-packages\\pandas\\tseries\\resample.pyc in _resample_timestamps(self, kind)\r\n 285 # downsample\r\n 286 grouped = obj.groupby(grouper, axis=self.axis)\r\n--> 287 result = grouped.aggregate(self._agg_method)\r\n 288 # GH2073\r\n 289 if self.fill_method is not None:\r\n\r\nc:\\python\\envs\\pandas-0.17\\lib\\site-packages\\pandas\\core\\groupby.pyc in aggregate(self, arg, *args, **kwargs)\r\n 3661 \"\"\"\r\n 3662 if isinstance(arg, compat.string_types):\r\n-> 3663 return getattr(self, arg)(*args, **kwargs)\r\n 3664\r\n 3665 return self._aggregate_generic(arg, *args, **kwargs)\r\n\r\nc:\\python\\envs\\pandas-0.17\\lib\\site-packages\\pandas\\core\\groupby.pyc in mean(self)\r\n 764 self._set_selection_from_grouper()\r\n 765 f = lambda x: x.mean(axis=self.axis)\r\n--> 766 return self._python_agg_general(f)\r\n 767\r\n 768 def median(self):\r\n\r\nc:\\python\\envs\\pandas-0.17\\lib\\site-packages\\pandas\\core\\groupby.pyc in _python_agg_general(self, func, *args, **kwargs)\r\n 1223 # iterate through \"columns\" ex exclusions to populate output dict\r\n 1224 output = {}\r\n-> 1225 for name, obj in self._iterate_slices():\r\n 1226 try:\r\n 1227 result, counts = self.grouper.agg_series(obj, f)\r\n\r\nc:\\python\\envs\\pandas-0.17\\lib\\site-packages\\pandas\\core\\groupby.pyc in _iterate_slices(self)\r\n 3637 slicer = lambda x: self._selected_obj[x]\r\n 3638 else:\r\n-> 3639 raise NotImplementedError(\"axis other than 0 is not supported\")\r\n 3640\r\n 3641 for val in slice_axis:\r\n\r\nNotImplementedError: axis other than 0 is not supported\r\n\r\n```\r\n", + "score": 0.42047954 + }, + { + "url": "https://api.github.com/repos/jaraco/jaraco.video/issues/6", + "repository_url": "https://api.github.com/repos/jaraco/jaraco.video", + "labels_url": "https://api.github.com/repos/jaraco/jaraco.video/issues/6/labels{/name}", + "comments_url": "https://api.github.com/repos/jaraco/jaraco.video/issues/6/comments", + "events_url": "https://api.github.com/repos/jaraco/jaraco.video/issues/6/events", + "html_url": "https://github.com/jaraco/jaraco.video/issues/6", + "id": 126203868, + "number": 6, + "title": "Can't create Device instance", + "user": { + "login": "jaraco", + "id": 308610, + "avatar_url": "https://avatars.githubusercontent.com/u/308610?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jaraco", + "html_url": "https://github.com/jaraco", + "followers_url": "https://api.github.com/users/jaraco/followers", + "following_url": "https://api.github.com/users/jaraco/following{/other_user}", + "gists_url": "https://api.github.com/users/jaraco/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jaraco/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jaraco/subscriptions", + "organizations_url": "https://api.github.com/users/jaraco/orgs", + "repos_url": "https://api.github.com/users/jaraco/repos", + "events_url": "https://api.github.com/users/jaraco/events{/privacy}", + "received_events_url": "https://api.github.com/users/jaraco/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/jaraco/jaraco.video/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/jaraco/jaraco.video/labels/major", + "name": "major", + "color": "ededed" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2016-01-12T03:58:18Z", + "updated_at": "2016-01-13T03:54:59Z", + "closed_at": null, + "body": "Originally reported by: **Curtis Maloney (Bitbucket: [funkybob](http://bitbucket.org/funkybob), GitHub: [funkybob](http://github.com/funkybob))**\n\n----------------------------------------\n\nHave tried latest pip version and BB repo from today, and get the same result:\n\n\n```\n#!python\n\n>>> c = capture.Device(0)\nTraceback (most recent call last):\n File \"\", line 1, in \n File \"C:\\Python27\\lib\\site-packages\\jaraco\\video\\capture.py\", line 54, in __init__\n self.initialize()\n File \"C:\\Python27\\lib\\site-packages\\jaraco\\video\\capture.py\", line 94, in initialize\n None,\n_ctypes.COMError: (-2147467259, 'Unspecified error', (None, None, None, 0, None))\n```\n\nPython 2.7.11 (32bit)\nWindows 7 Professional (64bit)\n\n----------------------------------------\n- Bitbucket: https://bitbucket.org/jaraco/jaraco.video/issue/6\n", + "score": 1.1030604 + }, + { + "url": "https://api.github.com/repos/hoburg/gpkit/issues/510", + "repository_url": "https://api.github.com/repos/hoburg/gpkit", + "labels_url": "https://api.github.com/repos/hoburg/gpkit/issues/510/labels{/name}", + "comments_url": "https://api.github.com/repos/hoburg/gpkit/issues/510/comments", + "events_url": "https://api.github.com/repos/hoburg/gpkit/issues/510/events", + "html_url": "https://github.com/hoburg/gpkit/issues/510", + "id": 131486248, + "number": 510, + "title": "Windows pip install instructions out of date", + "user": { + "login": "bqpd", + "id": 1482776, + "avatar_url": "https://avatars.githubusercontent.com/u/1482776?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bqpd", + "html_url": "https://github.com/bqpd", + "followers_url": "https://api.github.com/users/bqpd/followers", + "following_url": "https://api.github.com/users/bqpd/following{/other_user}", + "gists_url": "https://api.github.com/users/bqpd/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bqpd/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bqpd/subscriptions", + "organizations_url": "https://api.github.com/users/bqpd/orgs", + "repos_url": "https://api.github.com/users/bqpd/repos", + "events_url": "https://api.github.com/users/bqpd/events{/privacy}", + "received_events_url": "https://api.github.com/users/bqpd/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/hoburg/gpkit/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/hoburg/gpkit/milestones/14", + "html_url": "https://github.com/hoburg/gpkit/milestones/Docs", + "labels_url": "https://api.github.com/repos/hoburg/gpkit/milestones/14/labels", + "id": 1608352, + "number": 14, + "title": "Docs", + "description": "Scrubbing / improvement of documentation at http://gpkit.rtfd.org", + "creator": { + "login": "whoburg", + "id": 6042395, + "avatar_url": "https://avatars.githubusercontent.com/u/6042395?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/whoburg", + "html_url": "https://github.com/whoburg", + "followers_url": "https://api.github.com/users/whoburg/followers", + "following_url": "https://api.github.com/users/whoburg/following{/other_user}", + "gists_url": "https://api.github.com/users/whoburg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/whoburg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/whoburg/subscriptions", + "organizations_url": "https://api.github.com/users/whoburg/orgs", + "repos_url": "https://api.github.com/users/whoburg/repos", + "events_url": "https://api.github.com/users/whoburg/events{/privacy}", + "received_events_url": "https://api.github.com/users/whoburg/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 32, + "closed_issues": 6, + "state": "open", + "created_at": "2016-02-26T16:13:33Z", + "updated_at": "2016-06-08T21:00:05Z", + "due_on": null, + "closed_at": null + }, + "comments": 0, + "created_at": "2016-02-04T22:01:45Z", + "updated_at": "2016-03-15T18:40:51Z", + "closed_at": null, + "body": "They reference Anaconda, and need to be updated for the python xy environment.\r\n\r\nMore details:\r\nhttps://github.com/hoburg/gpkit/commit/f926d46c7bcf56f39cca7954dfbe56541bbeed18#commitcomment-15898949", + "score": 10.844188 + }, + { + "url": "https://api.github.com/repos/hoburg/gpkit/issues/512", + "repository_url": "https://api.github.com/repos/hoburg/gpkit", + "labels_url": "https://api.github.com/repos/hoburg/gpkit/issues/512/labels{/name}", + "comments_url": "https://api.github.com/repos/hoburg/gpkit/issues/512/comments", + "events_url": "https://api.github.com/repos/hoburg/gpkit/issues/512/events", + "html_url": "https://github.com/hoburg/gpkit/issues/512", + "id": 131649759, + "number": 512, + "title": "old version of GPkit on PyPI? (t_issue476)", + "user": { + "login": "whoburg", + "id": 6042395, + "avatar_url": "https://avatars.githubusercontent.com/u/6042395?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/whoburg", + "html_url": "https://github.com/whoburg", + "followers_url": "https://api.github.com/users/whoburg/followers", + "following_url": "https://api.github.com/users/whoburg/following{/other_user}", + "gists_url": "https://api.github.com/users/whoburg/gists{/gist_id}", + "starred_url": "https://api.github.com/users/whoburg/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/whoburg/subscriptions", + "organizations_url": "https://api.github.com/users/whoburg/orgs", + "repos_url": "https://api.github.com/users/whoburg/repos", + "events_url": "https://api.github.com/users/whoburg/events{/privacy}", + "received_events_url": "https://api.github.com/users/whoburg/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/hoburg/gpkit/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/hoburg/gpkit/milestones/5", + "html_url": "https://github.com/hoburg/gpkit/milestones/Distant%20release", + "labels_url": "https://api.github.com/repos/hoburg/gpkit/milestones/5/labels", + "id": 1213262, + "number": 5, + "title": "Distant release", + "description": "These are issues with a shelf life greater than 3 months.", + "creator": { + "login": "bqpd", + "id": 1482776, + "avatar_url": "https://avatars.githubusercontent.com/u/1482776?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/bqpd", + "html_url": "https://github.com/bqpd", + "followers_url": "https://api.github.com/users/bqpd/followers", + "following_url": "https://api.github.com/users/bqpd/following{/other_user}", + "gists_url": "https://api.github.com/users/bqpd/gists{/gist_id}", + "starred_url": "https://api.github.com/users/bqpd/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/bqpd/subscriptions", + "organizations_url": "https://api.github.com/users/bqpd/orgs", + "repos_url": "https://api.github.com/users/bqpd/repos", + "events_url": "https://api.github.com/users/bqpd/events{/privacy}", + "received_events_url": "https://api.github.com/users/bqpd/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 27, + "closed_issues": 7, + "state": "open", + "created_at": "2015-07-17T17:11:51Z", + "updated_at": "2016-06-19T03:48:16Z", + "due_on": null, + "closed_at": null + }, + "comments": 13, + "created_at": "2016-02-05T13:49:26Z", + "updated_at": "2016-03-15T18:40:34Z", + "closed_at": null, + "body": "A user attempting to install reports,\r\n\r\n\"I'm attaching a screenshot of the error. I have uninstalled and reinstalled python(x,y) a couple of times and get the same error. \"\r\n\r\n![python](https://cloud.githubusercontent.com/assets/6042395/12848041/55ec8a04-cbe5-11e5-9cf7-e3c421eff49a.JPG)\r\n", + "score": 0.8324326 + }, + { + "url": "https://api.github.com/repos/scrapy/scrapy/issues/1764", + "repository_url": "https://api.github.com/repos/scrapy/scrapy", + "labels_url": "https://api.github.com/repos/scrapy/scrapy/issues/1764/labels{/name}", + "comments_url": "https://api.github.com/repos/scrapy/scrapy/issues/1764/comments", + "events_url": "https://api.github.com/repos/scrapy/scrapy/issues/1764/events", + "html_url": "https://github.com/scrapy/scrapy/issues/1764", + "id": 131659833, + "number": 1764, + "title": "sslv3 alert handshake failure when making a request", + "user": { + "login": "lagenar", + "id": 38682, + "avatar_url": "https://avatars.githubusercontent.com/u/38682?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/lagenar", + "html_url": "https://github.com/lagenar", + "followers_url": "https://api.github.com/users/lagenar/followers", + "following_url": "https://api.github.com/users/lagenar/following{/other_user}", + "gists_url": "https://api.github.com/users/lagenar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/lagenar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/lagenar/subscriptions", + "organizations_url": "https://api.github.com/users/lagenar/orgs", + "repos_url": "https://api.github.com/users/lagenar/repos", + "events_url": "https://api.github.com/users/lagenar/events{/privacy}", + "received_events_url": "https://api.github.com/users/lagenar/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/scrapy/scrapy/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/scrapy/scrapy/labels/https", + "name": "https", + "color": "e11d21" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 35, + "created_at": "2016-02-05T14:34:13Z", + "updated_at": "2016-04-19T09:40:37Z", + "closed_at": null, + "body": "Hi there, I recently upgraded to the latest scrapy and on some sites SSL enabled sites I get an exception when trying to make requests to it, while on previous scrapy versions I didn't have this issue.\r\nThe issue can be seen by making a request with scrapy shell:\r\n\r\n`scrapy shell \"https://www.gohastings.com/\"`\r\n\r\nThe error I get is: \r\n`Retrying (failed 1 times): `", + "score": 0.32683542 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/30957", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/30957/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/30957/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/30957/events", + "html_url": "https://github.com/saltstack/salt/issues/30957", + "id": 131787870, + "number": 30957, + "title": "using pip to update salt minions doesn't work", + "user": { + "login": "jefftucker", + "id": 178283, + "avatar_url": "https://avatars.githubusercontent.com/u/178283?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jefftucker", + "html_url": "https://github.com/jefftucker", + "followers_url": "https://api.github.com/users/jefftucker/followers", + "following_url": "https://api.github.com/users/jefftucker/following{/other_user}", + "gists_url": "https://api.github.com/users/jefftucker/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jefftucker/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jefftucker/subscriptions", + "organizations_url": "https://api.github.com/users/jefftucker/orgs", + "repos_url": "https://api.github.com/users/jefftucker/repos", + "events_url": "https://api.github.com/users/jefftucker/events{/privacy}", + "received_events_url": "https://api.github.com/users/jefftucker/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Documentation", + "name": "Documentation", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P3", + "name": "P3", + "color": "0a3d77" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Packaging", + "name": "Packaging", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Stretch", + "name": "Stretch", + "color": "FF1493" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/TEAM%20Platform", + "name": "TEAM Platform", + "color": "A9A9A9" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Windows", + "name": "Windows", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "twangboy", + "id": 9383935, + "avatar_url": "https://avatars.githubusercontent.com/u/9383935?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/twangboy", + "html_url": "https://github.com/twangboy", + "followers_url": "https://api.github.com/users/twangboy/followers", + "following_url": "https://api.github.com/users/twangboy/following{/other_user}", + "gists_url": "https://api.github.com/users/twangboy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/twangboy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/twangboy/subscriptions", + "organizations_url": "https://api.github.com/users/twangboy/orgs", + "repos_url": "https://api.github.com/users/twangboy/repos", + "events_url": "https://api.github.com/users/twangboy/events{/privacy}", + "received_events_url": "https://api.github.com/users/twangboy/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/83", + "html_url": "https://github.com/saltstack/salt/milestones/C%208", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/83/labels", + "id": 1785130, + "number": 83, + "title": "C 8", + "description": "", + "creator": { + "login": "meggiebot", + "id": 12242451, + "avatar_url": "https://avatars.githubusercontent.com/u/12242451?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/meggiebot", + "html_url": "https://github.com/meggiebot", + "followers_url": "https://api.github.com/users/meggiebot/followers", + "following_url": "https://api.github.com/users/meggiebot/following{/other_user}", + "gists_url": "https://api.github.com/users/meggiebot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/meggiebot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/meggiebot/subscriptions", + "organizations_url": "https://api.github.com/users/meggiebot/orgs", + "repos_url": "https://api.github.com/users/meggiebot/repos", + "events_url": "https://api.github.com/users/meggiebot/events{/privacy}", + "received_events_url": "https://api.github.com/users/meggiebot/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 31, + "closed_issues": 17, + "state": "open", + "created_at": "2016-05-24T15:11:11Z", + "updated_at": "2016-06-21T18:51:53Z", + "due_on": "2016-06-24T06:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2016-02-05T23:24:54Z", + "updated_at": "2016-06-09T00:34:31Z", + "closed_at": null, + "body": "This documentation for pip states that salt can use pip to update the salt minion on windows with salt: https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.pip.html\r\n\r\nThis is a complete lie. It doesn't work in any way and as far as I can tell, upgrading salt on windows from anything other than a full .msi file is impossible. I get lots of errors, the first of which (when using the exact command specified) is this: \r\n\r\n```\r\nsalt minion-name pip.install pkgs=[salt==2015.8.3] bin_env='c:\\salt\\bin\\scripts\\pip.exe' cwd='c:\\salt\\bin\\Scripts' upgrade=true\r\ndrowe-www-1:\r\n ----------\r\n pid:\r\n 3672\r\n retcode:\r\n 1\r\n stderr:\r\n You are using pip version 6.1.1, however version 8.0.2 is available.\r\n You should consider upgrading via the 'pip install --upgrade pip' command.\r\n c:\\salt\\bin\\lib\\site-packages\\pip\\_vendor\\requests\\packages\\urllib3\\util\\ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.\r\n InsecurePlatformWarning\r\n DEPRECATION: Uninstalling a distutils installed project (salt) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.\r\n Command \"c:\\salt\\bin\\python.exe -c \"import setuptools, tokenize;__file__='c:\\\\windows\\\\temp\\\\pip-build-8l1lyu\\\\salt\\\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record c:\\windows\\temp\\pip-ubhxtq-record\\install-record.txt --single-version-externally-managed --compile\" failed with error code 1 in c:\\windows\\temp\\pip-build-8l1lyu\\salt\r\n stdout:\r\n Collecting salt==2015.8.3\r\n Downloading salt-2015.8.3.tar.gz (6.8MB)\r\n Requirement already up-to-date: Jinja2 in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: msgpack-python>0.3 in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: PyYAML in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: MarkupSafe in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: requests>=1.0.0 in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: tornado>=4.2.1 in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: futures>=2.0 in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: WMI in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: pypiwin32>=219 in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: pyzmq>=2.2.0 in c:\\salt\\bin\\lib\\site-packages (from salt==2015.8.3)\r\n Requirement already up-to-date: backports.ssl-match-hostname in c:\\salt\\bin\\lib\\site-packages (from tornado>=4.2.1->salt==2015.8.3)\r\n Requirement already up-to-date: singledispatch in c:\\salt\\bin\\lib\\site-packages (from tornado>=4.2.1->salt==2015.8.3)\r\n Requirement already up-to-date: certifi in c:\\salt\\bin\\lib\\site-packages (from tornado>=4.2.1->salt==2015.8.3)\r\n Requirement already up-to-date: backports-abc>=0.4 in c:\\salt\\bin\\lib\\site-packages (from tornado>=4.2.1->salt==2015.8.3)\r\n Requirement already up-to-date: six in c:\\salt\\bin\\lib\\site-packages (from singledispatch->tornado>=4.2.1->salt==2015.8.3)\r\n Installing collected packages: salt\r\n Found existing installation: salt 2014.7.5\r\n Uninstalling salt-2014.7.5:\r\n Successfully uninstalled salt-2014.7.5\r\n Running setup.py install for salt\r\n Complete output from command c:\\salt\\bin\\python.exe -c \"import setuptools, tokenize;__file__='c:\\\\windows\\\\temp\\\\pip-build-8l1lyu\\\\salt\\\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\\r\\n', '\\n'), __file__, 'exec'))\" install --record c:\\windows\\temp\\pip-ubhxtq-record\\install-record.txt --single-version-externally-managed --compile:\r\n 2015.8.3\r\n\r\n running install\r\n\r\n running install-pycrypto-windows\r\n\r\n No handlers could be found for logger \"pip.utils\"\r\n\r\n error: [Error 2] The system cannot find the file specified\r\n\r\n\r\n ----------------------------------------\r\n Rolling back uninstall of salt\r\nERROR: Minions returned with non-zero exit code\r\n```\r\n\r\nI then tried upgrading salt by going directly to the windows box and using pip, which resulted in the same message and same problem. \r\n\r\nNext, I tried using easy_install -U salt==2015.8.3 and this worked! However the minion won't start and is complaining about not findig libeay32 \r\n```Traceback (most recent call last):\r\n File \"c:\\salt\\bin\\Scripts\\salt-minion\", line 4, in \r\n __import__('pkg_resources').run_script('salt==2015.8.3', 'salt-minion')\r\n File \"c:\\salt\\bin\\lib\\site-packages\\pkg_resources\\__init__.py\", line 723, in r\r\nun_script\r\n self.require(requires)[0].run_script(script_name, ns)\r\n File \"c:\\salt\\bin\\lib\\site-packages\\pkg_resources\\__init__.py\", line 1636, in\r\nrun_script\r\n exec(code, namespace, namespace)\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\EGG-INFO\\scripts\\s\r\nalt-minion\", line 26, in \r\n salt_minion()\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\scripts.py\",\r\nline 106, in salt_minion\r\n import salt.cli.daemons\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\cli\\daemons.p\r\ny\", line 47, in \r\n from salt.utils import parsers, ip_bracket\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\utils\\parsers\r\n.py\", line 26, in \r\n import salt.config as config\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\config.py\", l\r\nine 40, in \r\n import salt.utils.sdb\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\utils\\sdb.py\"\r\n, line 9, in \r\n import salt.loader\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\loader.py\", l\r\nine 30, in \r\n import salt.utils.event\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\utils\\event.p\r\ny\", line 81, in \r\n import salt.payload\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\payload.py\",\r\nline 17, in \r\n import salt.crypt\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\crypt.py\", li\r\nne 37, in \r\n import salt.utils.rsax931\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\utils\\rsax931\r\n.py\", line 69, in \r\n libcrypto = _init_libcrypto()\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\utils\\rsax931\r\n.py\", line 47, in _init_libcrypto\r\n libcrypto = _load_libcrypto()\r\n File \"c:\\salt\\bin\\lib\\site-packages\\salt-2015.8.3-py2.7.egg\\salt\\utils\\rsax931\r\n.py\", line 25, in _load_libcrypto\r\n return cdll.LoadLibrary('libeay32')\r\n File \"c:\\salt\\bin\\lib\\ctypes\\__init__.py\", line 443, in LoadLibrary\r\n return self._dlltype(name)\r\n File \"c:\\salt\\bin\\lib\\ctypes\\__init__.py\", line 365, in __init__\r\n self._handle = _dlopen(self._name, mode)\r\nWindowsError: [Error 126] The specified module could not be found```\r\n\r\nno problem, let's install pyopenssl! `pip install -U pyopenssl`\r\nThis gives the usual \"can't find vcvarsall.bat\" error with python packages. Not a problem, let's try again `pip install -U --only-binary pyopenssl` and this worked fine, however when starting the salt minion I still get the same error as I pasted above. \r\n\r\nMy conclusion is that the ONLY way to successfully update salt on windows machines is to write a state that downloads the installer to a specified directory and then also write a state that puts a powershell script in another directory that stops the salt minion, runs the installer, then starts the new salt minion. Please remove this lie about pip being able to upgrade the minion from your documentation.", + "score": 8.259684 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/3463", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/3463/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/3463/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/3463/events", + "html_url": "https://github.com/pypa/pip/issues/3463", + "id": 132017452, + "number": 3463, + "title": "Problems on Windows with username containing non-ASCII characters", + "user": { + "login": "pekkaklarck", + "id": 114985, + "avatar_url": "https://avatars.githubusercontent.com/u/114985?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pekkaklarck", + "html_url": "https://github.com/pekkaklarck", + "followers_url": "https://api.github.com/users/pekkaklarck/followers", + "following_url": "https://api.github.com/users/pekkaklarck/following{/other_user}", + "gists_url": "https://api.github.com/users/pekkaklarck/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pekkaklarck/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pekkaklarck/subscriptions", + "organizations_url": "https://api.github.com/users/pekkaklarck/orgs", + "repos_url": "https://api.github.com/users/pekkaklarck/repos", + "events_url": "https://api.github.com/users/pekkaklarck/events{/privacy}", + "received_events_url": "https://api.github.com/users/pekkaklarck/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/encoding", + "name": "encoding", + "color": "0052cc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 30, + "created_at": "2016-02-07T21:50:41Z", + "updated_at": "2016-05-23T09:53:51Z", + "closed_at": null, + "body": "When organizing a Python training recently, one participant failed to use pip after a fresh Python 2.7.11 installation on Windows. Quick investigation showed that the reason problem was `ä` in her username. We failed to workaround that even by creating a new account and needed to use `python setup.py install` instead.\r\n\r\nI now tried to reproduce the problem on my virtual machine. My main account there has only ASCII characters in the username but I created another for testing purposes. Clearly everything is not correct:\r\n\r\n```\r\nC:\\Users\\Ürjö>pip\r\nTraceback (most recent call last):\r\n File \"c:\\python27\\lib\\runpy.py\", line 162, in _run_module_as_main\r\n \"__main__\", fname, loader, pkg_name)\r\n File \"c:\\python27\\lib\\runpy.py\", line 72, in _run_code\r\n exec code in run_globals\r\n File \"C:\\Python27\\Scripts\\pip.exe\\__main__.py\", line 9, in \r\n File \"c:\\python27\\lib\\site-packages\\pip\\__init__.py\", line 210, in main\r\n cmd_name, cmd_args = parseopts(args)\r\n File \"c:\\python27\\lib\\site-packages\\pip\\__init__.py\", line 165, in parseopts\r\n parser.print_help()\r\n File \"c:\\python27\\lib\\optparse.py\", line 1670, in print_help\r\n file.write(self.format_help().encode(encoding, \"replace\"))\r\n File \"c:\\python27\\lib\\optparse.py\", line 1650, in format_help\r\n result.append(self.format_option_help(formatter))\r\n File \"c:\\python27\\lib\\optparse.py\", line 1633, in format_option_help\r\n result.append(group.format_help(formatter))\r\n File \"c:\\python27\\lib\\optparse.py\", line 1114, in format_help\r\n result += OptionContainer.format_help(self, formatter)\r\n File \"c:\\python27\\lib\\optparse.py\", line 1085, in format_help\r\n result.append(self.format_option_help(formatter))\r\n File \"c:\\python27\\lib\\optparse.py\", line 1074, in format_option_help\r\n result.append(formatter.format_option(option))\r\n File \"c:\\python27\\lib\\optparse.py\", line 316, in format_option\r\n help_text = self.expand_default(option)\r\n File \"c:\\python27\\lib\\site-packages\\pip\\baseparser.py\", line 112, in expand_default\r\n return optparse.IndentedHelpFormatter.expand_default(self, option)\r\n File \"c:\\python27\\lib\\optparse.py\", line 288, in expand_default\r\n return option.help.replace(self.default_tag, str(default_value))\r\nUnicodeEncodeError: 'ascii' codec can't encode character u'\\xdc' in position 9: ordinal not in range(128)\r\n```\r\n\r\nInterestingly installation and uninstallation seem to work fine also with this account. I guess the difference with the problem I saw earlier could be that my main user/admin doesn't have non-ASCII characters.", + "score": 4.352012 + }, + { + "url": "https://api.github.com/repos/google/grr/issues/331", + "repository_url": "https://api.github.com/repos/google/grr", + "labels_url": "https://api.github.com/repos/google/grr/issues/331/labels{/name}", + "comments_url": "https://api.github.com/repos/google/grr/issues/331/comments", + "events_url": "https://api.github.com/repos/google/grr/issues/331/events", + "html_url": "https://github.com/google/grr/issues/331", + "id": 132587611, + "number": 331, + "title": "Un-auditable dependencies in GRR code", + "user": { + "login": "darrenbilby", + "id": 5226094, + "avatar_url": "https://avatars.githubusercontent.com/u/5226094?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/darrenbilby", + "html_url": "https://github.com/darrenbilby", + "followers_url": "https://api.github.com/users/darrenbilby/followers", + "following_url": "https://api.github.com/users/darrenbilby/following{/other_user}", + "gists_url": "https://api.github.com/users/darrenbilby/gists{/gist_id}", + "starred_url": "https://api.github.com/users/darrenbilby/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/darrenbilby/subscriptions", + "organizations_url": "https://api.github.com/users/darrenbilby/orgs", + "repos_url": "https://api.github.com/users/darrenbilby/repos", + "events_url": "https://api.github.com/users/darrenbilby/events{/privacy}", + "received_events_url": "https://api.github.com/users/darrenbilby/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/google/grr/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 7, + "created_at": "2016-02-10T01:48:31Z", + "updated_at": "2016-02-26T23:11:51Z", + "closed_at": null, + "body": "We are acquiring a number of dependencies on external, unauditable blobs that are required for using GRR. While its true that we'll always depend on blobs of code, at least if they are tracked in a code repo users have an option to track the changes and updates. \r\n\r\nI don't think its a necessary state for the things we control, so would be great to start removing some of them, or at least justifying why they are there, from a brief look I found:\r\n\r\nServer debs on docs:\r\nhttps://github.com/google/grr/blob/master/scripts/install_script_ubuntu.sh#L21\r\n\r\nRekall component on apache server:\r\nhttp://images.rekall-forensic.com/share/rekall-core-1.5.0.tar.gz#egg=rekall-core-1.5\r\n\r\nChipsec component (chipsec fork tarball in docs): \r\n(relies on link in docs, fix in progress)\r\n\r\nmrgcastle Vagrant images vs upstream:\r\nhttps://github.com/google/grr/blob/master/vagrant/Vagrantfile#L14\r\n\r\n", + "score": 0.30881473 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/31280", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/31280/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/31280/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/31280/events", + "html_url": "https://github.com/saltstack/salt/issues/31280", + "id": 134367130, + "number": 31280, + "title": "salt-call state.highstate exiting with \"Exiting gracefully on Ctrl-c\" message", + "user": { + "login": "rambli", + "id": 934811, + "avatar_url": "https://avatars.githubusercontent.com/u/934811?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rambli", + "html_url": "https://github.com/rambli", + "followers_url": "https://api.github.com/users/rambli/followers", + "following_url": "https://api.github.com/users/rambli/following{/other_user}", + "gists_url": "https://api.github.com/users/rambli/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rambli/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rambli/subscriptions", + "organizations_url": "https://api.github.com/users/rambli/orgs", + "repos_url": "https://api.github.com/users/rambli/repos", + "events_url": "https://api.github.com/users/rambli/events{/privacy}", + "received_events_url": "https://api.github.com/users/rambli/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P3", + "name": "P3", + "color": "0a3d77" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Platform", + "name": "Platform", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Windows", + "name": "Windows", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/13", + "html_url": "https://github.com/saltstack/salt/milestones/Approved", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/13/labels", + "id": 9265, + "number": 13, + "title": "Approved", + "description": "All issues that are ready to be worked on, both bugs and features.", + "creator": { + "login": "thatch45", + "id": 507599, + "avatar_url": "https://avatars.githubusercontent.com/u/507599?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/thatch45", + "html_url": "https://github.com/thatch45", + "followers_url": "https://api.github.com/users/thatch45/followers", + "following_url": "https://api.github.com/users/thatch45/following{/other_user}", + "gists_url": "https://api.github.com/users/thatch45/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thatch45/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thatch45/subscriptions", + "organizations_url": "https://api.github.com/users/thatch45/orgs", + "repos_url": "https://api.github.com/users/thatch45/repos", + "events_url": "https://api.github.com/users/thatch45/events{/privacy}", + "received_events_url": "https://api.github.com/users/thatch45/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 3040, + "closed_issues": 3781, + "state": "open", + "created_at": "2011-05-14T04:00:56Z", + "updated_at": "2016-06-21T19:49:47Z", + "due_on": null, + "closed_at": null + }, + "comments": 8, + "created_at": "2016-02-17T18:55:35Z", + "updated_at": "2016-02-19T19:28:22Z", + "closed_at": null, + "body": "I'm facing the following issue running a highstate command with a very simple top file:\r\nSalt version: 2015.8.5 (Beryllium)\r\nHost: Windows 2012R2 VM \r\nSingle minion running in masterless mode\r\n\r\n```\r\nC:\\salt\\srv\\salt>salt-call state.highstate -l debug --local\r\n[DEBUG ] Reading configuration from c:\\salt\\conf\\minion\r\n[DEBUG ] Using cached minion ID from c:\\salt\\conf\\minion_id: WIN-M9GCE6IBR1K.xyz.net\r\n[DEBUG ] Configuration file path: c:\\salt\\conf\\minion\r\n[WARNING ] Insecure logging configuration detected! Sensitive data may be logged\r\n.\r\n[DEBUG ] Reading configuration from c:\\salt\\conf\\minion\r\n[DEBUG ] LazyLoaded jinja.render\r\n[DEBUG ] LazyLoaded yaml.render\r\n[DEBUG ] LazyLoaded jinja.render\r\n[DEBUG ] LazyLoaded yaml.render\r\n[DEBUG ] LazyLoaded state.highstate\r\n[DEBUG ] LazyLoaded grains.get\r\n[DEBUG ] LazyLoaded saltutil.is_running\r\n[DEBUG ] LazyLoaded roots.envs\r\n\r\nExiting gracefully on Ctrl-c\r\n```\r\n\r\nUpon digging into salt code by following trace output, turns out saltutil.is_running check is the issue. I verified that upon commenting the state function running check below, my top.sls gets properly processed on a highstate call.\r\n```\r\nsalt/modules/state.py: Line 119\r\nactive = __salt__['saltutil.is_running']('state.*')\r\n```\r\nEven running this raises the \"Exiting gracefully..\" message:\r\n```\r\n$> salt-call saltutil.is_running state.highstate\r\nlocal:\r\nExiting gracefully on Ctrl-c\r\n```\r\nI am digging in further to find out why **attempting to get list of running jobs on this minion is raising a KeyboardInterrupt exception**. Any ideas why checking state with saltutil.is_running is raising this error?\r\n\r\nAlthough I'm fairly certain my state files have nothing to do with this issue, here they are for reference:\r\ntop.sls:\r\n```\r\nbase:\r\n '*':\r\n - service\r\n```\r\n\r\nservice.sls:\r\n```\r\nPower:\r\n service.running:\r\n - enable: True\r\n - reload: True\r\n```\r\n\r\nSalt version info:\r\n```\r\nSalt Version:\r\n Salt: 2015.8.5\r\n\r\nDependency Versions:\r\n Jinja2: 2.8\r\n M2Crypto: Not Installed\r\n Mako: Not Installed\r\n PyYAML: 3.11\r\n PyZMQ: 15.2.0\r\n Python: 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64 bit (AMD6\r\n4)]\r\n RAET: Not Installed\r\n Tornado: 4.3\r\n ZMQ: 4.1.2\r\n cffi: 1.5.0\r\n cherrypy: Not Installed\r\n dateutil: Not Installed\r\n gitdb: 0.6.4\r\n gitpython: 1.0.1\r\n ioflo: Not Installed\r\n libgit2: Not Installed\r\n libnacl: 1.4.4\r\n msgpack-pure: Not Installed \r\n msgpack-python: 0.4.7\r\n mysql-python: Not Installed\r\n pycparser: 2.14\r\n pycrypto: 2.6.1\r\n pygit2: Not Installed\r\n python-gnupg: Not Installed\r\n smmap: 0.9.0\r\n timelib: Not Installed\r\n\r\nSystem Versions:\r\n dist:\r\n machine: AMD64\r\n release: 2012Server\r\n system: 2012Server 6.2.9200 Multiprocessor Free\r\n```", + "score": 0.6579218 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12424", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12424/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12424/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12424/events", + "html_url": "https://github.com/pydata/pandas/issues/12424", + "id": 135704250, + "number": 12424, + "title": "pd.to_datetime raises AttributeError with specific inputs when errors='ignore'", + "user": { + "login": "aktiur", + "id": 1560652, + "avatar_url": "https://avatars.githubusercontent.com/u/1560652?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aktiur", + "html_url": "https://github.com/aktiur", + "followers_url": "https://api.github.com/users/aktiur/followers", + "following_url": "https://api.github.com/users/aktiur/following{/other_user}", + "gists_url": "https://api.github.com/users/aktiur/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aktiur/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aktiur/subscriptions", + "organizations_url": "https://api.github.com/users/aktiur/orgs", + "repos_url": "https://api.github.com/users/aktiur/repos", + "events_url": "https://api.github.com/users/aktiur/events{/privacy}", + "received_events_url": "https://api.github.com/users/aktiur/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Novice", + "name": "Difficulty Novice", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Timeseries", + "name": "Timeseries", + "color": "AFEEEE" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2016-02-23T10:57:08Z", + "updated_at": "2016-02-23T14:22:26Z", + "closed_at": null, + "body": "I'm trying to import a csv file into a PostgreSQL table using [odo](https://github.com/blaze/odo). During import, `odo` tries to automatically detect date columns using `pd.to_datetime` with `errors='ignore'`. However, with one of my columns (that isn't a date column, it's some kind of zip code), `pd.to_datetime` raises an AttributeError.\r\n\r\nI have been able to narrow down the problem to this small snippet:\r\n\r\n >>> pd.to_datetime(pd.Series(['01210', np.nan]), errors='ignore')\r\n Traceback (most recent call last):\r\n File \"pandas\\tslib.pyx\", line 1952, in pandas.tslib.array_to_datetime (pandas\\tslib.c:35219)\r\n File \"pandas\\tslib.pyx\", line 1432, in pandas.tslib._check_dts_bounds (pandas\\tslib.c:26809)\r\n pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1210-01-01 00:00:00\r\n\r\n During handling of the above exception, another exception occurred:\r\n\r\n Traceback (most recent call last):\r\n File \"pandas\\tslib.pyx\", line 1981, in pandas.tslib.array_to_datetime (pandas\\tslib.c:35724)\r\n File \"pandas\\tslib.pyx\", line 1975, in pandas.tslib.array_to_datetime (pandas\\tslib.c:35602)\r\n File \"pandas\\tslib.pyx\", line 1228, in pandas.tslib.convert_to_tsobject (pandas\\tslib.c:23563)\r\n File \"pandas\\tslib.pyx\", line 1432, in pandas.tslib._check_dts_bounds (pandas\\tslib.c:26809)\r\n pandas.tslib.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1210-01-01 00:00:00\r\n\r\n During handling of the above exception, another exception occurred:\r\n\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"C:\\Miniconda3\\envs\\py35\\lib\\site-packages\\pandas\\util\\decorators.py\", line 89, in wrapper\r\n return func(*args, **kwargs)\r\n File \"C:\\Miniconda3\\envs\\py35\\lib\\site-packages\\pandas\\tseries\\tools.py\", line 276, in to_datetime\r\n unit=unit, infer_datetime_format=infer_datetime_format)\r\n File \"C:\\Miniconda3\\envs\\py35\\lib\\site-packages\\pandas\\tseries\\tools.py\", line 390, in _to_datetime\r\n values = _convert_listlike(arg._values, False, format)\r\n File \"C:\\Miniconda3\\envs\\py35\\lib\\site-packages\\pandas\\tseries\\tools.py\", line 372, in _convert_listlike\r\n require_iso8601=require_iso8601)\r\n File \"pandas\\tslib.pyx\", line 1847, in pandas.tslib.array_to_datetime (pandas\\tslib.c:37155)\r\n File \"pandas\\tslib.pyx\", line 2005, in pandas.tslib.array_to_datetime (pandas\\tslib.c:36116)\r\n AttributeError: 'float' object has no attribute 'view'\r\n#### output of ``pd.show_versions()``\r\n\r\n INSTALLED VERSIONS\r\n ------------------\r\n commit: None\r\n python: 3.5.1.final.0\r\n python-bits: 64\r\n OS: Windows\r\n OS-release: 10\r\n machine: AMD64\r\n processor: Intel64 Family 6 Model 61 Stepping 4, GenuineIntel\r\n byteorder: little\r\n LC_ALL: None\r\n LANG: None\r\n\r\n pandas: 0.17.1\r\n nose: None\r\n pip: 8.0.2\r\n setuptools: 19.6.2\r\n Cython: None\r\n numpy: 1.10.1\r\n scipy: 0.16.0\r\n statsmodels: None\r\n IPython: 4.0.1\r\n sphinx: 1.3.1\r\n patsy: None\r\n dateutil: 2.4.2\r\n pytz: 2015.7\r\n blosc: None\r\n bottleneck: None\r\n tables: None\r\n numexpr: None\r\n matplotlib: 1.5.0\r\n openpyxl: None\r\n xlrd: None\r\n xlwt: None\r\n xlsxwriter: None\r\n lxml: None\r\n bs4: None\r\n html5lib: None\r\n httplib2: None\r\n apiclient: None\r\n sqlalchemy: None\r\n pymysql: None\r\n psycopg2: 2.6.1 (dt dec pq3 ext lo64)\r\n Jinja2: 2.8", + "score": 0.45896894 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12433", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12433/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12433/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12433/events", + "html_url": "https://github.com/pydata/pandas/issues/12433", + "id": 135919099, + "number": 12433, + "title": "Panel resample fails for degenerate panels", + "user": { + "login": "killchr", + "id": 17442238, + "avatar_url": "https://avatars.githubusercontent.com/u/17442238?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/killchr", + "html_url": "https://github.com/killchr", + "followers_url": "https://api.github.com/users/killchr/followers", + "following_url": "https://api.github.com/users/killchr/following{/other_user}", + "gists_url": "https://api.github.com/users/killchr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/killchr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/killchr/subscriptions", + "organizations_url": "https://api.github.com/users/killchr/orgs", + "repos_url": "https://api.github.com/users/killchr/repos", + "events_url": "https://api.github.com/users/killchr/events{/privacy}", + "received_events_url": "https://api.github.com/users/killchr/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Medium", + "name": "Effort Medium", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Resample", + "name": "Resample", + "color": "207de5" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Reshaping", + "name": "Reshaping", + "color": "02d7e1" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2016-02-24T01:16:08Z", + "updated_at": "2016-04-18T18:19:08Z", + "closed_at": null, + "body": "#### Code Sample, a copy-pastable example if possible\r\n```\r\nimport numpy as np\r\nimport pandas as pd\r\n\r\ndr = pd.date_range('20100101','20151231',freq='T')\r\np1 = pd.Panel(items = dr, data=np.random.randn(len(dr),3,3))\r\n#this works\r\np2 = p1.resample('D', axis=0, how='last')\r\np3 = pd.Panel(items = dr, data=np.random.randn(len(dr),1,1))\r\n#this causes an error\r\np4 = p3.resample('D', axis=0, how='last')\r\n```\r\n\r\n#### Expected Output\r\n\r\n#### output of ``pd.show_versions()``\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 3.5.1.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.17.1\r\nnose: 1.3.7\r\npip: 8.0.2\r\nsetuptools: 19.6.2\r\nCython: 0.23.4\r\nnumpy: 1.10.4\r\nscipy: 0.17.0\r\nstatsmodels: 0.6.1\r\nIPython: None\r\nsphinx: 1.3.1\r\npatsy: 0.4.0\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: 1.0.0\r\ntables: 3.2.2\r\nnumexpr: 2.4.6\r\nmatplotlib: 1.5.1\r\nopenpyxl: 2.3.2\r\nxlrd: 0.9.4\r\nxlwt: 1.0.0\r\nxlsxwriter: 0.8.4\r\nlxml: 3.5.0\r\nbs4: 4.4.1\r\nhtml5lib: None\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: 1.0.11\r\npymysql: None\r\npsycopg2: None\r\nJinja2: 2.8\r\n", + "score": 0.79762477 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/3509", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/3509/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/3509/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/3509/events", + "html_url": "https://github.com/pypa/pip/issues/3509", + "id": 136044945, + "number": 3509, + "title": "pip --isolated doesn't work for certain packages", + "user": { + "login": "TheFriendlyCoder", + "id": 5114350, + "avatar_url": "https://avatars.githubusercontent.com/u/5114350?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/TheFriendlyCoder", + "html_url": "https://github.com/TheFriendlyCoder", + "followers_url": "https://api.github.com/users/TheFriendlyCoder/followers", + "following_url": "https://api.github.com/users/TheFriendlyCoder/following{/other_user}", + "gists_url": "https://api.github.com/users/TheFriendlyCoder/gists{/gist_id}", + "starred_url": "https://api.github.com/users/TheFriendlyCoder/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/TheFriendlyCoder/subscriptions", + "organizations_url": "https://api.github.com/users/TheFriendlyCoder/orgs", + "repos_url": "https://api.github.com/users/TheFriendlyCoder/repos", + "events_url": "https://api.github.com/users/TheFriendlyCoder/events{/privacy}", + "received_events_url": "https://api.github.com/users/TheFriendlyCoder/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/setuptools", + "name": "setuptools", + "color": "0052cc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 11, + "created_at": "2016-02-24T12:19:46Z", + "updated_at": "2016-02-26T07:25:50Z", + "closed_at": null, + "body": "I recently tried ran into problems downloading and installing Python packages which, after a great deal of time and effort, I have isolated to a bug with the --isolated command line option. In short, it would appear that when you perform operations with PIP using this option, a unique parameter is handed off to the distutils package which is invalid: --no-user-cfg.\r\n\r\nIn my case I'm running on a Windows 7 environment, using Python 3.2, PIP v7.1.2 and the latest version of setuptools v20.0. For a very simple use case consider the following:\r\n\r\n 1. install Python 3.2 (32 and 64bit both seem to behave the same)\r\n 2. install PIP 7.1.2 (ie: download the get-pip.py from the PIP website and do a \"python get-pip.py \"pip<8\")\r\n 3. try installing a package such as \"coverage\" using the isolated flag (ie: pip --isolated install coverage)\r\n\r\n**Results:** you will get an odd-looking error message that looks like this:\r\n\r\n> Collecting coverage\r\n> Downloading coverage-4.0.3.tar.gz (354kB)\r\n> 100% |################################| 356kB 3.7MB/s\r\n> Complete output from command python setup.py egg_info:\r\n> usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]\r\n> or: -c --help [cmd1 cmd2 ...]\r\n> or: -c --help-commands\r\n> or: -c cmd --help\r\n> \r\n> error: option --no-user-cfg not recognized\r\n\r\nConversely, if you attempt the install without the \"--isolated\" flag, the operation completes successfully.\r\n\r\nAfter doing some digging I've isolated the problem to lines 174-177 in the \"distutils_scheme\" function found in the \"Lib\\site-packages\\pip\\locations.py\" script which look as follows:\r\n\r\n```\r\n if isolated:\r\n extra_dist_args = {\"script_args\": [\"--no-user-cfg\"]}\r\n else:\r\n extra_dist_args = {}\r\n```\r\n\r\nIt would appear that, when this option is set it passes along a \"--no-user-cfg\" option to the distutils package which, according to the error output, is not a valid option supported by distutils.\r\n\r\nThis error doesn't occur for all Python packages, but I have reproduced it on several. If I'm not mistaken the commonality between all of them is that they are all tar-balls containing source projects that then have certain \"egg\" operations performed on them. Perhaps this will help further isolate and repair the issue.\r\n\r\nBelow are a list of several of the other packages I've reproduced this problem with:\r\n\r\n- coverage v4.0.3 (needed by pytest-cov)\r\n- lazy-object-proxy v1.2.1 (needed by astroid 1.1.1, a transitive dependency of PyLint)\r\n- Jinja2 v2.6 (needed by sphinx)\r\n- MarkupSafe (needed by Jinja2 v2.8)\r\n- logilab-common\r\n- PyLint v1.3.1 (last version of PyLint to officially support Python 3.2)\r\n\r\nNeedless to say, many of the very common Python packages used by anyone under these conditions will be completely unusable. As such I'd strongly encourage you to escalate this issue so it can be fixed sooner rather than later.\r\n", + "score": 5.8890653 + }, + { + "url": "https://api.github.com/repos/mkdocs/mkdocs/issues/842", + "repository_url": "https://api.github.com/repos/mkdocs/mkdocs", + "labels_url": "https://api.github.com/repos/mkdocs/mkdocs/issues/842/labels{/name}", + "comments_url": "https://api.github.com/repos/mkdocs/mkdocs/issues/842/comments", + "events_url": "https://api.github.com/repos/mkdocs/mkdocs/issues/842/events", + "html_url": "https://github.com/mkdocs/mkdocs/issues/842", + "id": 136454605, + "number": 842, + "title": "Images in subpages names index.md have the incorrect path on Windows", + "user": { + "login": "styfle", + "id": 229881, + "avatar_url": "https://avatars.githubusercontent.com/u/229881?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/styfle", + "html_url": "https://github.com/styfle", + "followers_url": "https://api.github.com/users/styfle/followers", + "following_url": "https://api.github.com/users/styfle/following{/other_user}", + "gists_url": "https://api.github.com/users/styfle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/styfle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/styfle/subscriptions", + "organizations_url": "https://api.github.com/users/styfle/orgs", + "repos_url": "https://api.github.com/users/styfle/repos", + "events_url": "https://api.github.com/users/styfle/events{/privacy}", + "received_events_url": "https://api.github.com/users/styfle/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/mkdocs/mkdocs/labels/Bug", + "name": "Bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/mkdocs/mkdocs/milestones/10", + "html_url": "https://github.com/mkdocs/mkdocs/milestones/0.16", + "labels_url": "https://api.github.com/repos/mkdocs/mkdocs/milestones/10/labels", + "id": 1727187, + "number": 10, + "title": "0.16", + "description": "", + "creator": { + "login": "d0ugal", + "id": 48211, + "avatar_url": "https://avatars.githubusercontent.com/u/48211?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/d0ugal", + "html_url": "https://github.com/d0ugal", + "followers_url": "https://api.github.com/users/d0ugal/followers", + "following_url": "https://api.github.com/users/d0ugal/following{/other_user}", + "gists_url": "https://api.github.com/users/d0ugal/gists{/gist_id}", + "starred_url": "https://api.github.com/users/d0ugal/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/d0ugal/subscriptions", + "organizations_url": "https://api.github.com/users/d0ugal/orgs", + "repos_url": "https://api.github.com/users/d0ugal/repos", + "events_url": "https://api.github.com/users/d0ugal/events{/privacy}", + "received_events_url": "https://api.github.com/users/d0ugal/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 14, + "closed_issues": 7, + "state": "open", + "created_at": "2016-04-24T10:08:16Z", + "updated_at": "2016-06-11T23:17:28Z", + "due_on": null, + "closed_at": null + }, + "comments": 26, + "created_at": "2016-02-25T17:26:20Z", + "updated_at": "2016-04-27T07:54:16Z", + "closed_at": null, + "body": "I am using the following markdown in `index.md` and running `mkdocs serve`\r\n\r\n```md\r\n## Diagram\r\nThis is the svg\r\n![svg](diagram.svg)\r\n```\r\n\r\nThe output is correct\r\n\r\n```html\r\n\"svg\"

\r\n```\r\n\r\nHowever I get a broken image as seen below\r\n\r\n![image](https://cloud.githubusercontent.com/assets/229881/13328070/b29facb0-dbba-11e5-8629-61b6b2345a8d.png)\r\n\r\nIt appears that the svg file is served as `application/octet-stream` instead of the expected `image/svg+xml`", + "score": 2.6919413 + }, + { + "url": "https://api.github.com/repos/Alfanous-team/alfanous/issues/463", + "repository_url": "https://api.github.com/repos/Alfanous-team/alfanous", + "labels_url": "https://api.github.com/repos/Alfanous-team/alfanous/issues/463/labels{/name}", + "comments_url": "https://api.github.com/repos/Alfanous-team/alfanous/issues/463/comments", + "events_url": "https://api.github.com/repos/Alfanous-team/alfanous/issues/463/events", + "html_url": "https://github.com/Alfanous-team/alfanous/issues/463", + "id": 137118470, + "number": 463, + "title": "django app fail", + "user": { + "login": "ATouhou", + "id": 6802820, + "avatar_url": "https://avatars.githubusercontent.com/u/6802820?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ATouhou", + "html_url": "https://github.com/ATouhou", + "followers_url": "https://api.github.com/users/ATouhou/followers", + "following_url": "https://api.github.com/users/ATouhou/following{/other_user}", + "gists_url": "https://api.github.com/users/ATouhou/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ATouhou/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ATouhou/subscriptions", + "organizations_url": "https://api.github.com/users/ATouhou/orgs", + "repos_url": "https://api.github.com/users/ATouhou/repos", + "events_url": "https://api.github.com/users/ATouhou/events{/privacy}", + "received_events_url": "https://api.github.com/users/ATouhou/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/Alfanous-team/alfanous/labels/bug", + "name": "bug", + "color": "FF0000" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "assem-ch", + "id": 315228, + "avatar_url": "https://avatars.githubusercontent.com/u/315228?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/assem-ch", + "html_url": "https://github.com/assem-ch", + "followers_url": "https://api.github.com/users/assem-ch/followers", + "following_url": "https://api.github.com/users/assem-ch/following{/other_user}", + "gists_url": "https://api.github.com/users/assem-ch/gists{/gist_id}", + "starred_url": "https://api.github.com/users/assem-ch/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/assem-ch/subscriptions", + "organizations_url": "https://api.github.com/users/assem-ch/orgs", + "repos_url": "https://api.github.com/users/assem-ch/repos", + "events_url": "https://api.github.com/users/assem-ch/events{/privacy}", + "received_events_url": "https://api.github.com/users/assem-ch/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 5, + "created_at": "2016-02-29T00:47:17Z", + "updated_at": "2016-06-03T01:38:29Z", + "closed_at": null, + "body": "Assalamu aleykoum wa rahmatullahi wa barakatuh my beloved brothers.\r\nI just tried setting it up localhost and after a whole bunch of problems (there is a lot extra things that has to be installed that is not listed in your walkthrough/guide\"), I get this error:\r\n\r\n![image](https://cloud.githubusercontent.com/assets/6802820/13383200/5970f40e-de86-11e5-8e1c-6048d7df807d.png)\r\n\r\n\r\nany ideas?", + "score": 1.0350043 + }, + { + "url": "https://api.github.com/repos/jtpereyda/boofuzz/issues/39", + "repository_url": "https://api.github.com/repos/jtpereyda/boofuzz", + "labels_url": "https://api.github.com/repos/jtpereyda/boofuzz/issues/39/labels{/name}", + "comments_url": "https://api.github.com/repos/jtpereyda/boofuzz/issues/39/comments", + "events_url": "https://api.github.com/repos/jtpereyda/boofuzz/issues/39/events", + "html_url": "https://github.com/jtpereyda/boofuzz/issues/39", + "id": 137388611, + "number": 39, + "title": "Binary Install for Windows Not Applicable", + "user": { + "login": "jtpereyda", + "id": 244969, + "avatar_url": "https://avatars.githubusercontent.com/u/244969?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jtpereyda", + "html_url": "https://github.com/jtpereyda", + "followers_url": "https://api.github.com/users/jtpereyda/followers", + "following_url": "https://api.github.com/users/jtpereyda/following{/other_user}", + "gists_url": "https://api.github.com/users/jtpereyda/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jtpereyda/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jtpereyda/subscriptions", + "organizations_url": "https://api.github.com/users/jtpereyda/orgs", + "repos_url": "https://api.github.com/users/jtpereyda/repos", + "events_url": "https://api.github.com/users/jtpereyda/events{/privacy}", + "received_events_url": "https://api.github.com/users/jtpereyda/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/jtpereyda/boofuzz/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2016-02-29T21:53:58Z", + "updated_at": "2016-02-29T21:55:10Z", + "closed_at": null, + "body": "The latest wheel doesn't have Windows binaries.\r\n\r\nThis might not be worth maintaining, in which case the quick fix is to remove the binary subsection from INSTALL.rst.", + "score": 5.4619317 + }, + { + "url": "https://api.github.com/repos/dateutil/dateutil/issues/197", + "repository_url": "https://api.github.com/repos/dateutil/dateutil", + "labels_url": "https://api.github.com/repos/dateutil/dateutil/issues/197/labels{/name}", + "comments_url": "https://api.github.com/repos/dateutil/dateutil/issues/197/comments", + "events_url": "https://api.github.com/repos/dateutil/dateutil/issues/197/events", + "html_url": "https://github.com/dateutil/dateutil/issues/197", + "id": 137565438, + "number": 197, + "title": "utcoffset crash on Windows with EPOCH and tzlocal for timezone GMT+x", + "user": { + "login": "ggtools", + "id": 547260, + "avatar_url": "https://avatars.githubusercontent.com/u/547260?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ggtools", + "html_url": "https://github.com/ggtools", + "followers_url": "https://api.github.com/users/ggtools/followers", + "following_url": "https://api.github.com/users/ggtools/following{/other_user}", + "gists_url": "https://api.github.com/users/ggtools/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ggtools/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ggtools/subscriptions", + "organizations_url": "https://api.github.com/users/ggtools/orgs", + "repos_url": "https://api.github.com/users/ggtools/repos", + "events_url": "https://api.github.com/users/ggtools/events{/privacy}", + "received_events_url": "https://api.github.com/users/ggtools/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/dateutil/dateutil/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/dateutil/dateutil/labels/time%20zones", + "name": "time zones", + "color": "c7def8" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/dateutil/dateutil/milestones/4", + "html_url": "https://github.com/dateutil/dateutil/milestones/Bugfix%20release", + "labels_url": "https://api.github.com/repos/dateutil/dateutil/milestones/4/labels", + "id": 1299444, + "number": 4, + "title": "Bugfix release", + "description": "This is a tracking milestone for an unspecified bugfix release. It indicates that a given issue or PR can be included on the next point release.", + "creator": { + "login": "pganssle", + "id": 1377457, + "avatar_url": "https://avatars.githubusercontent.com/u/1377457?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pganssle", + "html_url": "https://github.com/pganssle", + "followers_url": "https://api.github.com/users/pganssle/followers", + "following_url": "https://api.github.com/users/pganssle/following{/other_user}", + "gists_url": "https://api.github.com/users/pganssle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pganssle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pganssle/subscriptions", + "organizations_url": "https://api.github.com/users/pganssle/orgs", + "repos_url": "https://api.github.com/users/pganssle/repos", + "events_url": "https://api.github.com/users/pganssle/events{/privacy}", + "received_events_url": "https://api.github.com/users/pganssle/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 15, + "closed_issues": 3, + "state": "open", + "created_at": "2015-09-10T14:22:04Z", + "updated_at": "2016-05-25T22:34:44Z", + "due_on": null, + "closed_at": null + }, + "comments": 17, + "created_at": "2016-03-01T12:46:19Z", + "updated_at": "2016-03-06T15:08:36Z", + "closed_at": null, + "body": "My local time zone is Europe/Paris and I noticed that on Windows the following operation crashed:\r\n\r\n >>> datetime.fromtimestamp(0,tz.tzlocal())\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"C:\\Anaconda3\\lib\\site-packages\\dateutil\\tz.py\", line 99, in utcoffset\r\n if self._isdst(dt):\r\n File \"C:\\Anaconda3\\lib\\site-packages\\dateutil\\tz.py\", line 143, in _isdst\r\n return time.localtime(timestamp+time.timezone).tm_isdst\r\n OSError: [Errno 22] Invalid argument\r\n\r\nThe same on Linux is working fine.\r\n\r\nLooking at the code I discovered that the issue is caused by the call to `time.localtime()` with `-3600` as argument. This is working fine on Linux but not on Windows.", + "score": 2.3784502 + }, + { + "url": "https://api.github.com/repos/conda/conda/issues/2152", + "repository_url": "https://api.github.com/repos/conda/conda", + "labels_url": "https://api.github.com/repos/conda/conda/issues/2152/labels{/name}", + "comments_url": "https://api.github.com/repos/conda/conda/issues/2152/comments", + "events_url": "https://api.github.com/repos/conda/conda/issues/2152/events", + "html_url": "https://github.com/conda/conda/issues/2152", + "id": 137679298, + "number": 2152, + "title": "Cannot create environment on Windows 7 x64", + "user": { + "login": "pbowyer", + "id": 89852, + "avatar_url": "https://avatars.githubusercontent.com/u/89852?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/pbowyer", + "html_url": "https://github.com/pbowyer", + "followers_url": "https://api.github.com/users/pbowyer/followers", + "following_url": "https://api.github.com/users/pbowyer/following{/other_user}", + "gists_url": "https://api.github.com/users/pbowyer/gists{/gist_id}", + "starred_url": "https://api.github.com/users/pbowyer/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/pbowyer/subscriptions", + "organizations_url": "https://api.github.com/users/pbowyer/orgs", + "repos_url": "https://api.github.com/users/pbowyer/repos", + "events_url": "https://api.github.com/users/pbowyer/events{/privacy}", + "received_events_url": "https://api.github.com/users/pbowyer/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/conda/conda/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/conda/conda/labels/Windows", + "name": "Windows", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 3, + "created_at": "2016-03-01T20:35:00Z", + "updated_at": "2016-03-10T06:06:57Z", + "closed_at": null, + "body": "This is similar to #1936 but isn't resolved by #2083. I'm trying to create an environment - the 'root' install is working great:\r\n\r\n```\r\n$ conda create --name hotbar --file environment_win64.yml\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/affine-1.2.0-py27_0.tar.bz2\r\nFetching package metadata: .\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/bokeh-0.11.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/boto-2.39.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/click-6.3-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/cligj-0.2.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/curl-7.45.0-vc9_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/cycler-0.9.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/cython-0.23.4-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/enum34-1.1.2-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/flask-0.10.1-py27_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/futures-3.0.3-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/gdal-2.0.0-py27_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/geos-3.4.2-vc9_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/h5py-2.5.0-np110py27_4.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/hdf4-4.2.11-0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/hdf5-1.8.15.1-vc9_4.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/ipykernel-4.2.2-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/ipython-4.0.3-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/ipython-notebook-4.0.4-py27_3.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/ipython-qtconsole-4.0.1-py27_4.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/ipython_genutils-0.1.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/ipywidgets-4.1.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/jedi-0.9.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/jinja2-2.8-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/jpeg-8d-vc9_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/jupyter-1.0.0-py27_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/jupyter_client-4.1.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/jupyter_console-4.1.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/jupyter_core-4.0.6-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/kealib-1.4.5-vc9_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/krb5-1.13.2-0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/libgdal-2.0.0-vc9_2.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/libnetcdf-4.3.3.1-vc9_5.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/libpng-1.6.17-vc9_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/libsodium-1.0.3-0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/libtiff-4.0.6-vc9_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/llvmlite-0.8.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/lxml-3.5.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/markupsafe-0.23-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/matplotlib-1.5.1-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/mkl-11.3.1-0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/mkl-service-1.1.2-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/msvc_runtime-1.0.1-vc9_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/nbconvert-4.1.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/nbformat-4.0.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/nose-1.3.7-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/notebook-4.1.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/numba-0.23.1-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/numexpr-2.4.6-np110py27_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/numpy-1.10.4-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/odo-0.4.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pandas-0.17.1-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/path.py-8.1.2-py27_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/patsy-0.4.0-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pep8-1.7.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pip-8.0.2-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/proj4-4.9.1-vc9_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/py-1.4.31-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pyasn1-0.1.9-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pyparsing-2.0.3-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pyqt-4.11.4-py27_5.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pyreadline-2.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pytest-2.8.5-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/python-2.7.11-2.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/python-dateutil-2.4.2-py27_0.tar.bz2\r\nFetching: https://conda.anaconda.org/robintw/win-64/python-fmask-0.2.1-py27_1.tar.bz2\r\nFetching package metadata: .\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pytz-2015.7-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/pyzmq-15.2.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/qt-4.8.7-vc9_6.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/qtconsole-4.1.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/rasterio-0.25.0-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/requests-2.9.1-py27_0.tar.bz2\r\nFetching: https://conda.anaconda.org/robintw/win-64/rios-1.4.2-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/scikit-image-0.11.3-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/scikit-learn-0.17-np110py27_2.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/scipy-0.17.0-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/setuptools-20.1.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/sip-4.16.9-py27_2.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/six-1.10.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/snuggs-1.3.1-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/sockjs-tornado-1.0.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/ssl_match_hostname-3.4.0.2-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/statsmodels-0.6.1-np110py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/sympy-0.7.6.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/tk-8.5.18-vc9_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/tornado-4.3-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/traitlets-4.1.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/unicodecsv-0.14.1-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/werkzeug-0.11.3-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/wheel-0.29.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/xerces-c-3.1.2-vc9_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/xlrd-0.9.4-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/xlsxwriter-0.8.4-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/xlwings-0.6.4-py27_1.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/xlwt-1.0.0-py27_0.tar.bz2\r\nFetching: https://repo.continuum.io/pkgs/free/win-64/zlib-1.2.8-vc9_2.tar.bz2\r\n[ COMPLETE ]|##################################################| 100%\r\nExtracting packages ...\r\nAn unexpected error has occurred, please consider sending the | 65%\r\nfollowing traceback to the conda GitHub issue tracker at:\r\n\r\n https://github.com/conda/conda/issues\r\n\r\nInclude the output of the command 'conda info' in your report.\r\n\r\n\r\nTraceback (most recent call last):\r\n File \"C:\\Anaconda2\\Scripts\\conda-script.py\", line 4, in \r\n sys.exit(main())\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\cli\\main.py\", line 173, in main\r\n args_func(args, p)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\cli\\main.py\", line 180, in args_func\r\n args.func(args, p)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\cli\\main_create.py\", line 49, in execute\r\n install.install(args, parser, 'create')\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\cli\\install.py\", line 173, in install\r\n misc.explicit(specs, prefix)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\misc.py\", line 92, in explicit\r\n force_extract_and_link(dists, prefix, verbose=verbose)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\misc.py\", line 55, in force_extract_and_link\r\n execute_actions(actions, verbose=verbose)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\plan.py\", line 538, in execute_actions\r\n inst.execute_instructions(plan, index, verbose)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\instructions.py\", line 149, in execute_instructions\r\n cmd(state, arg)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\instructions.py\", line 63, in EXTRACT_CMD\r\n install.extract(config.pkgs_dirs[0], arg)\r\n File \"C:\\Anaconda2\\lib\\site-packages\\conda\\install.py\", line 485, in extract\r\n t.extractall(path=path)\r\n File \"C:\\Anaconda2\\lib\\tarfile.py\", line 2078, in extractall\r\n self.extract(tarinfo, path)\r\n File \"C:\\Anaconda2\\lib\\tarfile.py\", line 2115, in extract\r\n self._extract_member(tarinfo, os.path.join(path, tarinfo.name))\r\n File \"C:\\Anaconda2\\lib\\tarfile.py\", line 2191, in _extract_member\r\n self.makefile(tarinfo, targetpath)\r\n File \"C:\\Anaconda2\\lib\\tarfile.py\", line 2231, in makefile\r\n with bltn_open(targetpath, \"wb\") as target:\r\nIOError: [Errno 13] Permission denied: 'C:\\\\Anaconda2\\\\pkgs\\\\python-2.7.11-2\\\\DLLs\\\\_ctypes.pyd'\r\n```\r\n\r\nThe environment fails to create:\r\n```\r\nλ conda info --envs\r\nUsing Anaconda Cloud api site https://api.anaconda.org\r\n# conda environments:\r\n#\r\nroot * C:\\Anaconda2\r\n```\r\n\r\nAnd this is my conda install:\r\n```\r\n$ conda info\r\nUsing Anaconda Cloud api site https://api.anaconda.org\r\nCurrent conda install:\r\n\r\n platform : win-64\r\n conda version : 3.19.3\r\n conda-build version : 1.18.1\r\n python version : 2.7.11.final.0\r\n requests version : 2.9.1\r\n root environment : C:\\Anaconda2 (writable)\r\n default environment : C:\\Anaconda2\r\n envs directories : C:\\Anaconda2\\envs\r\n package cache : C:\\Anaconda2\\pkgs\r\n channel URLs : https://repo.continuum.io/pkgs/free/win-64/\r\n https://repo.continuum.io/pkgs/free/noarch/\r\n https://repo.continuum.io/pkgs/pro/win-64/\r\n https://repo.continuum.io/pkgs/pro/noarch/\r\n config file : None\r\n is foreign system : False\r\n```\r\n\r\nIs there any current work-around? The system is Windows 7 Professional.\r\n\r\nAnnoyingly, it works great for a friend on Windows 10. One difference we found is the Python version string. Mine, on Windows 7:\r\n```\r\nλ python --version\r\nPython 2.7.11 :: Anaconda 2.5.0 (64-bit)\r\n```\r\n\r\nHis on Windows 10:\r\n```\r\nPython 2.7.11 :: Continuum Analytics, Inc.\r\n```\r\nHe installed the Python 3 version of Anaconda first and then Python 2 within it; I downloaded Python2 version directly.", + "score": 3.4612155 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12513", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12513/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12513/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12513/events", + "html_url": "https://github.com/pydata/pandas/issues/12513", + "id": 137920890, + "number": 12513, + "title": "BUG: Construct DataFrame raise error if specify `dtype='datetime64[ns, UTC]'`", + "user": { + "login": "BranYang", + "id": 4443076, + "avatar_url": "https://avatars.githubusercontent.com/u/4443076?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/BranYang", + "html_url": "https://github.com/BranYang", + "followers_url": "https://api.github.com/users/BranYang/followers", + "following_url": "https://api.github.com/users/BranYang/following{/other_user}", + "gists_url": "https://api.github.com/users/BranYang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/BranYang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/BranYang/subscriptions", + "organizations_url": "https://api.github.com/users/BranYang/orgs", + "repos_url": "https://api.github.com/users/BranYang/repos", + "events_url": "https://api.github.com/users/BranYang/events{/privacy}", + "received_events_url": "https://api.github.com/users/BranYang/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Dtypes", + "name": "Dtypes", + "color": "e102d8" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Reshaping", + "name": "Reshaping", + "color": "02d7e1" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Timezones", + "name": "Timezones", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/40", + "html_url": "https://github.com/pydata/pandas/milestones/0.18.2", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/40/labels", + "id": 1639795, + "number": 40, + "title": "0.18.2", + "description": "", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 183, + "closed_issues": 208, + "state": "open", + "created_at": "2016-03-11T21:24:45Z", + "updated_at": "2016-06-21T12:43:02Z", + "due_on": "2016-06-28T04:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2016-03-02T16:19:56Z", + "updated_at": "2016-04-25T15:31:31Z", + "closed_at": null, + "body": "#### Code Sample, a copy-pastable example if possible\r\n```Python\r\nimport pandas as pd\r\nimport numpy as np\r\narray_dim2 = np.arange(10).reshape((5, 2))\r\ndf = pd.DataFrame(array_dim2 , dtype='datetime64[ns, UTC]') # doesn't work\r\n```\r\nThe error:\r\n```Python\r\nTypeError Traceback (most recent call last)\r\n in ()\r\n----> 1 df = pd.DataFrame(array_dim2 , dtype='datetime64[ns, UTC]')\r\n\r\nC:\\D\\Projects\\Github\\pandas\\pandas\\core\\frame.py in __init__(self, data, index,\r\ncolumns, dtype, copy)\r\n 252 else:\r\n 253 mgr = self._init_ndarray(data, index, columns, dtype=dty\r\npe,\r\n--> 254 copy=copy)\r\n 255 elif isinstance(data, (list, types.GeneratorType)):\r\n 256 if isinstance(data, types.GeneratorType):\r\n\r\nC:\\D\\Projects\\Github\\pandas\\pandas\\core\\frame.py in _init_ndarray(self, values,\r\nindex, columns, dtype, copy)\r\n 412\r\n 413 if dtype is not None:\r\n--> 414 if values.dtype != dtype:\r\n 415 try:\r\n 416 values = values.astype(dtype)\r\n\r\nTypeError: data type not understood\r\n```\r\n#### Expected Output\r\n```Python\r\nIn [5]: df = pd.DataFrame(array_dim2 , dtype='datetime64[ns, UTC]')\r\n\r\nIn [6]: df\r\nOut[6]:\r\n 0 1\r\n0 1970-01-01 00:00:00.000000000+00:00 1970-01-01 00:00:00.000000001+00:00\r\n1 1970-01-01 00:00:00.000000002+00:00 1970-01-01 00:00:00.000000003+00:00\r\n2 1970-01-01 00:00:00.000000004+00:00 1970-01-01 00:00:00.000000005+00:00\r\n3 1970-01-01 00:00:00.000000006+00:00 1970-01-01 00:00:00.000000007+00:00\r\n4 1970-01-01 00:00:00.000000008+00:00 1970-01-01 00:00:00.000000009+00:00\r\n```\r\n\r\n#### output of ``pd.show_versions()``\r\n```\r\npython: 3.5.1.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.18.0rc1+66.gce3ac93\r\nnose: 1.3.7\r\npip: 8.0.2\r\nsetuptools: 19.2\r\nCython: 0.23.4\r\nnumpy: 1.10.1\r\nscipy: None\r\nstatsmodels: None\r\nxarray: None\r\nIPython: 4.0.2\r\nsphinx: 1.3.1\r\npatsy: None\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: None\r\ntables: None\r\nnumexpr: None\r\nmatplotlib: 1.5.1\r\nopenpyxl: 2.3.3\r\nxlrd: 0.9.4\r\nxlwt: 1.0.0\r\nxlsxwriter: None\r\nlxml: 3.5.0\r\nbs4: 4.4.1\r\nhtml5lib: 0.999\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: None\r\npymysql: None\r\npsycopg2: None\r\njinja2: 2.8\r\n```\r\n\r\n", + "score": 0.60987943 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12519", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12519/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12519/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12519/events", + "html_url": "https://github.com/pydata/pandas/issues/12519", + "id": 138174318, + "number": 12519, + "title": "Read CSV error_bad_lines does not error for too many values in first data row", + "user": { + "login": "jarekszymczak", + "id": 15443994, + "avatar_url": "https://avatars.githubusercontent.com/u/15443994?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jarekszymczak", + "html_url": "https://github.com/jarekszymczak", + "followers_url": "https://api.github.com/users/jarekszymczak/followers", + "following_url": "https://api.github.com/users/jarekszymczak/following{/other_user}", + "gists_url": "https://api.github.com/users/jarekszymczak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jarekszymczak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jarekszymczak/subscriptions", + "organizations_url": "https://api.github.com/users/jarekszymczak/orgs", + "repos_url": "https://api.github.com/users/jarekszymczak/repos", + "events_url": "https://api.github.com/users/jarekszymczak/events{/privacy}", + "received_events_url": "https://api.github.com/users/jarekszymczak/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/CSV", + "name": "CSV", + "color": "5319e7" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 4, + "created_at": "2016-03-03T13:13:37Z", + "updated_at": "2016-06-03T11:06:05Z", + "closed_at": null, + "body": "Hi, I would like to report an unexpected behaviour connected with option error_bad_lines (I just reference this for make it easier to find this bug if someone was to report the same).\r\n\r\nGiven the following two CSV files:\r\nsimple.csv\r\n```\r\nCol1,Col2\r\n4,Here\r\n5,7,Invalid\r\n8,Row\r\n9,Does\r\n10,Break\r\n```\r\n\r\nsimple2.csv\r\n```\r\nCol1,Col2\r\n5,7,Invalid\r\n4,Row\r\n8,Does\r\n9,Not\r\n10,Break\r\n```\r\n\r\nThe following code breaks, as expected:\r\n```\r\ndf = pd.read_csv('simple.csv')\r\n```\r\n\r\nThe fact that the following code does not break is up to discussion (though it is inconsistent depending on whether an error is in first row or futher ones):\r\n```\r\ndf2 = pd.read_csv('simple2.csv')\r\n```\r\n\r\nAs the index is read as the first column and hence it comes down to another potential issue reported (ragarding erroring on too few values), so I am not going into this here.\r\n\r\nSo the result is as follows:\r\n```\r\n\tCol1\t\tCol2\r\n5\t7\t\tInvalid\r\n4\tRow\t\tNaN\r\n8\tDoes\tNaN\r\n9\tNot\t\tNaN\r\n10\tBreak\tNaN\r\n```\r\n\r\nHowever even if I specify explicitly, that there is no index in CSV:\r\n```\r\ndf3 = pd.read_csv('simple2.csv', index_col=False)\r\n```\r\n\r\nIt still works, yielding the result:\r\n```\r\n\tCol1 \tCol2\r\n0\t5 \t\t7\r\n1\t4 \t\tRow\r\n2\t8\t\tDoes\r\n3\t9\t\tNot\r\n4\t10\t\tBreak\r\n```\r\n\r\nAnd this is definitely a bug I believe. I discovered it by accident, as in CSV that I was about to read comma was used also as decimal separator in first column and the totally corrupted CSV ended up read and parsed as DataFrame.\r\n#### output of ``pd.show_versions()``\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 3.5.1.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 60 Stepping 3, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.17.1\r\nnose: 1.3.7\r\npip: 8.0.3\r\nsetuptools: 20.1.1\r\nCython: 0.23.4\r\nnumpy: 1.10.1\r\nscipy: 0.16.0\r\nstatsmodels: 0.6.1\r\nIPython: 4.0.1\r\nsphinx: 1.3.1\r\npatsy: 0.4.0\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: 1.0.0\r\ntables: 3.2.2\r\nnumexpr: 2.4.4\r\nmatplotlib: 1.5.0\r\nopenpyxl: 2.2.6\r\nxlrd: 0.9.4\r\nxlwt: 1.0.0\r\nxlsxwriter: 0.7.7\r\nlxml: 3.4.4\r\nbs4: 4.4.1\r\nhtml5lib: None\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: 1.0.9\r\npymysql: None\r\npsycopg2: None\r\nJinja2: 2.8\r\n", + "score": 0.66191256 + }, + { + "url": "https://api.github.com/repos/mkdocs/mkdocs/issues/859", + "repository_url": "https://api.github.com/repos/mkdocs/mkdocs", + "labels_url": "https://api.github.com/repos/mkdocs/mkdocs/issues/859/labels{/name}", + "comments_url": "https://api.github.com/repos/mkdocs/mkdocs/issues/859/comments", + "events_url": "https://api.github.com/repos/mkdocs/mkdocs/issues/859/events", + "html_url": "https://github.com/mkdocs/mkdocs/issues/859", + "id": 138296417, + "number": 859, + "title": "Large search indexes can cause Lunr to freeze the page while it creates the index.", + "user": { + "login": "sashadt", + "id": 4966983, + "avatar_url": "https://avatars.githubusercontent.com/u/4966983?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sashadt", + "html_url": "https://github.com/sashadt", + "followers_url": "https://api.github.com/users/sashadt/followers", + "following_url": "https://api.github.com/users/sashadt/following{/other_user}", + "gists_url": "https://api.github.com/users/sashadt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sashadt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sashadt/subscriptions", + "organizations_url": "https://api.github.com/users/sashadt/orgs", + "repos_url": "https://api.github.com/users/sashadt/repos", + "events_url": "https://api.github.com/users/sashadt/events{/privacy}", + "received_events_url": "https://api.github.com/users/sashadt/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/mkdocs/mkdocs/labels/Bug", + "name": "Bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 46, + "created_at": "2016-03-03T21:03:24Z", + "updated_at": "2016-06-10T01:51:30Z", + "closed_at": null, + "body": "When using readthedocs theme, search shows \"no results\" for a few seconds while search is being performed, and then results are loaded. However, few seconds are enough to convince the users nothing is found, and they move on.\r\n\r\nFor example see: http://docs.datatorrent.com Try searching for \"test\" and you will see the following for a while:\r\n\r\n![image](https://cloud.githubusercontent.com/assets/4966983/13509416/2605d938-e140-11e5-9a6b-6ef8446212cc.png)\r\n\r\n\r\nPerhaps an indicator of search in progress can be added?\r\n\r\n", + "score": 0.32761815 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12565", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12565/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12565/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12565/events", + "html_url": "https://github.com/pydata/pandas/issues/12565", + "id": 139431555, + "number": 12565, + "title": "BUG?: secondary_y is unaltered by fontsize parameter", + "user": { + "login": "scotthounsell", + "id": 9099192, + "avatar_url": "https://avatars.githubusercontent.com/u/9099192?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/scotthounsell", + "html_url": "https://github.com/scotthounsell", + "followers_url": "https://api.github.com/users/scotthounsell/followers", + "following_url": "https://api.github.com/users/scotthounsell/following{/other_user}", + "gists_url": "https://api.github.com/users/scotthounsell/gists{/gist_id}", + "starred_url": "https://api.github.com/users/scotthounsell/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/scotthounsell/subscriptions", + "organizations_url": "https://api.github.com/users/scotthounsell/orgs", + "repos_url": "https://api.github.com/users/scotthounsell/repos", + "events_url": "https://api.github.com/users/scotthounsell/events{/privacy}", + "received_events_url": "https://api.github.com/users/scotthounsell/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Novice", + "name": "Difficulty Novice", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Visualization", + "name": "Visualization", + "color": "8AE234" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2016-03-09T00:01:38Z", + "updated_at": "2016-04-25T15:34:45Z", + "closed_at": null, + "body": "Hi,\r\n\r\nI have found that fontsize is ignored on the secondary_y axis in DataFrame.plot in version 17.1. Is this by intention? (Apologies, if this is the wrong place to ask this or if it has already been asked as I was unable to find it.)\r\n\r\nThanks!\r\n\r\nExample:\r\n```python\r\n>>> import pandas as pd, numpy as np, matplotlib.pyplot as plt\r\n>>> x = pd.DataFrame(np.random.randn(100,2), columns=list('AB')).assign(C = lambda df: df.B.cumsum())\r\n>>> x.plot(secondary_y='C', fontsize=20).legend(fontsize=16)\r\n\r\n>>> plt.show() # Righthand y axis remains small\r\n```\r\nHere are my package versions:\r\n```python\r\n>>> pd.show_versions()\r\n\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 2.7.9.final.0\r\npython-bits: 32\r\nOS: Windows\r\nOS-release: 8\r\nmachine: AMD64\r\nprocessor: AMD64 Family 21 Model 16 Stepping 1, AuthenticAMD\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.17.1\r\nnose: None\r\npip: 1.5.6\r\nsetuptools: 7.0\r\nCython: None\r\nnumpy: 1.9.3\r\nscipy: 0.16.0\r\nstatsmodels: None\r\nIPython: None\r\nsphinx: None\r\npatsy: None\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: None\r\ntables: None\r\nnumexpr: None\r\nmatplotlib: 1.5.0\r\nopenpyxl: None\r\nxlrd: 0.9.4\r\nxlwt: None\r\nxlsxwriter: None\r\nlxml: None\r\nbs4: None\r\nhtml5lib: None\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: None\r\npymysql: None\r\npsycopg2: None\r\nJinja2: None\r\n```", + "score": 0.8182873 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12652", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12652/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12652/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12652/events", + "html_url": "https://github.com/pydata/pandas/issues/12652", + "id": 141466570, + "number": 12652, + "title": "DataFrame Groupby Apply Returning Unexpected Result?", + "user": { + "login": "jaradc", + "id": 12854767, + "avatar_url": "https://avatars.githubusercontent.com/u/12854767?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jaradc", + "html_url": "https://github.com/jaradc", + "followers_url": "https://api.github.com/users/jaradc/followers", + "following_url": "https://api.github.com/users/jaradc/following{/other_user}", + "gists_url": "https://api.github.com/users/jaradc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jaradc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jaradc/subscriptions", + "organizations_url": "https://api.github.com/users/jaradc/orgs", + "repos_url": "https://api.github.com/users/jaradc/repos", + "events_url": "https://api.github.com/users/jaradc/events{/privacy}", + "received_events_url": "https://api.github.com/users/jaradc/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Groupby", + "name": "Groupby", + "color": "729FCF" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Usage%20Question", + "name": "Usage Question", + "color": "0052cc" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/40", + "html_url": "https://github.com/pydata/pandas/milestones/0.18.2", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/40/labels", + "id": 1639795, + "number": 40, + "title": "0.18.2", + "description": "", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 183, + "closed_issues": 208, + "state": "open", + "created_at": "2016-03-11T21:24:45Z", + "updated_at": "2016-06-21T12:43:02Z", + "due_on": "2016-06-28T04:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2016-03-17T03:06:59Z", + "updated_at": "2016-04-26T15:10:03Z", + "closed_at": null, + "body": "Why doesn't applying the `addColumn` function to a `DataFrameGroupby` object return the expected output below?\r\n\r\n#### Code Sample, a copy-pasteable example if possible\r\n```\r\nimport pandas as pd\r\n\r\ndf = pd.DataFrame({\r\n ('C', 'julian'): [0.258185, 0.52591899999999991, 0.17491099999999998, 0.94083099999999997, 0.70193700000000003, 0.189361, 0.90364500000000003, 0.56848199999999993, 0.44919799999999993, 0.39054899999999998],\r\n ('B', 'geoffrey'): [0.27970200000000001, 0.54119799999999996, 0.36436499999999999, 0.73802900000000005, 0.85527000000000009, 0.37441099999999999, 0.87378500000000003, 0.062140000000000001, 0.008404, 0.171458], \r\n ('A', 'julian'): [0.20408199999999999, 0.263235, 0.196243, 0.52878500000000006, 0.85351699999999997, 0.23979699999999998, 0.98073399999999999, 0.59194199999999997, 0.81816699999999998, 0.21742399999999998], \r\n ('B', 'julian'): [0.79572500000000002, 0.507324, 0.65340799999999999, 0.65416000000000007, 0.803087, 0.94354400000000005, 0.85009699999999988, 0.56629799999999997, 0.28205000000000002, 0.47193299999999999], \r\n ('A', 'geoffrey'): [0.073676000000000005, 0.096733, 0.028613, 0.831569, 0.26324999999999998, 0.069519000000000011, 0.29041400000000001, 0.088387000000000007, 0.061483000000000003, 0.42760200000000004], \r\n ('C', 'geoffrey'): [0.25811200000000001, 0.75765199999999999, 0.92473300000000003, 0.29447299999999998, 0.26469799999999999, 0.84664699999999993, 0.11871300000000001, 0.87206399999999995, 0.65837000000000001, 0.23442600000000002]},\r\n columns=pd.MultiIndex.from_tuples([('A','julian'),('A','geoffrey'), ('B','julian'),('B','geoffrey'), ('C','julian'),('C','geoffrey')]))\r\n\r\ndef addColumn(grouped):\r\n name = grouped.columns[0][1]\r\n grouped['sum', name] = grouped.sum(axis=1)\r\n #print(grouped)\r\n return grouped\r\n\r\nresult = df.groupby(level=1, axis=1).apply(addColumn)\r\n```\r\n\r\n#### Expected Output\r\n```\r\n A B C sum A B C sum \r\n geoffrey geoffrey geoffrey geoffrey julian julian julian julian \r\n0 0.073676 0.279702 0.258112 0.611491 0.204082 0.795725 0.258185 1.257992 \r\n1 0.096733 0.541198 0.757652 1.395584 0.263235 0.507324 0.525919 1.296478 \r\n2 0.028613 0.364365 0.924733 1.317710 0.196243 0.653408 0.174911 1.024561 \r\n3 0.831569 0.738029 0.294473 1.864071 0.528785 0.654160 0.940831 2.123776 \r\n4 0.263250 0.855270 0.264698 1.383219 0.853517 0.803087 0.701937 2.358542 \r\n5 0.069519 0.374411 0.846647 1.290578 0.239797 0.943544 0.189361 1.372703 \r\n6 0.290414 0.873785 0.118713 1.282912 0.980734 0.850097 0.903645 2.734476 \r\n7 0.088387 0.062140 0.872064 1.022590 0.591942 0.566298 0.568482 1.726721 \r\n8 0.061483 0.008404 0.658370 0.728257 0.818167 0.282050 0.449198 1.549415 \r\n9 0.427602 0.171458 0.234426 0.833486 0.217424 0.471933 0.390549 1.079906 \r\n```\r\n\r\n#### output of ``pd.show_versions()``\r\n\r\n> INSTALLED VERSIONS\r\n> ------------------\r\n> commit: None\r\n> python: 3.4.2.final.0\r\n> python-bits: 64\r\n> OS: Windows\r\n> OS-release: 7\r\n> machine: AMD64\r\n> processor: Intel64 Family 6 Model 42 Stepping 7, GenuineIntel\r\n> byteorder: little\r\n> LC_ALL: None\r\n> LANG: None\r\n> \r\n> pandas: 0.17.1\r\n> nose: None\r\n> pip: None\r\n> setuptools: 15.0\r\n> Cython: 0.22\r\n> numpy: 1.9.3\r\n> scipy: 0.16.0c1\r\n> statsmodels: 0.6.1\r\n> IPython: 4.0.0\r\n> sphinx: None\r\n> patsy: 0.4.0\r\n> dateutil: 2.4.2\r\n> pytz: 2015.2\r\n> blosc: None\r\n> bottleneck: None\r\n> tables: None\r\n> numexpr: None\r\n> matplotlib: 1.4.3\r\n> openpyxl: 1.8.6\r\n> xlrd: 0.9.3\r\n> xlwt: None\r\n> xlsxwriter: 0.7.3\r\n> lxml: 3.4.2\r\n> bs4: 4.1.0\r\n> html5lib: 0.999\r\n> httplib2: 0.9.1\r\n> apiclient: None\r\n> sqlalchemy: None\r\n> pymysql: None\r\n> psycopg2: None\r\n> Jinja2: 2.8", + "score": 0.51698595 + }, + { + "url": "https://api.github.com/repos/nicolargo/glances/issues/815", + "repository_url": "https://api.github.com/repos/nicolargo/glances", + "labels_url": "https://api.github.com/repos/nicolargo/glances/issues/815/labels{/name}", + "comments_url": "https://api.github.com/repos/nicolargo/glances/issues/815/comments", + "events_url": "https://api.github.com/repos/nicolargo/glances/issues/815/events", + "html_url": "https://github.com/nicolargo/glances/issues/815", + "id": 141530554, + "number": 815, + "title": "[WebUI] Glances will not get past loading screen - Windows Server 2012", + "user": { + "login": "jjbrunton", + "id": 8502823, + "avatar_url": "https://avatars.githubusercontent.com/u/8502823?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jjbrunton", + "html_url": "https://github.com/jjbrunton", + "followers_url": "https://api.github.com/users/jjbrunton/followers", + "following_url": "https://api.github.com/users/jjbrunton/following{/other_user}", + "gists_url": "https://api.github.com/users/jjbrunton/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jjbrunton/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jjbrunton/subscriptions", + "organizations_url": "https://api.github.com/users/jjbrunton/orgs", + "repos_url": "https://api.github.com/users/jjbrunton/repos", + "events_url": "https://api.github.com/users/jjbrunton/events{/privacy}", + "received_events_url": "https://api.github.com/users/jjbrunton/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/nicolargo/glances/labels/bug", + "name": "bug", + "color": "e10c02" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/nicolargo/glances/milestones/25", + "html_url": "https://github.com/nicolargo/glances/milestones/2.7", + "labels_url": "https://api.github.com/repos/nicolargo/glances/milestones/25/labels", + "id": 1650430, + "number": 25, + "title": "2.7", + "description": "", + "creator": { + "login": "nicolargo", + "id": 776747, + "avatar_url": "https://avatars.githubusercontent.com/u/776747?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nicolargo", + "html_url": "https://github.com/nicolargo", + "followers_url": "https://api.github.com/users/nicolargo/followers", + "following_url": "https://api.github.com/users/nicolargo/following{/other_user}", + "gists_url": "https://api.github.com/users/nicolargo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nicolargo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nicolargo/subscriptions", + "organizations_url": "https://api.github.com/users/nicolargo/orgs", + "repos_url": "https://api.github.com/users/nicolargo/repos", + "events_url": "https://api.github.com/users/nicolargo/events{/privacy}", + "received_events_url": "https://api.github.com/users/nicolargo/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 16, + "closed_issues": 23, + "state": "open", + "created_at": "2016-03-17T08:02:40Z", + "updated_at": "2016-06-10T15:31:32Z", + "due_on": "2016-08-31T22:00:00Z", + "closed_at": null + }, + "comments": 26, + "created_at": "2016-03-17T09:45:21Z", + "updated_at": "2016-05-22T08:40:37Z", + "closed_at": null, + "body": "http://localhost:61208/api/2/all\r\n\r\nreturns\r\n\r\nCannot get stats ('utf8' codec can't decode byte 0xb5 in position 0: invalid start byte)", + "score": 2.5761633 + }, + { + "url": "https://api.github.com/repos/timofurrer/try/issues/2", + "repository_url": "https://api.github.com/repos/timofurrer/try", + "labels_url": "https://api.github.com/repos/timofurrer/try/issues/2/labels{/name}", + "comments_url": "https://api.github.com/repos/timofurrer/try/issues/2/comments", + "events_url": "https://api.github.com/repos/timofurrer/try/issues/2/events", + "html_url": "https://github.com/timofurrer/try/issues/2", + "id": 142412679, + "number": 2, + "title": "The executable python3.5 (from --python=python3.5) does not exist", + "user": { + "login": "tomsitter", + "id": 2029528, + "avatar_url": "https://avatars.githubusercontent.com/u/2029528?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tomsitter", + "html_url": "https://github.com/tomsitter", + "followers_url": "https://api.github.com/users/tomsitter/followers", + "following_url": "https://api.github.com/users/tomsitter/following{/other_user}", + "gists_url": "https://api.github.com/users/tomsitter/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tomsitter/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tomsitter/subscriptions", + "organizations_url": "https://api.github.com/users/tomsitter/orgs", + "repos_url": "https://api.github.com/users/tomsitter/repos", + "events_url": "https://api.github.com/users/tomsitter/events{/privacy}", + "received_events_url": "https://api.github.com/users/tomsitter/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/timofurrer/try/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/timofurrer/try/labels/help-wanted", + "name": "help-wanted", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/timofurrer/try/labels/windows-support", + "name": "windows-support", + "color": "d4c5f9" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 5, + "created_at": "2016-03-21T17:11:08Z", + "updated_at": "2016-03-29T23:54:39Z", + "closed_at": null, + "body": "Hey,\r\n\r\nI'm trying to run this on Windows 10. After installing via pip I'm running into a couple separate issues\r\n\r\n1) `try` is masked by Windows PowerShell's try syntax\r\n2) Running as a python m (`python -m try requests`) results in the error:\r\n`The executable python3.5 (from --python=python3.5) does not exist`\r\n\r\nI'm using Python 3.5 installed to C:\\Python35\\python.exe\r\n\r\nAny help would be great!", + "score": 1.5141281 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12690", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12690/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12690/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12690/events", + "html_url": "https://github.com/pydata/pandas/issues/12690", + "id": 142675526, + "number": 12690, + "title": "Rounding errors when parsing timedeltas", + "user": { + "login": "belteshassar", + "id": 12408997, + "avatar_url": "https://avatars.githubusercontent.com/u/12408997?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/belteshassar", + "html_url": "https://github.com/belteshassar", + "followers_url": "https://api.github.com/users/belteshassar/followers", + "following_url": "https://api.github.com/users/belteshassar/following{/other_user}", + "gists_url": "https://api.github.com/users/belteshassar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/belteshassar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/belteshassar/subscriptions", + "organizations_url": "https://api.github.com/users/belteshassar/orgs", + "repos_url": "https://api.github.com/users/belteshassar/repos", + "events_url": "https://api.github.com/users/belteshassar/events{/privacy}", + "received_events_url": "https://api.github.com/users/belteshassar/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Timedelta", + "name": "Timedelta", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/40", + "html_url": "https://github.com/pydata/pandas/milestones/0.18.2", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/40/labels", + "id": 1639795, + "number": 40, + "title": "0.18.2", + "description": "", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 183, + "closed_issues": 208, + "state": "open", + "created_at": "2016-03-11T21:24:45Z", + "updated_at": "2016-06-21T12:43:02Z", + "due_on": "2016-06-28T04:00:00Z", + "closed_at": null + }, + "comments": 1, + "created_at": "2016-03-22T14:55:15Z", + "updated_at": "2016-04-26T21:53:41Z", + "closed_at": null, + "body": "Found this while working on #12136.\r\n\r\nRounding errors occur for timedeltas initialized using fractional microsecond values:\r\n\r\n```\r\n>>> pd.Timedelta('12.312us') == pd.Timedelta(12312)\r\nFalse\r\n>>> pd.Timedelta(12.312, unit='us') == pd.Timedelta(12312)\r\nFalse\r\n>>> pd.Timedelta('12.312us') == pd.Timedelta(12311)\r\nTrue\r\n```\r\n\r\nAdditionally, precision is lost when initializing timedeltas with fractional millisecond (and probably second) values:\r\n\r\n```\r\n>>> pd.Timedelta(0.012312, unit='ms') == pd.Timedelta(12311)\r\nFalse\r\n>>> pd.Timedelta(0.012311, unit='ms') == pd.Timedelta(12311)\r\nFalse\r\n>>> pd.Timedelta(0.012311, unit='ms') == pd.Timedelta(12000)\r\nTrue\r\n```\r\n\r\nI believe the problem is here: https://github.com/pydata/pandas/blob/288059adfb751d52be57e444198198518d256c05/pandas/tslib.pyx#L3399\r\nbumping up the values of `p` should probably solve this.\r\n\r\n#### output of ``pd.show_versions()``\r\n\r\ncommit: None\r\npython: 2.7.11.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 10\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 78 Stepping 3, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0+unknown\r\nnose: 1.3.7\r\npip: 8.1.0\r\nsetuptools: 20.2.2\r\nCython: 0.23.4\r\nnumpy: 1.10.4\r\nscipy: 0.17.0\r\nstatsmodels: None\r\nxarray: None\r\nIPython: 4.1.2\r\nsphinx: 1.3.5\r\npatsy: 0.4.0\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: 1.0.0\r\ntables: 3.2.2\r\nnumexpr: 2.4.6\r\nmatplotlib: 1.5.1\r\nopenpyxl: 2.3.2\r\nxlrd: 0.9.4\r\nxlwt: 1.0.0\r\nxlsxwriter: 0.8.4\r\nlxml: 3.5.0\r\nbs4: 4.3.2\r\nhtml5lib: 0.999\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: 1.0.12\r\npymysql: 0.6.7.None\r\npsycopg2: None\r\njinja2: 2.8\r\nboto: None\r\n", + "score": 0.7290506 + }, + { + "url": "https://api.github.com/repos/pypa/pip/issues/3604", + "repository_url": "https://api.github.com/repos/pypa/pip", + "labels_url": "https://api.github.com/repos/pypa/pip/issues/3604/labels{/name}", + "comments_url": "https://api.github.com/repos/pypa/pip/issues/3604/comments", + "events_url": "https://api.github.com/repos/pypa/pip/issues/3604/events", + "html_url": "https://github.com/pypa/pip/issues/3604", + "id": 145951815, + "number": 3604, + "title": "Pip throws exception on Cyrillic character in module description", + "user": { + "login": "EdBrereton", + "id": 1326060, + "avatar_url": "https://avatars.githubusercontent.com/u/1326060?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/EdBrereton", + "html_url": "https://github.com/EdBrereton", + "followers_url": "https://api.github.com/users/EdBrereton/followers", + "following_url": "https://api.github.com/users/EdBrereton/following{/other_user}", + "gists_url": "https://api.github.com/users/EdBrereton/gists{/gist_id}", + "starred_url": "https://api.github.com/users/EdBrereton/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/EdBrereton/subscriptions", + "organizations_url": "https://api.github.com/users/EdBrereton/orgs", + "repos_url": "https://api.github.com/users/EdBrereton/repos", + "events_url": "https://api.github.com/users/EdBrereton/events{/privacy}", + "received_events_url": "https://api.github.com/users/EdBrereton/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pypa/pip/labels/bug", + "name": "bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/encoding", + "name": "encoding", + "color": "0052cc" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/search", + "name": "search", + "color": "0052cc" + }, + { + "url": "https://api.github.com/repos/pypa/pip/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2016-04-05T10:42:36Z", + "updated_at": "2016-04-06T10:38:33Z", + "closed_at": null, + "body": "* Pip version: 8.1.1\r\n* Python version: 3.5.1\r\n* Operating System: Windows 10 64 bit\r\n\r\n### Description:\r\n\r\nAttempting to use the command `pip search vcard_split` in powershell results in an exception being presented to user. This appears to be caused by Cyrillic characters in the module description. This also occurs in other searches where this module is returned as a result (i.e. `pip search gmail`)\r\n \r\n\r\n### What I've run:\r\n\r\n```\r\nPS C:\\Users\\edward.brereton> pip search vcard_split\r\n--- Logging error ---\r\nTraceback (most recent call last):\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\logging\\__init__.py\", line 982, in emit\r\n stream.write(msg)\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\pip\\_vendor\\colorama\\ansitowin32.py\", line 137, in write\r\n self.write_and_convert(text)\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\pip\\_vendor\\colorama\\ansitowin32.py\", line 165, in write_and_convert\r\n self.write_plain_text(text, cursor, len(text))\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\pip\\_vendor\\colorama\\ansitowin32.py\", line 170, in write_plain_text\r\n self.wrapped.write(text[start:end])\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\encodings\\cp850.py\", line 19, in encode\r\n return codecs.charmap_encode(input,self.errors,encoding_map)[0]\r\nUnicodeEncodeError: 'charmap' codec can't encode characters in position 398-407: character maps to \r\nCall stack:\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\runpy.py\", line 170, in _run_module_as_main\r\n \"__main__\", mod_spec)\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\runpy.py\", line 85, in _run_code\r\n exec(code, run_globals)\r\n File \"C:\\Users\\edward.brereton\\AppData\\Local\\Programs\\Python\\Python35\\Scripts\\pip.exe\\__main__.py\", line 9, in \r\n sys.exit(main())\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\pip\\__init__.py\", line 217, in main\r\n return command.main(cmd_args)\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\pip\\basecommand.py\", line 209, in main\r\n status = self.run(options, args)\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\pip\\commands\\search.py\", line 50, in run\r\n print_results(hits, terminal_width=terminal_width)\r\n File \"c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\pip\\commands\\search.py\", line 129, in print_results\r\n logger.info(line)\r\nMessage: 'vcard_split (0.2dev-r2010) - Splits one vcard file (*.vcf) to many vcard\\n files with one vcard per file. Useful for\\n import contacts to phones, thats do not\\n support multiple vcard in one file.\\n Supprt unicode cyrillic characters.\\n \\u041a\\u043e\\u043d\\u0441\\u043e\\u043b\\u044c\\u043d\\u0430\\u044f \\u043f\\u0440\\u043e\\u0433\\u0440\\u0430\\u043c\\u043c\\u0430 \\u0434\\u043b\\u044f \\u0440\\u0430\\u0437\\u0431\\u0438\\u0435\\u043d\\u0438\\u044f \\u043e\\u0434\\u043d\\u043e\\u0433\\u043e\\n \\u0431\\u043e\\u043b\\u044c\\u0448\\u043b\\u0433\\u043e \\u0444\\u0430\\u0439\\u043b\\u0430 \\u0441 \\u043a\\u043e\\u043d\\u0442\\u0430\\u043a\\u0442\\u0430\\u043c\\u0438 \\u0432 \\u0444\\u043e\\u0440\\u043c\\u0430\\u0442\\u0435 VCARD\\n (*.vcf) \\u043d\\u0430 \\u043d\\u0435\\u0441\\u043a\\u043e\\u043b\\u044c\\u043a\\u043e \\u0444\\u0430\\u0439\\u043b\\u043e\\u0432 \\u0441\\u043e\\u0434\\u0435\\u0440\\u0436\\u0430\\u0449\\u0438\\u0445\\n \\u043e\\u0434\\u0438\\u043d \\u043a\\u043e\\u043d\\u0442\\u0430\\u043a\\u0442. \\u041f\\u043e\\u043b\\u0435\\u0437\\u043d\\u0430 \\u0434\\u043b\\u044f \\u0438\\u043c\\u043f\\u043e\\u0440\\u0442\\u0430 \\u043a\\u043e\\u043d\\u0442\\u0430\\u043a\\u0442\\u043e\\u0432 \\u0432\\n \\u0442\\u0435\\u043b\\u0435\\u0444\\u043e\\u043d, \\u043a\\u043e\\u0442\\u043e\\u0440\\u044b\\u0439 \\u043d\\u0435 \\u043f\\u043e\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u0435\\u0442\\n \\u043d\\u0435\\u0441\\u043a\\u043e\\u043b\\u044c\\u043a\\u043e \\u043a\\u043e\\u043d\\u0442\\u0430\\u043a\\u0442\\u043e\\u0432 \\u0432 \\u043e\\u0434\\u043d\\u043e\\u043c \\u0444\\u0430\\u0439\\u043b\\u0435. \\u041f\\u043e\\u0434\\u0434\\u0435\\u0440\\u0436\\u0438\\u0432\\u0430\\u0435\\u0442\\n \\u0440\\u0443\\u0441\\u0441\\u043a\\u0438\\u0435 \\u0431\\u0443\\u043a\\u0432\\u044b \\u043a\\u0438\\u0440\\u0438\\u043b\\u043b\\u0438\\u0446\\u0443 \\u0432 \\u0442\\u0435\\u043a\\u0441\\u0442\\u0435 \\u043a\\u043e\\u043d\\u0442\\u0430\\u043a\\u0442\\u043e\\u0432.\\n \\u0420\\u0430\\u0431\\u043e\\u0442\\u043e\\u0441\\u043f\\u043e\\u0441\\u043e\\u0431\\u043d\\u043e\\u0441\\u0442\\u044c \\u043f\\u0440\\u043e\\u0432\\u0435\\u0440\\u044f\\u043b\\u0430\\u0441\\u044c \\u043d\\u0430 \\u0444\\u0430\\u0439\\u043b\\u0435 \\u0441\\n \\u043a\\u043e\\u043d\\u0442\\u0430\\u043a\\u0442\\u0430\\u043c\\u0438 \\u044d\\u043a\\u0441\\u043f\\u043e\\u0440\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u043c\\u0438 \\u0438\\u0437 google\\n gmail.com. \\u0423\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043a\\u0430 \\u0432\\u0430\\u0440\\u0438\\u0430\\u043d\\u0442 1: \\u0441\\u043a\\u0430\\u0447\\u0430\\u0442\\u044c,\\n \\u0440\\u0430\\u0441\\u043f\\u0430\\u043a\\u043e\\u0432\\u0430\\u0442\\u044c, \\u0432 \\u043f\\u0430\\u043f\\u043a\\u0435 \\u0437\\u0430\\u043f\\u0443\\u0441\\u0442\\u0438\\u0442\\u044c \"python setup.py\\n install\". \\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 \\u0432\\u0430\\u0440\\u0438\\u0430\\u043d\\u0442 1:\\n python vcard_split.py [-h] [-l LOG_LEVEL] [-d]\\n filename [filename ...] \\u043d\\u0430\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440 \"python\\n vcard_split.py contacts.vcf\" \\u0423\\u0441\\u0442\\u0430\\u043d\\u043e\\u0432\\u043a\\u0430\\n \\u0432\\u0430\\u0440\\u0438\\u0430\\u043d\\u0442 2: \"easy_install -U vcard_split\".\\n \\u0418\\u0441\\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 \\u0432\\u0430\\u0440\\u0438\\u0430\\u043d\\u0442 2: vcard_split [-h] [-l\\n LOG_LEVEL] [-d] filename [filename ...] \\u043d\\u0430\\u043f\\u0440\\u0438\\u043c\\u0435\\u0440\\n \"vcard_split contacts.vcf\"'\r\nArguments: ()\r\nPS C:\\Users\\edward.brereton> pip --version\r\npip 8.1.1 from c:\\users\\edward.brereton\\appdata\\local\\programs\\python\\python35\\lib\\site-packages (python 3.5)\r\nPS C:\\Users\\edward.brereton> python --version\r\nPython 3.5.1\r\n```\r\n", + "score": 6.531528 + }, + { + "url": "https://api.github.com/repos/kwikteam/klusta/issues/18", + "repository_url": "https://api.github.com/repos/kwikteam/klusta", + "labels_url": "https://api.github.com/repos/kwikteam/klusta/issues/18/labels{/name}", + "comments_url": "https://api.github.com/repos/kwikteam/klusta/issues/18/comments", + "events_url": "https://api.github.com/repos/kwikteam/klusta/issues/18/events", + "html_url": "https://github.com/kwikteam/klusta/issues/18", + "id": 146944825, + "number": 18, + "title": "error running klustaviewa on linux", + "user": { + "login": "salazarr", + "id": 10233443, + "avatar_url": "https://avatars.githubusercontent.com/u/10233443?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/salazarr", + "html_url": "https://github.com/salazarr", + "followers_url": "https://api.github.com/users/salazarr/followers", + "following_url": "https://api.github.com/users/salazarr/following{/other_user}", + "gists_url": "https://api.github.com/users/salazarr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/salazarr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/salazarr/subscriptions", + "organizations_url": "https://api.github.com/users/salazarr/orgs", + "repos_url": "https://api.github.com/users/salazarr/repos", + "events_url": "https://api.github.com/users/salazarr/events{/privacy}", + "received_events_url": "https://api.github.com/users/salazarr/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/kwikteam/klusta/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 15, + "created_at": "2016-04-08T14:33:12Z", + "updated_at": "2016-04-15T15:14:19Z", + "closed_at": null, + "body": "Hi \r\n\r\nI have installed klusta from the web page :\r\n\r\nhttps://github.com/kwikteam/klusta/#quick-install-guide\r\n\r\nand tried to open klustaviewa but I get the following error message:\r\n\r\nklustaviewa\r\nTraceback (most recent call last):\r\n File \"/home/mint/miniconda3/envs/klusta/bin/klustaviewa\", line 7, in \r\n from klustaviewa.scripts.runklustaviewa import main\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/klustaviewa/__init__.py\", line 44, in \r\n from kwiklib.utils import logger as log\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/kwiklib/__init__.py\", line 9, in \r\n import dataio\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/kwiklib/dataio/__init__.py\", line 4, in \r\n from kwikloader import *\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/kwiklib/dataio/kwikloader.py\", line 31, in \r\n from .experiment import Experiment\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/kwiklib/dataio/experiment.py\", line 16, in \r\n from klusta.traces.waveform import WaveformLoader, SpikeLoader\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/klusta/traces/__init__.py\", line 9, in \r\n from .spikedetekt import SpikeDetekt\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/klusta/traces/spikedetekt.py\", line 13, in \r\n from tqdm import tqdm\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/tqdm/__init__.py\", line 6, in \r\n from ._main import main\r\n File \"/home/mint/miniconda3/envs/klusta/lib/python2.7/site-packages/tqdm/_main.py\", line 3, in \r\n from docopt import docopt\r\nImportError: No module named docopt\r\n\r\n\r\nAny idea?\r\n\r\nThanks,\r\n\r\nRodrigo.\r\n\r\n", + "score": 0.5379021 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12857", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12857/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12857/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12857/events", + "html_url": "https://github.com/pydata/pandas/issues/12857", + "id": 147305713, + "number": 12857, + "title": "BUG: not properly converting S1 in astype ,on PY3", + "user": { + "login": "cchrysostomou", + "id": 2927161, + "avatar_url": "https://avatars.githubusercontent.com/u/2927161?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cchrysostomou", + "html_url": "https://github.com/cchrysostomou", + "followers_url": "https://api.github.com/users/cchrysostomou/followers", + "following_url": "https://api.github.com/users/cchrysostomou/following{/other_user}", + "gists_url": "https://api.github.com/users/cchrysostomou/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cchrysostomou/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cchrysostomou/subscriptions", + "organizations_url": "https://api.github.com/users/cchrysostomou/orgs", + "repos_url": "https://api.github.com/users/cchrysostomou/repos", + "events_url": "https://api.github.com/users/cchrysostomou/events{/privacy}", + "received_events_url": "https://api.github.com/users/cchrysostomou/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Dtypes", + "name": "Dtypes", + "color": "e102d8" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Error%20Reporting", + "name": "Error Reporting", + "color": "ffa0ff" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/40", + "html_url": "https://github.com/pydata/pandas/milestones/0.18.2", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/40/labels", + "id": 1639795, + "number": 40, + "title": "0.18.2", + "description": "", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 183, + "closed_issues": 208, + "state": "open", + "created_at": "2016-03-11T21:24:45Z", + "updated_at": "2016-06-21T12:43:02Z", + "due_on": "2016-06-28T04:00:00Z", + "closed_at": null + }, + "comments": 9, + "created_at": "2016-04-11T03:25:32Z", + "updated_at": "2016-04-26T15:25:36Z", + "closed_at": null, + "body": "I am trying to create a dataframe where each cell is represented as a single characters rather than python objects. I am able to create and work with the dataframe when using .astype command. However, If i try to print out a larger portion of the table, then I get an error.\r\n\r\n#### Code Sample, a copy-pastable example if possible\r\n\r\n```\r\nimport random\r\nimport pandas as pd\r\nlets = 'ACDEFGHIJKLMNOP'\r\nslen = 50\r\nnseqs = 1000\r\nwords = [[random.choice(lets) for x in range(slen)] for _ in range(nseqs)]\r\ndf = pd.DataFrame(words).astype('S1')\r\n#this will print correctly:\r\nprint(df.iloc[:60, :])\r\n#this will raise an error:\r\nprint(df.iloc[:61, :])\r\n```\r\n\r\n#### error raised\r\n\r\n```\r\nC:\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals.py in _vstack(to_stack, dtype)\r\n 4248 \r\n 4249 # work around NumPy 1.6 bug\r\n-> 4250 if dtype == _NS_DTYPE or dtype == _TD_DTYPE:\r\n 4251 new_values = np.vstack([x.view('i8') for x in to_stack])\r\n 4252 return new_values.view(dtype)\r\nTypeError: data type \"bytes8\" not understood\r\n```\r\n\r\n#### output of ``pd.show_versions()``\r\ncommit: None\r\npython: 3.4.4.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 61 Stepping 4, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.17.1\r\nnose: None\r\npip: 8.1.1\r\nsetuptools: 20.3\r\nCython: 0.23.4\r\nnumpy: 1.10.4\r\nscipy: 0.17.0\r\nstatsmodels: 0.6.1\r\nIPython: 4.1.1\r\nsphinx: 1.4b1\r\npatsy: 0.4.0\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: 1.0.0\r\ntables: 3.2.2\r\nnumexpr: 2.4.6\r\nmatplotlib: 1.5.1\r\nopenpyxl: 2.3.2\r\nxlrd: 0.9.4\r\nxlwt: 1.0.0\r\nxlsxwriter: 0.8.4\r\nlxml: 3.5.0\r\nbs4: 4.4.1\r\nhtml5lib: None\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: 1.0.11\r\npymysql: None\r\npsycopg2: None\r\nJinja2: 2.8\r\n", + "score": 0.7501816 + }, + { + "url": "https://api.github.com/repos/NLeSC/software.esciencecenter.nl/issues/87", + "repository_url": "https://api.github.com/repos/NLeSC/software.esciencecenter.nl", + "labels_url": "https://api.github.com/repos/NLeSC/software.esciencecenter.nl/issues/87/labels{/name}", + "comments_url": "https://api.github.com/repos/NLeSC/software.esciencecenter.nl/issues/87/comments", + "events_url": "https://api.github.com/repos/NLeSC/software.esciencecenter.nl/issues/87/events", + "html_url": "https://github.com/NLeSC/software.esciencecenter.nl/issues/87", + "id": 147406573, + "number": 87, + "title": "estep validation error windows", + "user": { + "login": "sonjageorgievska", + "id": 12493538, + "avatar_url": "https://avatars.githubusercontent.com/u/12493538?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sonjageorgievska", + "html_url": "https://github.com/sonjageorgievska", + "followers_url": "https://api.github.com/users/sonjageorgievska/followers", + "following_url": "https://api.github.com/users/sonjageorgievska/following{/other_user}", + "gists_url": "https://api.github.com/users/sonjageorgievska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sonjageorgievska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sonjageorgievska/subscriptions", + "organizations_url": "https://api.github.com/users/sonjageorgievska/orgs", + "repos_url": "https://api.github.com/users/sonjageorgievska/repos", + "events_url": "https://api.github.com/users/sonjageorgievska/events{/privacy}", + "received_events_url": "https://api.github.com/users/sonjageorgievska/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/NLeSC/software.esciencecenter.nl/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/NLeSC/software.esciencecenter.nl/labels/validator", + "name": "validator", + "color": "fef2c0" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "sonjageorgievska", + "id": 12493538, + "avatar_url": "https://avatars.githubusercontent.com/u/12493538?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sonjageorgievska", + "html_url": "https://github.com/sonjageorgievska", + "followers_url": "https://api.github.com/users/sonjageorgievska/followers", + "following_url": "https://api.github.com/users/sonjageorgievska/following{/other_user}", + "gists_url": "https://api.github.com/users/sonjageorgievska/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sonjageorgievska/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sonjageorgievska/subscriptions", + "organizations_url": "https://api.github.com/users/sonjageorgievska/orgs", + "repos_url": "https://api.github.com/users/sonjageorgievska/repos", + "events_url": "https://api.github.com/users/sonjageorgievska/events{/privacy}", + "received_events_url": "https://api.github.com/users/sonjageorgievska/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 1, + "created_at": "2016-04-11T12:03:21Z", + "updated_at": "2016-04-12T10:49:25Z", + "closed_at": null, + "body": "```\r\nC:\\Users\\sonja\\Documents\\GitHub\\software.esciencecenter.nl>estep validate -v\r\nLocating local references\r\nCollection: software\r\nTraceback (most recent call last):\r\n File \"C:\\Users\\sonja\\Anaconda3\\Scripts\\estep-script.py\", line 9, in \r\n load_entry_point('estep', 'console_scripts', 'estep')()\r\n File \"c:\\users\\sonja\\documents\\software.esciencecenter.nl\\estep\\script.py\", li\r\nne 109, in main\r\n resolve_local=not arguments['--no-local-resolve'])\r\n File \"c:\\users\\sonja\\documents\\software.esciencecenter.nl\\estep\\script.py\", li\r\nne 74, in validate\r\n for docname, document in collection.documents():\r\n File \"c:\\users\\sonja\\documents\\software.esciencecenter.nl\\estep\\script.py\", li\r\nne 41, in documents\r\n return recurseDirectory(self.directory, self.name)\r\n File \"c:\\users\\sonja\\documents\\software.esciencecenter.nl\\estep\\script.py\", li\r\nne 119, in recurseDirectory\r\n obj.append((path, jekyllfile2object(path, schemaType=schemaType)))\r\n File \"c:\\users\\sonja\\documents\\software.esciencecenter.nl\\estep\\format.py\", li\r\nne 57, in jekyllfile2object\r\n obj = jekyll2object(f.read(), contentProperty)\r\n File \"C:\\Users\\sonja\\Anaconda3\\lib\\encodings\\cp1252.py\", line 23, in decode\r\n return codecs.charmap_decode(input,self.errors,decoding_table)[0]\r\nUnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1509: cha\r\nracter maps to \r\n```", + "score": 5.62135 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/12898", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/12898/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/12898/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/12898/events", + "html_url": "https://github.com/pydata/pandas/issues/12898", + "id": 148296232, + "number": 12898, + "title": "bugs when groupby/aggregate on columns with datetime64[ns, timezone]", + "user": { + "login": "sdementen", + "id": 1304950, + "avatar_url": "https://avatars.githubusercontent.com/u/1304950?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sdementen", + "html_url": "https://github.com/sdementen", + "followers_url": "https://api.github.com/users/sdementen/followers", + "following_url": "https://api.github.com/users/sdementen/following{/other_user}", + "gists_url": "https://api.github.com/users/sdementen/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sdementen/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sdementen/subscriptions", + "organizations_url": "https://api.github.com/users/sdementen/orgs", + "repos_url": "https://api.github.com/users/sdementen/repos", + "events_url": "https://api.github.com/users/sdementen/events{/privacy}", + "received_events_url": "https://api.github.com/users/sdementen/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Medium", + "name": "Effort Medium", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Groupby", + "name": "Groupby", + "color": "729FCF" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Timezones", + "name": "Timezones", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 2, + "created_at": "2016-04-14T09:00:28Z", + "updated_at": "2016-04-14T11:22:35Z", + "closed_at": null, + "body": "When aggregating a column with dtype datetime64[ns, timezone], pandas does not handle properly tz information. It looks like as if pandas was dropping the timezone info (ie doing its calculation on the UTC values) and then localizing the date to the original timezone,i.e. doing something like\r\n`column_with_UTC_dates_in_naive_format.tz_localize(timezone)`\r\ninstead of \r\n`column_with_UTC_dates_in_naive_format.tz_localize(\"UTC\").tz_convert(timezone)`\r\n\r\nThis buggy behavior is even more striking when running the sample with\r\n`idx = pandas.date_range(\"2016-03-27\", \"2016-03-29\", freq=\"H\", closed=\"left\", tz=\"Europe/Brussels\")` (cover the DST change) as the naive UTC date \"2016-03-27 03:00\" cannot be localized to the timezone as it is not recognized. In this case, the dtype of the column is not anymore datetime64[ns, timezone] but just int64.\r\n\r\n#### Code Sample, a copy-pastable example if possible\r\n```\r\n# create a DataFrame with a \"time\" column filled with localized datetime64 on hourly basis\r\nidx = pandas.date_range(\"2016-01-01\", \"2016-01-03\", freq=\"H\", closed=\"left\",tz=\"Europe/Brussels\")\r\ndf = pandas.Series(idx, index=idx, name=\"time\").to_frame()\r\n# calculate some min and max of \"time\" column per hour of the day\r\ndf_agg = df.groupby(idx.hour).aggregate([\"min\",\"max\"])\r\ndf_agg.info()\r\nprint df_agg\r\n```\r\n\r\n#### Expected Output\r\n```\r\n\r\nDatetimeIndex: 48 entries, 2016-01-01 00:00:00+01:00 to 2016-01-02 23:00:00+01:00\r\nFreq: H\r\nData columns (total 1 columns):\r\ntime 48 non-null datetime64[ns, Europe/Brussels]\r\ndtypes: datetime64[ns, Europe/Brussels](1)\r\nmemory usage: 768.0 bytes\r\n\r\nInt64Index: 24 entries, 0 to 23\r\nData columns (total 2 columns):\r\n(time, min) 24 non-null datetime64[ns, Europe/Brussels]\r\n(time, max) 24 non-null datetime64[ns, Europe/Brussels]\r\ndtypes: datetime64[ns, Europe/Brussels](2)\r\nmemory usage: 576.0 bytes\r\n time \r\n min max\r\n0 2015-12-31 23:00:00+01:00 2016-01-01 23:00:00+01:00\r\n1 2016-01-01 00:00:00+01:00 2016-01-02 00:00:00+01:00\r\n2 2016-01-01 01:00:00+01:00 2016-01-02 01:00:00+01:00\r\n3 2016-01-01 02:00:00+01:00 2016-01-02 02:00:00+01:00\r\n4 2016-01-01 03:00:00+01:00 2016-01-02 03:00:00+01:00\r\n5 2016-01-01 04:00:00+01:00 2016-01-02 04:00:00+01:00\r\n6 2016-01-01 05:00:00+01:00 2016-01-02 05:00:00+01:00\r\n7 2016-01-01 06:00:00+01:00 2016-01-02 06:00:00+01:00\r\n8 2016-01-01 07:00:00+01:00 2016-01-02 07:00:00+01:00\r\n9 2016-01-01 08:00:00+01:00 2016-01-02 08:00:00+01:00\r\n10 2016-01-01 09:00:00+01:00 2016-01-02 09:00:00+01:00\r\n11 2016-01-01 10:00:00+01:00 2016-01-02 10:00:00+01:00\r\n12 2016-01-01 11:00:00+01:00 2016-01-02 11:00:00+01:00\r\n13 2016-01-01 12:00:00+01:00 2016-01-02 12:00:00+01:00\r\n14 2016-01-01 13:00:00+01:00 2016-01-02 13:00:00+01:00\r\n15 2016-01-01 14:00:00+01:00 2016-01-02 14:00:00+01:00\r\n16 2016-01-01 15:00:00+01:00 2016-01-02 15:00:00+01:00\r\n17 2016-01-01 16:00:00+01:00 2016-01-02 16:00:00+01:00\r\n18 2016-01-01 17:00:00+01:00 2016-01-02 17:00:00+01:00\r\n19 2016-01-01 18:00:00+01:00 2016-01-02 18:00:00+01:00\r\n20 2016-01-01 19:00:00+01:00 2016-01-02 19:00:00+01:00\r\n21 2016-01-01 20:00:00+01:00 2016-01-02 20:00:00+01:00\r\n22 2016-01-01 21:00:00+01:00 2016-01-02 21:00:00+01:00\r\n23 2016-01-01 22:00:00+01:00 2016-01-02 22:00:00+01:00\r\n```\r\n\r\n#### output of ``pd.show_versions()``\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 2.7.11.final.0\r\npython-bits: 32\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 61 Stepping 4, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.18.0\r\nnose: 1.3.7\r\npip: 8.1.1\r\nsetuptools: 20.6.7\r\nCython: None\r\nnumpy: 1.10.4\r\nscipy: 0.17.0\r\nstatsmodels: 0.6.1\r\nxarray: None\r\nIPython: None\r\nsphinx: None\r\npatsy: 0.4.0\r\ndateutil: 2.5.0\r\npytz: 2016.1\r\nblosc: None\r\nbottleneck: None\r\ntables: 3.2.2\r\nnumexpr: 2.4.6\r\nmatplotlib: 1.5.1\r\nopenpyxl: 2.3.2\r\nxlrd: 0.9.4\r\nxlwt: None\r\nxlsxwriter: None\r\nlxml: None\r\nbs4: None\r\nhtml5lib: None\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: 1.0.12\r\npymysql: None\r\npsycopg2: None\r\njinja2: 2.8\r\nboto: None\r\nNone\r\n\r\n", + "score": 0.42235348 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/32717", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/32717/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/32717/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/32717/events", + "html_url": "https://github.com/saltstack/salt/issues/32717", + "id": 149811075, + "number": 32717, + "title": "pycurl in salt-minion windows 2016.3.0rc2", + "user": { + "login": "emeygret", + "id": 15383526, + "avatar_url": "https://avatars.githubusercontent.com/u/15383526?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/emeygret", + "html_url": "https://github.com/emeygret", + "followers_url": "https://api.github.com/users/emeygret/followers", + "following_url": "https://api.github.com/users/emeygret/following{/other_user}", + "gists_url": "https://api.github.com/users/emeygret/gists{/gist_id}", + "starred_url": "https://api.github.com/users/emeygret/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/emeygret/subscriptions", + "organizations_url": "https://api.github.com/users/emeygret/orgs", + "repos_url": "https://api.github.com/users/emeygret/repos", + "events_url": "https://api.github.com/users/emeygret/events{/privacy}", + "received_events_url": "https://api.github.com/users/emeygret/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Fixed%20Pending%20Verification", + "name": "Fixed Pending Verification", + "color": "d4c5f9" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P3", + "name": "P3", + "color": "0a3d77" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Packaging", + "name": "Packaging", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Platform", + "name": "Platform", + "color": "fef2c0" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/TEAM%20Platform", + "name": "TEAM Platform", + "color": "A9A9A9" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Windows", + "name": "Windows", + "color": "006b75" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "twangboy", + "id": 9383935, + "avatar_url": "https://avatars.githubusercontent.com/u/9383935?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/twangboy", + "html_url": "https://github.com/twangboy", + "followers_url": "https://api.github.com/users/twangboy/followers", + "following_url": "https://api.github.com/users/twangboy/following{/other_user}", + "gists_url": "https://api.github.com/users/twangboy/gists{/gist_id}", + "starred_url": "https://api.github.com/users/twangboy/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/twangboy/subscriptions", + "organizations_url": "https://api.github.com/users/twangboy/orgs", + "repos_url": "https://api.github.com/users/twangboy/repos", + "events_url": "https://api.github.com/users/twangboy/events{/privacy}", + "received_events_url": "https://api.github.com/users/twangboy/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/82", + "html_url": "https://github.com/saltstack/salt/milestones/C%209", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/82/labels", + "id": 1783248, + "number": 82, + "title": "C 9", + "description": "", + "creator": { + "login": "meggiebot", + "id": 12242451, + "avatar_url": "https://avatars.githubusercontent.com/u/12242451?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/meggiebot", + "html_url": "https://github.com/meggiebot", + "followers_url": "https://api.github.com/users/meggiebot/followers", + "following_url": "https://api.github.com/users/meggiebot/following{/other_user}", + "gists_url": "https://api.github.com/users/meggiebot/gists{/gist_id}", + "starred_url": "https://api.github.com/users/meggiebot/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/meggiebot/subscriptions", + "organizations_url": "https://api.github.com/users/meggiebot/orgs", + "repos_url": "https://api.github.com/users/meggiebot/repos", + "events_url": "https://api.github.com/users/meggiebot/events{/privacy}", + "received_events_url": "https://api.github.com/users/meggiebot/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 4, + "closed_issues": 22, + "state": "open", + "created_at": "2016-05-23T17:20:41Z", + "updated_at": "2016-06-13T23:25:19Z", + "due_on": "2016-06-03T06:00:00Z", + "closed_at": null + }, + "comments": 10, + "created_at": "2016-04-20T15:55:41Z", + "updated_at": "2016-05-24T21:19:14Z", + "closed_at": null, + "body": "my server is on debian jessie with last released package : 2015.8.8.2\r\nI upgrade one minion windows for this test, I don't think it is an issue.\r\n\r\nI would like to use win_pkg.install behind an http proxy, it doesn't work on 2015.8 so I would try the new option that is in 2016.3.\r\n\r\nI configure proxy_host: and proxy_port: in minion conf file (no need username and pass) \r\n\r\nand I have this error : \r\nMinionError: Error: proxy_host and proxy_port has been set. This requires pycurl, but the pycurl library does not seem to be installed reading http://www.uvnc.eu/download/1205/UltraVNC_1_2_05_X64_Setup.exe\r\n\r\nmaybe it would be a good Idea to package pycurl in msi ?\r\n\r\n", + "score": 4.039646 + }, + { + "url": "https://api.github.com/repos/giampaolo/psutil/issues/810", + "repository_url": "https://api.github.com/repos/giampaolo/psutil", + "labels_url": "https://api.github.com/repos/giampaolo/psutil/issues/810/labels{/name}", + "comments_url": "https://api.github.com/repos/giampaolo/psutil/issues/810/comments", + "events_url": "https://api.github.com/repos/giampaolo/psutil/issues/810/events", + "html_url": "https://github.com/giampaolo/psutil/issues/810", + "id": 150993162, + "number": 810, + "title": "Unable to install psutil 4.1.0 on windows", + "user": { + "login": "Mark-Booth", + "id": 1576793, + "avatar_url": "https://avatars.githubusercontent.com/u/1576793?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Mark-Booth", + "html_url": "https://github.com/Mark-Booth", + "followers_url": "https://api.github.com/users/Mark-Booth/followers", + "following_url": "https://api.github.com/users/Mark-Booth/following{/other_user}", + "gists_url": "https://api.github.com/users/Mark-Booth/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Mark-Booth/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Mark-Booth/subscriptions", + "organizations_url": "https://api.github.com/users/Mark-Booth/orgs", + "repos_url": "https://api.github.com/users/Mark-Booth/repos", + "events_url": "https://api.github.com/users/Mark-Booth/events{/privacy}", + "received_events_url": "https://api.github.com/users/Mark-Booth/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/giampaolo/psutil/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/giampaolo/psutil/labels/OpSys-Windows", + "name": "OpSys-Windows", + "color": "FFFFFF" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 19, + "created_at": "2016-04-25T22:02:08Z", + "updated_at": "2016-06-19T20:08:41Z", + "closed_at": null, + "body": "Similar to issue #706 the current version of psutil doesn't appear to have windows installers.\r\n\r\nIf I do `pip install --user psutil` it gives me a `error: Unable to find vcvarsall.bat`, but it works fine if I do `pip install --user psutil==4.0.0`.", + "score": 5.6210237 + }, + { + "url": "https://api.github.com/repos/Castronova/EMIT/issues/439", + "repository_url": "https://api.github.com/repos/Castronova/EMIT", + "labels_url": "https://api.github.com/repos/Castronova/EMIT/issues/439/labels{/name}", + "comments_url": "https://api.github.com/repos/Castronova/EMIT/issues/439/comments", + "events_url": "https://api.github.com/repos/Castronova/EMIT/issues/439/events", + "html_url": "https://github.com/Castronova/EMIT/issues/439", + "id": 151766977, + "number": 439, + "title": "Installer is broken", + "user": { + "login": "farrieta9", + "id": 12265327, + "avatar_url": "https://avatars.githubusercontent.com/u/12265327?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/farrieta9", + "html_url": "https://github.com/farrieta9", + "followers_url": "https://api.github.com/users/farrieta9/followers", + "following_url": "https://api.github.com/users/farrieta9/following{/other_user}", + "gists_url": "https://api.github.com/users/farrieta9/gists{/gist_id}", + "starred_url": "https://api.github.com/users/farrieta9/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/farrieta9/subscriptions", + "organizations_url": "https://api.github.com/users/farrieta9/orgs", + "repos_url": "https://api.github.com/users/farrieta9/repos", + "events_url": "https://api.github.com/users/farrieta9/events{/privacy}", + "received_events_url": "https://api.github.com/users/farrieta9/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/Castronova/EMIT/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/Castronova/EMIT/labels/Needs%20OSX%20Testing", + "name": "Needs OSX Testing", + "color": "b60205" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "farrieta9", + "id": 12265327, + "avatar_url": "https://avatars.githubusercontent.com/u/12265327?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/farrieta9", + "html_url": "https://github.com/farrieta9", + "followers_url": "https://api.github.com/users/farrieta9/followers", + "following_url": "https://api.github.com/users/farrieta9/following{/other_user}", + "gists_url": "https://api.github.com/users/farrieta9/gists{/gist_id}", + "starred_url": "https://api.github.com/users/farrieta9/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/farrieta9/subscriptions", + "organizations_url": "https://api.github.com/users/farrieta9/orgs", + "repos_url": "https://api.github.com/users/farrieta9/repos", + "events_url": "https://api.github.com/users/farrieta9/events{/privacy}", + "received_events_url": "https://api.github.com/users/farrieta9/received_events", + "type": "User", + "site_admin": false + }, + "milestone": null, + "comments": 2, + "created_at": "2016-04-28T23:41:09Z", + "updated_at": "2016-05-25T17:39:11Z", + "closed_at": null, + "body": "- [ ] No module named Crypto.Cipher. This is for windows\n tried pip install pycrypto but it did not work.\n\n- [ ] Cannot build build-dev-environment.\n I type the following:\n ./build-dev-environment.sh emit emit-env-osx \nI get permission denied and when i use sudo it says command not found\n\n- [ ] matplotlib.ft2font.so Reason: image not found", + "score": 1.8846201 + }, + { + "url": "https://api.github.com/repos/havardgulldahl/jottalib/issues/112", + "repository_url": "https://api.github.com/repos/havardgulldahl/jottalib", + "labels_url": "https://api.github.com/repos/havardgulldahl/jottalib/issues/112/labels{/name}", + "comments_url": "https://api.github.com/repos/havardgulldahl/jottalib/issues/112/comments", + "events_url": "https://api.github.com/repos/havardgulldahl/jottalib/issues/112/events", + "html_url": "https://github.com/havardgulldahl/jottalib/issues/112", + "id": 153451741, + "number": 112, + "title": "Problem installing on Win 7 - fails because of xattr ", + "user": { + "login": "sdalgard", + "id": 2270169, + "avatar_url": "https://avatars.githubusercontent.com/u/2270169?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/sdalgard", + "html_url": "https://github.com/sdalgard", + "followers_url": "https://api.github.com/users/sdalgard/followers", + "following_url": "https://api.github.com/users/sdalgard/following{/other_user}", + "gists_url": "https://api.github.com/users/sdalgard/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sdalgard/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sdalgard/subscriptions", + "organizations_url": "https://api.github.com/users/sdalgard/orgs", + "repos_url": "https://api.github.com/users/sdalgard/repos", + "events_url": "https://api.github.com/users/sdalgard/events{/privacy}", + "received_events_url": "https://api.github.com/users/sdalgard/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/havardgulldahl/jottalib/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/havardgulldahl/jottalib/labels/windows", + "name": "windows", + "color": "fbca04" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2016-05-06T13:31:50Z", + "updated_at": "2016-06-11T16:47:18Z", + "closed_at": null, + "body": "Hi,\r\nThank you for making this functionality available :-)\r\nI am trying to test jottalib on windows 7, but the installation fails:\r\n\r\nI have first installed Python 3.5.1 and the started on installing jottalib.\r\n\r\nWhen running \"pip install jottalib[scanner]\" , it ends with the message :\r\nCommand \"python setup.py egg_info\" failed with error code 1 in C:\\Users\\steffend\\AppData\\Local\\Temp\\pip-build-5028kyzf\\xattr\\\r\n\r\nWhen searching for issues about xattr I find that its not supported \r\nhttps://github.com/xattr/xattr/issues/17\r\n\r\nIs there a way around this?\r\n\r\nBest regards\r\nSteffen Dalgard\r\n\r\nI have \r\nHere is the complete printout from the pip command:\r\nCollecting jottalib[scanner]\r\n Using cached jottalib-0.4.2-1.tar.gz\r\nCollecting requests (from jottalib[scanner])\r\n Using cached requests-2.10.0-py2.py3-none-any.whl\r\nCollecting requests-toolbelt (from jottalib[scanner])\r\n Using cached requests_toolbelt-0.6.1-py2.py3-none-any.whl\r\nCollecting certifi==2015.4.28 (from jottalib[scanner])\r\n Using cached certifi-2015.04.28-py2.py3-none-any.whl\r\nCollecting clint (from jottalib[scanner])\r\n Using cached clint-0.5.1.tar.gz\r\nCollecting python-dateutil (from jottalib[scanner])\r\n Using cached python_dateutil-2.5.3-py2.py3-none-any.whl\r\nCollecting humanize (from jottalib[scanner])\r\n Using cached humanize-0.5.1.tar.gz\r\nCollecting lxml (from jottalib[scanner])\r\n Using cached lxml-3.6.0.tar.gz\r\nCollecting six (from jottalib[scanner])\r\n Using cached six-1.10.0-py2.py3-none-any.whl\r\nCollecting xattr (from jottalib[scanner])\r\n Using cached xattr-0.8.0.tar.gz\r\n Complete output from command python setup.py egg_info:\r\n _cffi_backend.c\r\n ffi.c\r\n prep_cif.c\r\n types.c\r\n win32.c\r\n Creating library build\\temp.win32-3.5\\Release\\c\\_cffi_backend.cp35-win32.lib and object build\\temp.win32-3.5\\Release\\c\\_cffi_backend.cp35-win32.exp\r\n Generating code\r\n Finished generating code\r\n \r\n Installed c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\cffi-1.6.0-py3.5-win32.egg\r\n Searching for pycparser\r\n Reading https://pypi.python.org/simple/pycparser/\r\n Best match: pycparser 2.14\r\n Downloading https://pypi.python.org/packages/6d/31/666614af3db0acf377876d48688c5d334b6e493b96d21aa7d332169bee50/pycparser-2.14.tar.gz#md5=a2bc8d28c923b4fe2b2c3b4b51a4f935\r\n Processing pycparser-2.14.tar.gz\r\n Writing C:\\Users\\steffend\\AppData\\Local\\Temp\\easy_install-fh60yv2k\\pycparser-2.14\\setup.cfg\r\n Running pycparser-2.14\\setup.py -q bdist_egg --dist-dir C:\\Users\\steffend\\AppData\\Local\\Temp\\easy_install-fh60yv2k\\pycparser-2.14\\egg-dist-tmp-pzqwd9hz\r\n warning: no previously-included files matching 'yacctab.*' found under directory 'tests'\r\n warning: no previously-included files matching 'lextab.*' found under directory 'tests'\r\n warning: no previously-included files matching 'yacctab.*' found under directory 'examples'\r\n warning: no previously-included files matching 'lextab.*' found under directory 'examples'\r\n zip_safe flag not set; analyzing archive contents...\r\n Copying pycparser-2.14-py3.5.egg to c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\r\n \r\n Installed c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\pycparser-2.14-py3.5.egg\r\n running egg_info\r\n creating pip-egg-info\\xattr.egg-info\r\n writing pip-egg-info\\xattr.egg-info\\PKG-INFO\r\n writing dependency_links to pip-egg-info\\xattr.egg-info\\dependency_links.txt\r\n writing top-level names to pip-egg-info\\xattr.egg-info\\top_level.txt\r\n writing entry points to pip-egg-info\\xattr.egg-info\\entry_points.txt\r\n writing requirements to pip-egg-info\\xattr.egg-info\\requires.txt\r\n writing manifest file 'pip-egg-info\\xattr.egg-info\\SOURCES.txt'\r\n warning: manifest_maker: standard file '-c' not found\r\n \r\n _cffi__x480bb259x3f40c4a9.c\r\n xattr\\__pycache__\\_cffi__x480bb259x3f40c4a9.c(220): fatal error C1083: Cannot open include file: 'sys/xattr.h': No such file or directory\r\n Traceback (most recent call last):\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\_msvccompiler.py\", line 395, in compile\r\n self.spawn(args)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\_msvccompiler.py\", line 514, in spawn\r\n return super().spawn(cmd)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\ccompiler.py\", line 909, in spawn\r\n spawn(cmd, dry_run=self.dry_run)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\spawn.py\", line 38, in spawn\r\n _spawn_nt(cmd, search_path, dry_run=dry_run)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\spawn.py\", line 81, in _spawn_nt\r\n \"command %r failed with exit status %d\" % (cmd, rc))\r\n distutils.errors.DistutilsExecError: command 'D:\\\\Program Files (x86)\\\\Microsoft Visual Studio 14.0\\\\VC\\\\BIN\\\\cl.exe' failed with exit status 2\r\n \r\n During handling of the above exception, another exception occurred:\r\n \r\n Traceback (most recent call last):\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\cffi-1.6.0-py3.5-win32.egg\\cffi\\ffiplatform.py\", line 55, in _build\r\n dist.run_command('build_ext')\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\dist.py\", line 974, in run_command\r\n cmd_obj.run()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\build_ext.py\", line 49, in run\r\n _build_ext.run(self)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\command\\build_ext.py\", line 338, in run\r\n self.build_extensions()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\command\\build_ext.py\", line 447, in build_extensions\r\n self._build_extensions_serial()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\command\\build_ext.py\", line 472, in _build_extensions_serial\r\n self.build_extension(ext)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\build_ext.py\", line 174, in build_extension\r\n _build_ext.build_extension(self, ext)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\command\\build_ext.py\", line 532, in build_extension\r\n depends=ext.depends)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\_msvccompiler.py\", line 397, in compile\r\n raise CompileError(msg)\r\n distutils.errors.CompileError: command 'D:\\\\Program Files (x86)\\\\Microsoft Visual Studio 14.0\\\\VC\\\\BIN\\\\cl.exe' failed with exit status 2\r\n \r\n During handling of the above exception, another exception occurred:\r\n \r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n File \"C:\\Users\\steffend\\AppData\\Local\\Temp\\pip-build-_f5qidb7\\xattr\\setup.py\", line 67, in \r\n cmdclass={'build': cffi_build},\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\core.py\", line 148, in setup\r\n dist.run_commands()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\dist.py\", line 955, in run_commands\r\n self.run_command(cmd)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\dist.py\", line 974, in run_command\r\n cmd_obj.run()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\egg_info.py\", line 193, in run\r\n self.find_sources()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\egg_info.py\", line 216, in find_sources\r\n mm.run()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\egg_info.py\", line 300, in run\r\n self.add_defaults()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\egg_info.py\", line 329, in add_defaults\r\n sdist.add_defaults(self)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\sdist.py\", line 120, in add_defaults\r\n build_py = self.get_finalized_command('build_py')\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\cmd.py\", line 299, in get_finalized_command\r\n cmd_obj.ensure_finalized()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\cmd.py\", line 107, in ensure_finalized\r\n self.finalize_options()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\site-packages\\setuptools\\command\\build_py.py\", line 33, in finalize_options\r\n orig.build_py.finalize_options(self)\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\command\\build_py.py\", line 45, in finalize_options\r\n ('force', 'force'))\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\cmd.py\", line 287, in set_undefined_options\r\n src_cmd_obj.ensure_finalized()\r\n File \"c:\\users\\steffend\\appdata\\local\\programs\\python\\python35-32\\lib\\distutils\\cmd.py\", line 107, in ensure_finalized\r\n self.finalize_options()\r\n File \"C:\\Users\\steffend\\AppData\\Local\\Temp\\pip-build-_f5qidb7\\xattr\\setup.py\", line 15, in finalize_options\r\n from xattr.lib import ffi\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\xattr\\__init__.py\", line 12, in \r\n from .lib import (XATTR_NOFOLLOW, XATTR_CREATE, XATTR_REPLACE,\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\xattr\\lib.py\", line 596, in \r\n \"\"\", ext_package='xattr')\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\cffi-1.6.0-py3.5-win32.egg\\cffi\\api.py\", line 450, in verify\r\n lib = self.verifier.load_library()\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\cffi-1.6.0-py3.5-win32.egg\\cffi\\verifier.py\", line 113, in load_library\r\n self._compile_module()\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\cffi-1.6.0-py3.5-win32.egg\\cffi\\verifier.py\", line 210, in _compile_module\r\n outputfilename = ffiplatform.compile(tmpdir, self.get_extension())\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\cffi-1.6.0-py3.5-win32.egg\\cffi\\ffiplatform.py\", line 29, in compile\r\n outputfilename = _build(tmpdir, ext, compiler_verbose)\r\n File \"c:\\users\\steffend\\appdata\\local\\temp\\pip-build-_f5qidb7\\xattr\\.eggs\\cffi-1.6.0-py3.5-win32.egg\\cffi\\ffiplatform.py\", line 62, in _build\r\n raise VerificationError('%s: %s' % (e.__class__.__name__, e))\r\n cffi.ffiplatform.VerificationError: CompileError: command 'D:\\\\Program Files (x86)\\\\Microsoft Visual Studio 14.0\\\\VC\\\\BIN\\\\cl.exe' failed with exit status 2\r\n \r\n ----------------------------------------", + "score": 2.0784333 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/13193", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/13193/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/13193/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/13193/events", + "html_url": "https://github.com/pydata/pandas/issues/13193", + "id": 154940933, + "number": 13193, + "title": "BUG: merging on int32 platforms with large blocks", + "user": { + "login": "randomgambit", + "id": 8282510, + "avatar_url": "https://avatars.githubusercontent.com/u/8282510?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/randomgambit", + "html_url": "https://github.com/randomgambit", + "followers_url": "https://api.github.com/users/randomgambit/followers", + "following_url": "https://api.github.com/users/randomgambit/following{/other_user}", + "gists_url": "https://api.github.com/users/randomgambit/gists{/gist_id}", + "starred_url": "https://api.github.com/users/randomgambit/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/randomgambit/subscriptions", + "organizations_url": "https://api.github.com/users/randomgambit/orgs", + "repos_url": "https://api.github.com/users/randomgambit/repos", + "events_url": "https://api.github.com/users/randomgambit/events{/privacy}", + "received_events_url": "https://api.github.com/users/randomgambit/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Advanced", + "name": "Difficulty Advanced", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Medium", + "name": "Effort Medium", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Reshaping", + "name": "Reshaping", + "color": "02d7e1" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 14, + "created_at": "2016-05-16T00:21:09Z", + "updated_at": "2016-05-16T13:56:18Z", + "closed_at": null, + "body": "Hello everyone,\r\n\r\nI am trying to merge a ridiculously large dataframe with another ridiculously smaller one and I get\r\n\r\n`df=df.merge(slave,left_on='buyer',right_on='NAME',how='left')`\r\n`OverflowError: Python int too large to convert to C long`\r\n\r\nRam is filled at 56% prior to the merge. Am I hitting some limitations here?\r\n\r\nmaster dataframe\r\n```\r\ndf.info()\r\n\r\nInt64Index: 80162624 entries, 0 to 90320839\r\nData columns (total 38 columns):\r\nindex int64\r\n\r\ndtypes: datetime64[ns](2), float32(1), int64(3), object(32)\r\nmemory usage: 23.0+ GB\r\n```\r\n\r\n```\r\ndataframe I would like to merge to the master\r\n\r\nslave.info()\r\n\r\nRangeIndex: 55394 entries, 0 to 55393\r\nData columns (total 6 columns):\r\ndtypes: object(6)\r\nmemory usage: 2.5+ MB\r\n```\r\n\r\nI am using the latest Anaconda distribution (that is, with Pandas 18.0)\r\nThanks for your help!\r\n", + "score": 0.47051898 + }, + { + "url": "https://api.github.com/repos/obspy/obspy/issues/1410", + "repository_url": "https://api.github.com/repos/obspy/obspy", + "labels_url": "https://api.github.com/repos/obspy/obspy/issues/1410/labels{/name}", + "comments_url": "https://api.github.com/repos/obspy/obspy/issues/1410/comments", + "events_url": "https://api.github.com/repos/obspy/obspy/issues/1410/events", + "html_url": "https://github.com/obspy/obspy/issues/1410", + "id": 155334727, + "number": 1410, + "title": "Handling of invalid times when parsing SEED volumes (xseed).", + "user": { + "login": "petrrr", + "id": 3065632, + "avatar_url": "https://avatars.githubusercontent.com/u/3065632?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/petrrr", + "html_url": "https://github.com/petrrr", + "followers_url": "https://api.github.com/users/petrrr/followers", + "following_url": "https://api.github.com/users/petrrr/following{/other_user}", + "gists_url": "https://api.github.com/users/petrrr/gists{/gist_id}", + "starred_url": "https://api.github.com/users/petrrr/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/petrrr/subscriptions", + "organizations_url": "https://api.github.com/users/petrrr/orgs", + "repos_url": "https://api.github.com/users/petrrr/repos", + "events_url": "https://api.github.com/users/petrrr/events{/privacy}", + "received_events_url": "https://api.github.com/users/petrrr/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/obspy/obspy/labels/.io.xseed", + "name": ".io.xseed", + "color": "0404B4" + }, + { + "url": "https://api.github.com/repos/obspy/obspy/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/obspy/obspy/labels/external", + "name": "external", + "color": "595454" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/obspy/obspy/milestones/13", + "html_url": "https://github.com/obspy/obspy/milestones/1.0.2", + "labels_url": "https://api.github.com/repos/obspy/obspy/milestones/13/labels", + "id": 1383705, + "number": 13, + "title": "1.0.2", + "description": "", + "creator": { + "login": "megies", + "id": 1842780, + "avatar_url": "https://avatars.githubusercontent.com/u/1842780?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/megies", + "html_url": "https://github.com/megies", + "followers_url": "https://api.github.com/users/megies/followers", + "following_url": "https://api.github.com/users/megies/following{/other_user}", + "gists_url": "https://api.github.com/users/megies/gists{/gist_id}", + "starred_url": "https://api.github.com/users/megies/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/megies/subscriptions", + "organizations_url": "https://api.github.com/users/megies/orgs", + "repos_url": "https://api.github.com/users/megies/repos", + "events_url": "https://api.github.com/users/megies/events{/privacy}", + "received_events_url": "https://api.github.com/users/megies/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 37, + "closed_issues": 30, + "state": "open", + "created_at": "2015-10-29T15:43:09Z", + "updated_at": "2016-06-21T08:23:00Z", + "due_on": null, + "closed_at": null + }, + "comments": 1, + "created_at": "2016-05-17T18:55:45Z", + "updated_at": "2016-05-18T10:04:28Z", + "closed_at": null, + "body": "I came across a SEED dataless file which had time set to `24:00:00.0000` in epoch time spans. Even if to some extent it might make sense to indicate the the time span ends with that day, according to the SEED Manual this is not really standard compliant. \r\n\r\nNonetheless, some programs seems not to enforce this or are resilient, e.g. PDCC and some seiscomp tools. What adds a bit to the confusion and makes it difficult to understand the issue is that Obspy in such a case just silently ignores the value. So if the time is supposed to close an epoch, the parse representation is interpreted as an open ended epoch.\r\n\r\nTherefore, I would propose that the behavior wrt parsing invalid datetime value is somewhat modified. I see the following possibilities:\r\n * generate a warning or even an error so that it becomes obvious that the file is not fully compliant;\r\n * accept some invalid values;\r\n * accept some invalid values and generate a warning;\r\n\r\nNo clear idea what is the best, therefore I start this with as issue. I can provide an PR, once this is discussed and settled.\r\n\r\nTo help us understand and resolve your issue please check that you have provided the information below.\r\n\r\n- [ ] ObsPy version, Python version and Platform (Windows, OSX, Linux ...)\r\n\r\nVersion 1.0.1, Python 3.4.4, OSX/Macports\r\n\r\n- [ ] How did you install ObsPy and Python (pip, anaconda, from source ...)\r\n\r\nMacports\r\n\r\n- [ ] If possible please supply a [Short, Self Contained, Correct, Example](http://sscce.org/) that demonstrates the issue i.e a small piece of code which reproduces the issue and can be run with out any other (or as few as possible) external dependencies.\r\n\r\nWill provide an example dataless if this is relant\r\n\r\n- [ ] If this is a regression (Used to work in an earlier version of ObsPy), please note where it used to work.\r\n\r\nNot investigated\r\n", + "score": 0.84661096 + }, + { + "url": "https://api.github.com/repos/skuschel/postpic/issues/55", + "repository_url": "https://api.github.com/repos/skuschel/postpic", + "labels_url": "https://api.github.com/repos/skuschel/postpic/issues/55/labels{/name}", + "comments_url": "https://api.github.com/repos/skuschel/postpic/issues/55/comments", + "events_url": "https://api.github.com/repos/skuschel/postpic/issues/55/events", + "html_url": "https://github.com/skuschel/postpic/issues/55", + "id": 155362433, + "number": 55, + "title": "provide MS Windows compatibilty, i.e. using python(x,y)", + "user": { + "login": "gloomy-penguin", + "id": 8459162, + "avatar_url": "https://avatars.githubusercontent.com/u/8459162?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/gloomy-penguin", + "html_url": "https://github.com/gloomy-penguin", + "followers_url": "https://api.github.com/users/gloomy-penguin/followers", + "following_url": "https://api.github.com/users/gloomy-penguin/following{/other_user}", + "gists_url": "https://api.github.com/users/gloomy-penguin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/gloomy-penguin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/gloomy-penguin/subscriptions", + "organizations_url": "https://api.github.com/users/gloomy-penguin/orgs", + "repos_url": "https://api.github.com/users/gloomy-penguin/repos", + "events_url": "https://api.github.com/users/gloomy-penguin/events{/privacy}", + "received_events_url": "https://api.github.com/users/gloomy-penguin/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/skuschel/postpic/labels/bug", + "name": "bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/skuschel/postpic/labels/question/support", + "name": "question/support", + "color": "cc317c" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2016-05-17T21:09:07Z", + "updated_at": "2016-05-30T17:32:16Z", + "closed_at": null, + "body": "The current installation routine seems to not (yet) provide compatibility with MS Windows operating systems. Neither installation using the setup.py nor pip was successful.\r\nSome unfortunate users might nevertheless be bound to Windows, e.g. if one would want to install it on a machine maintained by DESY IT. Although PostPIC should be compatible with, e.g. python(x,y), I could track the errors down to some unsatisfying inabilities of Windows:\r\n\r\n1. Since Windows (or any NTFS file system) handles symlinks very awkwardly, calling the symbolic `_postpic_version.py` link in the main directory fails.\r\nLuckily, this can be overcome easily by rewriting line 26 of setup.py\r\n`import _postpic_version`\r\nto\r\n`from postpic import _postpic_version`\r\nsince the `__init.py__` in the postpic subfolder is properly set up.\r\nI am not sure whether this invokes additional problems, but to me it seems like a proper and easy solution.\r\n\r\n2. However, installation on windows still requires a Windows c++ python compiler, e.g. the Microsoft VisualC++ compiler available for python2.7 and python 3.x.\r\n\r\n3. After getting through the items above, still the installation routine could not call the cython libraries included in python(x,y). I was not able to track this down, probably it is an issue how python(x,y) implements those libraries. However, I recognize that this should not change postpic's functionality.\r\n\r\nFinally, I feel the need for appreciating that the installation on my personal Ubuntu machine ran as smoothly as it could ever be. However, providing support for Windows might open postpic up to a broader range of users.\r\nedit: I seem to be not able to add labels to this issue, my apologies", + "score": 4.3606005 + }, + { + "url": "https://api.github.com/repos/uqfoundation/multiprocess/issues/19", + "repository_url": "https://api.github.com/repos/uqfoundation/multiprocess", + "labels_url": "https://api.github.com/repos/uqfoundation/multiprocess/issues/19/labels{/name}", + "comments_url": "https://api.github.com/repos/uqfoundation/multiprocess/issues/19/comments", + "events_url": "https://api.github.com/repos/uqfoundation/multiprocess/issues/19/events", + "html_url": "https://github.com/uqfoundation/multiprocess/issues/19", + "id": 156049809, + "number": 19, + "title": "Execution hangs in module level map call when pool is built in a submodule and submodule is imported in module's __init__", + "user": { + "login": "grayfall", + "id": 6906110, + "avatar_url": "https://avatars.githubusercontent.com/u/6906110?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/grayfall", + "html_url": "https://github.com/grayfall", + "followers_url": "https://api.github.com/users/grayfall/followers", + "following_url": "https://api.github.com/users/grayfall/following{/other_user}", + "gists_url": "https://api.github.com/users/grayfall/gists{/gist_id}", + "starred_url": "https://api.github.com/users/grayfall/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/grayfall/subscriptions", + "organizations_url": "https://api.github.com/users/grayfall/orgs", + "repos_url": "https://api.github.com/users/grayfall/repos", + "events_url": "https://api.github.com/users/grayfall/events{/privacy}", + "received_events_url": "https://api.github.com/users/grayfall/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/uqfoundation/multiprocess/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 27, + "created_at": "2016-05-20T20:59:02Z", + "updated_at": "2016-06-06T11:06:17Z", + "closed_at": null, + "body": "Suppose we've got a project:\r\n\r\n test/\r\n test.py\r\n pkg/\r\n __init__.py\r\n lib/\r\n __init__.py\r\n workers.py\r\n test/\r\n __init__.py\r\n workers.py\r\n\r\nIn `pkg/lib/workers` we have:\r\n\r\n\r\n import multiprocess.pool as mp\r\n \r\n \r\n class Test:\r\n def __init__(self, f):\r\n self.f = f\r\n \r\n def method(self, data):\r\n return workers.map(self.f, data)\r\n \r\n\r\n if __name__ == \"__main__\":\r\n raise RuntimeError\r\n else:\r\n workers = mp.Pool(processes=2)\r\n\r\nin `pkg/test/workers.py`\r\n\r\n from ..lib.workers import *\r\n \r\n\r\n print(Test(max).method([[1,2,3], [1,2,3]]))\r\n\r\n\r\nin `test.py`\r\n\r\n print(\"Hello\")\r\n \r\n import pkg.test.workers\r\n \r\n print(\"Goobye\")\r\n\r\n\r\nWhen I run `test.py` I get: \r\n\r\n $ python test.py \r\n Hello\r\n [3, 3]\r\n Goobye\r\n\r\nIf I change the second line of code in `pkg/test/workers.py` from `print(Test(max).method([[1,2,3], [1,2,3]]))` to `print(Test(lambda x: max(x)).method([[1,2,3], [1,2,3]]))`, I get\r\n\r\n $ python test.py \r\n Hello\r\n\r\nAnd the process freezes. Nothing happens for hours. No errors, no messages.\r\n\r\nP.S.\r\n\r\nThis is a stripped down version of my real project, where I use the pool of workers inside a bound method of an instance and pass an attribute to the pool as a function to use. I believe this example reproduces the exact same problem. \r\n\r\nP.P.S.\r\n\r\nI've also asked the question on Stack Overflow ([link](http://stackoverflow.com/questions/37355288/multiprocess-freezes?noredirect=1#comment62226170_37355288))", + "score": 0.34360886 + }, + { + "url": "https://api.github.com/repos/quantopian/zipline/issues/1228", + "repository_url": "https://api.github.com/repos/quantopian/zipline", + "labels_url": "https://api.github.com/repos/quantopian/zipline/issues/1228/labels{/name}", + "comments_url": "https://api.github.com/repos/quantopian/zipline/issues/1228/comments", + "events_url": "https://api.github.com/repos/quantopian/zipline/issues/1228/events", + "html_url": "https://github.com/quantopian/zipline/issues/1228", + "id": 156354789, + "number": 1228, + "title": "yahoo bundle causes SQLiteAdjustmentWriter error - sqlite3.OperationalError: unable to open database file", + "user": { + "login": "cwengc", + "id": 5105334, + "avatar_url": "https://avatars.githubusercontent.com/u/5105334?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/cwengc", + "html_url": "https://github.com/cwengc", + "followers_url": "https://api.github.com/users/cwengc/followers", + "following_url": "https://api.github.com/users/cwengc/following{/other_user}", + "gists_url": "https://api.github.com/users/cwengc/gists{/gist_id}", + "starred_url": "https://api.github.com/users/cwengc/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/cwengc/subscriptions", + "organizations_url": "https://api.github.com/users/cwengc/orgs", + "repos_url": "https://api.github.com/users/cwengc/repos", + "events_url": "https://api.github.com/users/cwengc/events{/privacy}", + "received_events_url": "https://api.github.com/users/cwengc/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/quantopian/zipline/labels/Bug", + "name": "Bug", + "color": "fc2929" + }, + { + "url": "https://api.github.com/repos/quantopian/zipline/labels/Data%20Bundle", + "name": "Data Bundle", + "color": "116184" + }, + { + "url": "https://api.github.com/repos/quantopian/zipline/labels/Windows", + "name": "Windows", + "color": "207de5" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 1, + "created_at": "2016-05-23T20:03:42Z", + "updated_at": "2016-06-07T15:39:40Z", + "closed_at": null, + "body": "Dear Zipline Maintainers,\r\n\r\nBefore I tell you about my issue, let me describe my environment:\r\n\r\n# Environment\r\n\r\n* Operating System: Windows 7\r\n* Python Version: 3.4\r\n* Python Bitness: 64\r\n* How did you install Zipline: conda\r\n* Python packages: \r\n```\r\n_license 1.1 py34_0\r\nalabaster 0.7.3 py34_0\r\nanaconda 2.3.0 np19py34_0\r\nargcomplete 0.8.9 py34_0\r\nastropy 1.0.3 np19py34_0\r\nbabel 1.3 py34_0\r\nbcolz 0.12.1 np19py34_0\r\nbeautiful-soup 4.3.2 py34_1\r\nbeautifulsoup4 4.3.2 \r\nbinstar 0.11.0 py34_0\r\nbitarray 0.8.1 py34_1\r\nblaze 0.8.0 \r\nblaze-core 0.8.0 np19py34_0\r\nblz 0.6.2 np19py34_1\r\nbokeh 0.9.0 np19py34_0\r\nboto 2.38.0 py34_0\r\nbottleneck 1.0.0 np19py34_0\r\ncachetools 1.1.6 py34_0\r\ncertifi 14.05.14 py34_0\r\ncffi 1.1.0 py34_0\r\nclick 6.6 py34_0\r\nclyent 0.3.4 py34_0\r\ncolorama 0.3.3 py34_0\r\nconda 4.0.6 py34_0\r\nconda-build 1.14.1 py34_0\r\nconda-env 2.4.5 py34_0\r\nconfigobj 5.0.6 py34_0\r\ncontextlib2 0.4.0 py34_0\r\ncryptography 0.9.1 py34_0\r\ncyordereddict 0.2.2 py34_0\r\ncython 0.24 py34_0\r\ncytoolz 0.7.3 py34_0\r\ndatashape 0.4.5 np19py34_0\r\ndecorator 4.0.9 py34_0\r\ndocutils 0.12 py34_1\r\ndynd-python 0.6.5 np19py34_0\r\nfastcache 1.0.2 py34_0\r\nflask 0.10.1 py34_1\r\ngreenlet 0.4.7 py34_0\r\nh5py 2.5.0 np19py34_1\r\nhdf5 1.8.15.1 2\r\nidna 2.0 py34_0\r\nintervaltree 2.1.0 py34_0\r\nipython 3.2.0 py34_0\r\nipython-notebook 3.2.0 py34_0\r\nipython-qtconsole 3.2.0 py34_0\r\nitsdangerous 0.24 py34_0\r\njdcal 1.0 py34_0\r\njedi 0.8.1 py34_0\r\njinja2 2.7.3 py34_2\r\njsonschema 2.4.0 py34_0\r\nlauncher 1.0.0 1\r\nllvmlite 0.5.0 py34_0\r\nlogbook 0.12.5 py34_0\r\nlxml 3.4.4 py34_0\r\nmarkupsafe 0.23 py34_0\r\nmatplotlib 1.4.3 np19py34_1\r\nmenuinst 1.3.2 py34_0\r\nmistune 0.5.1 py34_1\r\nmkl 11.3.1 0\r\nmock 1.0.1 py34_0\r\nmultipledispatch 0.4.8 py34_0\r\nnetworkx 1.11 py34_0\r\nnltk 3.0.3 np19py34_0\r\nnode-webkit 0.10.1 0\r\nnose 1.3.7 py34_0\r\nnumba 0.19.1 np19py34_0\r\nnumexpr 2.4.6 np19py34_0\r\nnumpy 1.9.3 py34_1\r\nodo 0.3.2 np19py34_0\r\nopenpyxl 1.8.5 py34_0\r\npandas 0.16.1 np19py34_0\r\npandas-datareader 0.2.1 py34_0\r\npatsy 0.4.1 py34_0\r\npep8 1.6.2 py34_0\r\npillow 2.8.2 py34_0\r\npip 8.1.1 py34_1\r\nply 3.6 py34_0\r\npsutil 2.2.1 py34_0\r\npy 1.4.27 py34_0\r\npyasn1 0.1.7 py34_0\r\npycosat 0.6.1 py34_0\r\npycparser 2.14 py34_0\r\npycrypto 2.6.1 py34_3\r\npyflakes 0.9.2 py34_0\r\npygments 2.0.2 py34_0\r\npyopenssl 0.15.1 py34_1\r\npyparsing 2.0.3 py34_0\r\npyqt 4.10.4 py34_1\r\npyreadline 2.0 py34_0\r\npytables 3.2.0 np19py34_0\r\npytest 2.7.1 py34_0\r\npython 3.4.4 4\r\npython-dateutil 2.5.3 py34_0\r\npytz 2016.4 py34_0\r\npywin32 219 py34_0\r\npyyaml 3.11 py34_3\r\npyzmq 14.7.0 py34_0\r\nrequests 2.9.1 py34_0\r\nrequests-file 1.4 py34_0\r\nrope 0.9.4 py34_1\r\nrope-py3k 0.9.4.post1 \r\nrunipy 0.1.3 py34_0\r\nscikit-image 0.11.3 np19py34_0\r\nscikit-learn 0.16.1 np19py34_0\r\nscipy 0.16.0 np19py34_0\r\nsetuptools 20.7.0 py34_0\r\nsix 1.10.0 py34_0\r\nsnowballstemmer 1.2.0 py34_0\r\nsockjs-tornado 1.0.1 py34_0\r\nsortedcontainers 1.4.4 py34_0\r\nsphinx 1.3.1 py34_0\r\nsphinx-rtd-theme 0.1.7 \r\nsphinx_rtd_theme 0.1.7 py34_0\r\nspyder 2.3.5.2 py34_0\r\nspyder-app 2.3.5.2 py34_0\r\nsqlalchemy 1.0.12 py34_0\r\nstatsmodels 0.6.1 np19py34_0\r\nswigibpy 0.4.1 \r\nsympy 0.7.6 py34_0\r\ntables 3.2.0 \r\ntoolz 0.7.4 py34_0\r\ntornado 4.2 py34_0\r\nujson 1.33 py34_0\r\nvs2010_runtime 10.00.40219.1 0\r\nwerkzeug 0.10.4 py34_0\r\nwheel 0.29.0 py34_0\r\nxlrd 0.9.3 py34_0\r\nxlsxwriter 0.7.3 py34_0\r\nxlwings 0.3.5 py34_0\r\nxlwt 1.0.0 py34_0\r\nzipline 1.0.0 np19py34_0\r\nzlib 1.2.8 vc10_2\r\n```\r\nNow that you know a little about me, let me tell you about the issue I am\r\nhaving:\r\n\r\n# Description of Issue\r\nI'm running on windows, I'm getting an error when trying to write the asset to file. I have specified yahoo as the data source and registered the bundle followed by ingest.\r\n\r\nThis is the point where I'm encountering an issue:\r\n```python\r\nadjustment_db_writer = SQLiteAdjustmentWriter(\r\n stack.enter_context(working_file(\r\n adjustment_db_path(name, timestr, environ=environ),\r\n )).path,\r\n BcolzDailyBarReader(daily_bars_path),\r\n bundle.calendar,\r\n overwrite=True,\r\n```\r\n\r\nStacktrace\r\n```\r\n File \"C:\\Anaconda3\\lib\\site-packages\\zipline\\data\\bundles\\core.py\", line 358, in ingest\r\n overwrite=True,\r\n File \"C:\\Anaconda3\\lib\\site-packages\\zipline\\data\\us_equity_pricing.py\", line 824, in __init__\r\n self.conn = sqlite3.connect(conn_or_path)\r\nsqlite3.OperationalError: unable to open database file\r\n```\r\nconn_or_path is\r\n`'C:\\\\Users\\\\4770\\\\AppData\\\\Local\\\\Temp\\\\tmp73enzuii'`\r\n(Note that this changes on every run)\r\n\r\nHere is how you can reproduce this issue on your machine:\r\n\r\n## Reproduction Steps\r\n\r\n1. on windows machine, \r\n2. register yahoo bundle, start=\"2014-01-01\", end=\"2014-02-02\"\r\n3. ingest yahoo bundle\r\n...\r\n\r\n## What steps have you taken to resolve this already?\r\nstep through the code till the point where error occurs, with stack trace attached\r\n\r\n\r\n...\r\n\r\nSincerely,\r\nWayne\r\n", + "score": 1.6980284 + }, + { + "url": "https://api.github.com/repos/lingpy/lingpy/issues/254", + "repository_url": "https://api.github.com/repos/lingpy/lingpy", + "labels_url": "https://api.github.com/repos/lingpy/lingpy/issues/254/labels{/name}", + "comments_url": "https://api.github.com/repos/lingpy/lingpy/issues/254/comments", + "events_url": "https://api.github.com/repos/lingpy/lingpy/issues/254/events", + "html_url": "https://github.com/lingpy/lingpy/issues/254", + "id": 158694419, + "number": 254, + "title": "igraph requirement", + "user": { + "login": "evoling", + "id": 2795822, + "avatar_url": "https://avatars.githubusercontent.com/u/2795822?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/evoling", + "html_url": "https://github.com/evoling", + "followers_url": "https://api.github.com/users/evoling/followers", + "following_url": "https://api.github.com/users/evoling/following{/other_user}", + "gists_url": "https://api.github.com/users/evoling/gists{/gist_id}", + "starred_url": "https://api.github.com/users/evoling/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/evoling/subscriptions", + "organizations_url": "https://api.github.com/users/evoling/orgs", + "repos_url": "https://api.github.com/users/evoling/repos", + "events_url": "https://api.github.com/users/evoling/events{/privacy}", + "received_events_url": "https://api.github.com/users/evoling/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/lingpy/lingpy/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 2, + "created_at": "2016-06-06T14:40:46Z", + "updated_at": "2016-06-06T16:36:59Z", + "closed_at": null, + "body": "When you run `from lingpy import *` from a fresh install you get the warnings:\r\n\r\n```\r\n2016-06-06 16:36:51,060 [WARNING] Module 'sklearn' could not be loaded. Some methods may not work properly.\r\n2016-06-06 16:36:51,060 [WARNING] Module 'igraph' could not be loaded. Some methods may not work properly.\r\n```\r\n\r\n`pip install igraph` installs the wrong igraph library, and causes cryptic errors when you try to import lingpy. You need `pip install python-igraph` instead. ", + "score": 2.4051592 + }, + { + "url": "https://api.github.com/repos/pydata/pandas/issues/13407", + "repository_url": "https://api.github.com/repos/pydata/pandas", + "labels_url": "https://api.github.com/repos/pydata/pandas/issues/13407/labels{/name}", + "comments_url": "https://api.github.com/repos/pydata/pandas/issues/13407/comments", + "events_url": "https://api.github.com/repos/pydata/pandas/issues/13407/events", + "html_url": "https://github.com/pydata/pandas/issues/13407", + "id": 159303277, + "number": 13407, + "title": "DataFrame.values not a 2D-array when constructed from timezone-aware datetimes", + "user": { + "login": "aburgm", + "id": 5033091, + "avatar_url": "https://avatars.githubusercontent.com/u/5033091?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aburgm", + "html_url": "https://github.com/aburgm", + "followers_url": "https://api.github.com/users/aburgm/followers", + "following_url": "https://api.github.com/users/aburgm/following{/other_user}", + "gists_url": "https://api.github.com/users/aburgm/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aburgm/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aburgm/subscriptions", + "organizations_url": "https://api.github.com/users/aburgm/orgs", + "repos_url": "https://api.github.com/users/aburgm/repos", + "events_url": "https://api.github.com/users/aburgm/events{/privacy}", + "received_events_url": "https://api.github.com/users/aburgm/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Bug", + "name": "Bug", + "color": "e10c02" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Difficulty%20Intermediate", + "name": "Difficulty Intermediate", + "color": "fbca04" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Dtypes", + "name": "Dtypes", + "color": "e102d8" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Effort%20Low", + "name": "Effort Low", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Reshaping", + "name": "Reshaping", + "color": "02d7e1" + }, + { + "url": "https://api.github.com/repos/pydata/pandas/labels/Timezones", + "name": "Timezones", + "color": "5319e7" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pydata/pandas/milestones/32", + "html_url": "https://github.com/pydata/pandas/milestones/Next%20Major%20Release", + "labels_url": "https://api.github.com/repos/pydata/pandas/milestones/32/labels", + "id": 933188, + "number": 32, + "title": "Next Major Release", + "description": "after 0.18.0 of course", + "creator": { + "login": "jreback", + "id": 953992, + "avatar_url": "https://avatars.githubusercontent.com/u/953992?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jreback", + "html_url": "https://github.com/jreback", + "followers_url": "https://api.github.com/users/jreback/followers", + "following_url": "https://api.github.com/users/jreback/following{/other_user}", + "gists_url": "https://api.github.com/users/jreback/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jreback/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jreback/subscriptions", + "organizations_url": "https://api.github.com/users/jreback/orgs", + "repos_url": "https://api.github.com/users/jreback/repos", + "events_url": "https://api.github.com/users/jreback/events{/privacy}", + "received_events_url": "https://api.github.com/users/jreback/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 971, + "closed_issues": 145, + "state": "open", + "created_at": "2015-01-13T10:53:19Z", + "updated_at": "2016-06-21T10:11:19Z", + "due_on": "2016-08-31T04:00:00Z", + "closed_at": null + }, + "comments": 3, + "created_at": "2016-06-09T00:03:39Z", + "updated_at": "2016-06-09T16:41:03Z", + "closed_at": null, + "body": "When a DataFrame column is constructed from timezone-aware datetime objects, its `values` attribute returns a `pandas.DatetimeIndex` instead of a 2D numpy array. This is problematic because the datetime index does not support all operations that a numpy array does.\r\n\r\n#### Code Sample, a copy-pastable example if possible\r\n\r\n```python\r\nimport datetime\r\nimport dateutil\r\nimport pandas\r\nimport numpy as np\r\ndf = pandas.DataFrame()\r\ndf['Time'] = [datetime.datetime(2015,1,1,tzinfo=dateutil.tz.tzutc())]\r\ndf.dropna(axis=0) # raises ValueError: 'axis' entry is out of bounds\r\n```\r\n\r\nAlso, `print df.values` returns `DatetimeIndex(['2015-01-01'], dtype='datetime64[ns, UTC]', freq=None)`.\r\n\r\n#### Expected Output\r\n\r\nThe `df.dropna` call should be a no-op.\r\n\r\nCompare this to the case when constructed using `df['Time'] = [datetime.datetime(2015,1,1)]`. In that case, `df.dropna` works as expected, and `df.values` is `array([['2014-12-31T16:00:00.000000000-0800']], dtype='datetime64[ns]')`.\r\n\r\n#### output of ``pd.show_versions()``\r\n\r\n```\r\nINSTALLED VERSIONS\r\n------------------\r\ncommit: None\r\npython: 2.7.11.final.0\r\npython-bits: 64\r\nOS: Windows\r\nOS-release: 7\r\nmachine: AMD64\r\nprocessor: Intel64 Family 6 Model 63 Stepping 2, GenuineIntel\r\nbyteorder: little\r\nLC_ALL: None\r\nLANG: None\r\n\r\npandas: 0.18.1\r\nnose: None\r\npip: 8.0.2\r\nsetuptools: 20.1.1\r\nCython: 0.23.4\r\nnumpy: 1.10.4\r\nscipy: 0.17.0\r\nstatsmodels: 0.6.1\r\nxarray: None\r\nIPython: 4.1.1\r\nsphinx: 1.3.5\r\npatsy: 0.4.0\r\ndateutil: 2.4.2\r\npytz: 2015.7\r\nblosc: None\r\nbottleneck: None\r\ntables: 3.2.2\r\nnumexpr: 2.4.6\r\nmatplotlib: 1.5.1\r\nopenpyxl: 2.3.2\r\nxlrd: 0.9.4\r\nxlwt: 1.0.0\r\nxlsxwriter: None\r\nlxml: None\r\nbs4: 4.3.2\r\nhtml5lib: None\r\nhttplib2: None\r\napiclient: None\r\nsqlalchemy: 1.0.12\r\npymysql: None\r\npsycopg2: None\r\njinja2: 2.8\r\nboto: None\r\npandas_datareader: None\r\n```", + "score": 0.9475301 + }, + { + "url": "https://api.github.com/repos/jkbrzt/httpie/issues/480", + "repository_url": "https://api.github.com/repos/jkbrzt/httpie", + "labels_url": "https://api.github.com/repos/jkbrzt/httpie/issues/480/labels{/name}", + "comments_url": "https://api.github.com/repos/jkbrzt/httpie/issues/480/comments", + "events_url": "https://api.github.com/repos/jkbrzt/httpie/issues/480/events", + "html_url": "https://github.com/jkbrzt/httpie/issues/480", + "id": 159396857, + "number": 480, + "title": "HTTPie ignores system certificates", + "user": { + "login": "luv", + "id": 1266756, + "avatar_url": "https://avatars.githubusercontent.com/u/1266756?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/luv", + "html_url": "https://github.com/luv", + "followers_url": "https://api.github.com/users/luv/followers", + "following_url": "https://api.github.com/users/luv/following{/other_user}", + "gists_url": "https://api.github.com/users/luv/gists{/gist_id}", + "starred_url": "https://api.github.com/users/luv/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/luv/subscriptions", + "organizations_url": "https://api.github.com/users/luv/orgs", + "repos_url": "https://api.github.com/users/luv/repos", + "events_url": "https://api.github.com/users/luv/events{/privacy}", + "received_events_url": "https://api.github.com/users/luv/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/jkbrzt/httpie/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": null, + "comments": 13, + "created_at": "2016-06-09T12:35:33Z", + "updated_at": "2016-06-10T13:55:30Z", + "closed_at": null, + "body": "HTTPie ignores system certificates\r\n\r\n```\r\nhttp --debug -j https://example_using_my_ca.com\r\n\r\nHTTPie 0.9.3\r\nHTTPie data: /home/lukas/.httpie\r\nRequests 2.10.0\r\nPygments 1.6\r\nPython 3.4.3 (default, Oct 14 2015, 20:28:29) \r\n[GCC 4.8.4] linux\r\n\r\n>>> requests.request(**{'allow_redirects': False,\r\n 'auth': None,\r\n 'cert': None,\r\n 'data': '',\r\n 'files': DataDict(),\r\n 'headers': {'Accept': b'application/json',\r\n 'Content-Type': b'application/json',\r\n 'User-Agent': b'HTTPie/0.9.3'},\r\n 'method': 'get',\r\n 'params': ParamsDict(),\r\n 'proxies': {},\r\n 'stream': True,\r\n 'timeout': 30,\r\n 'url': 'https://example_using_my_ca.com',\r\n 'verify': True})\r\n\r\nTraceback (most recent call last):\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py\", line 578, in urlopen\r\n chunked=chunked)\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py\", line 351, in _make_request\r\n self._validate_conn(conn)\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py\", line 814, in _validate_conn\r\n conn.connect()\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connection.py\", line 289, in connect\r\n ssl_version=resolved_ssl_version)\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/util/ssl_.py\", line 308, in ssl_wrap_socket\r\n return context.wrap_socket(sock, server_hostname=server_hostname)\r\n File \"/usr/lib/python3.4/ssl.py\", line 365, in wrap_socket\r\n _context=self)\r\n File \"/usr/lib/python3.4/ssl.py\", line 601, in __init__\r\n self.do_handshake()\r\n File \"/usr/lib/python3.4/ssl.py\", line 828, in do_handshake\r\n self._sslobj.do_handshake()\r\nssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nTraceback (most recent call last):\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/adapters.py\", line 403, in send\r\n timeout=timeout\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/packages/urllib3/connectionpool.py\", line 604, in urlopen\r\n raise SSLError(e)\r\nrequests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nTraceback (most recent call last):\r\n File \"/usr/local/bin/http\", line 11, in \r\n sys.exit(main())\r\n File \"/usr/local/lib/python3.4/dist-packages/httpie/core.py\", line 115, in main\r\n response = get_response(args, config_dir=env.config.directory)\r\n File \"/usr/local/lib/python3.4/dist-packages/httpie/client.py\", line 48, in get_response\r\n response = requests_session.request(**kwargs)\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/sessions.py\", line 475, in request\r\n resp = self.send(prep, **send_kwargs)\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/sessions.py\", line 585, in send\r\n r = adapter.send(request, **kwargs)\r\n File \"/usr/local/lib/python3.4/dist-packages/requests/adapters.py\", line 477, in send\r\n raise SSLError(e, request=request)\r\nrequests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)\r\n```\r\n\r\nFor reference, curl works fine: `curl https://example_using_my_ca.com`\r\n\r\n", + "score": 0.5137622 + }, + { + "url": "https://api.github.com/repos/pallets/flask/issues/1902", + "repository_url": "https://api.github.com/repos/pallets/flask", + "labels_url": "https://api.github.com/repos/pallets/flask/issues/1902/labels{/name}", + "comments_url": "https://api.github.com/repos/pallets/flask/issues/1902/comments", + "events_url": "https://api.github.com/repos/pallets/flask/issues/1902/events", + "html_url": "https://github.com/pallets/flask/issues/1902", + "id": 159501827, + "number": 1902, + "title": "Import error with some examples", + "user": { + "login": "rnelsonchem", + "id": 3750670, + "avatar_url": "https://avatars.githubusercontent.com/u/3750670?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rnelsonchem", + "html_url": "https://github.com/rnelsonchem", + "followers_url": "https://api.github.com/users/rnelsonchem/followers", + "following_url": "https://api.github.com/users/rnelsonchem/following{/other_user}", + "gists_url": "https://api.github.com/users/rnelsonchem/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rnelsonchem/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rnelsonchem/subscriptions", + "organizations_url": "https://api.github.com/users/rnelsonchem/orgs", + "repos_url": "https://api.github.com/users/rnelsonchem/repos", + "events_url": "https://api.github.com/users/rnelsonchem/events{/privacy}", + "received_events_url": "https://api.github.com/users/rnelsonchem/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/pallets/flask/labels/bug", + "name": "bug", + "color": "eb6420" + }, + { + "url": "https://api.github.com/repos/pallets/flask/labels/cli", + "name": "cli", + "color": "5C35CC" + }, + { + "url": "https://api.github.com/repos/pallets/flask/labels/docs", + "name": "docs", + "color": "ded63c" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/pallets/flask/milestones/2", + "html_url": "https://github.com/pallets/flask/milestones/1.0", + "labels_url": "https://api.github.com/repos/pallets/flask/milestones/2/labels", + "id": 795954, + "number": 2, + "title": "1.0", + "description": "", + "creator": { + "login": "untitaker", + "id": 837573, + "avatar_url": "https://avatars.githubusercontent.com/u/837573?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/untitaker", + "html_url": "https://github.com/untitaker", + "followers_url": "https://api.github.com/users/untitaker/followers", + "following_url": "https://api.github.com/users/untitaker/following{/other_user}", + "gists_url": "https://api.github.com/users/untitaker/gists{/gist_id}", + "starred_url": "https://api.github.com/users/untitaker/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/untitaker/subscriptions", + "organizations_url": "https://api.github.com/users/untitaker/orgs", + "repos_url": "https://api.github.com/users/untitaker/repos", + "events_url": "https://api.github.com/users/untitaker/events{/privacy}", + "received_events_url": "https://api.github.com/users/untitaker/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 19, + "closed_issues": 28, + "state": "open", + "created_at": "2014-09-19T15:47:20Z", + "updated_at": "2016-06-09T21:09:26Z", + "due_on": null, + "closed_at": null + }, + "comments": 6, + "created_at": "2016-06-09T20:35:18Z", + "updated_at": "2016-06-20T22:43:18Z", + "closed_at": null, + "body": "I'm trying to run the \"flaskr\" and \"minitwit\" examples, but I'm running into an import error issue. I'm trying to follow the instructions from the README file. When running `flask initdb`, I get the following error:\r\n\r\n```\r\nTraceback (most recent call last):\r\n File \"/home/nelson/apps/miniconda/bin/flask\", line 6, in \r\n sys.exit(flask.cli.main())\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/flask/cli.py\", line 478, in main\r\n cli.main(args=args, prog_name=name)\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/flask/cli.py\", line 345, in main\r\n return AppGroup.main(self, *args, **kwargs)\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/click/core.py\", line 696, in main\r\n rv = self.invoke(ctx)\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/click/core.py\", line 1055, in invoke\r\n cmd_name, cmd, args = self.resolve_command(ctx, args)\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/click/core.py\", line 1094, in resolve_command\r\n cmd = self.get_command(ctx, cmd_name)\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/flask/cli.py\", line 316, in get_command\r\n rv = info.load_app().cli.get_command(ctx, name)\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/flask/cli.py\", line 209, in load_app\r\n rv = locate_app(self.app_import_path)\r\n File \"/home/nelson/apps/miniconda/lib/python3.4/site-packages/flask/cli.py\", line 89, in locate_app\r\n __import__(module)\r\nImportError: No module named 'flaskr'\r\n```\r\n\r\nI'm using an Anaconda Python install on both Windows 10 (Python 3.5) and Linux (Python 3.4) with either the stock flask 0.11 install or an install from the latest git repo. I'm running this code from appropriate directory and am able to import flaskr or minitwit from a terminal Python session. I can run the other examples that do not require the flask script. \r\n\r\n", + "score": 0.851207 + }, + { + "url": "https://api.github.com/repos/conda/conda/issues/2668", + "repository_url": "https://api.github.com/repos/conda/conda", + "labels_url": "https://api.github.com/repos/conda/conda/issues/2668/labels{/name}", + "comments_url": "https://api.github.com/repos/conda/conda/issues/2668/comments", + "events_url": "https://api.github.com/repos/conda/conda/issues/2668/events", + "html_url": "https://github.com/conda/conda/issues/2668", + "id": 160290535, + "number": 2668, + "title": "Activate overwrites full path (repeated activation)", + "user": { + "login": "jakirkham", + "id": 3019665, + "avatar_url": "https://avatars.githubusercontent.com/u/3019665?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jakirkham", + "html_url": "https://github.com/jakirkham", + "followers_url": "https://api.github.com/users/jakirkham/followers", + "following_url": "https://api.github.com/users/jakirkham/following{/other_user}", + "gists_url": "https://api.github.com/users/jakirkham/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jakirkham/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jakirkham/subscriptions", + "organizations_url": "https://api.github.com/users/jakirkham/orgs", + "repos_url": "https://api.github.com/users/jakirkham/repos", + "events_url": "https://api.github.com/users/jakirkham/events{/privacy}", + "received_events_url": "https://api.github.com/users/jakirkham/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/conda/conda/labels/bug", + "name": "bug", + "color": "fc2929" + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "msarahan", + "id": 38393, + "avatar_url": "https://avatars.githubusercontent.com/u/38393?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/msarahan", + "html_url": "https://github.com/msarahan", + "followers_url": "https://api.github.com/users/msarahan/followers", + "following_url": "https://api.github.com/users/msarahan/following{/other_user}", + "gists_url": "https://api.github.com/users/msarahan/gists{/gist_id}", + "starred_url": "https://api.github.com/users/msarahan/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/msarahan/subscriptions", + "organizations_url": "https://api.github.com/users/msarahan/orgs", + "repos_url": "https://api.github.com/users/msarahan/repos", + "events_url": "https://api.github.com/users/msarahan/events{/privacy}", + "received_events_url": "https://api.github.com/users/msarahan/received_events", + "type": "User", + "site_admin": false + }, + "milestone": { + "url": "https://api.github.com/repos/conda/conda/milestones/2", + "html_url": "https://github.com/conda/conda/milestones/4.1", + "labels_url": "https://api.github.com/repos/conda/conda/milestones/2/labels", + "id": 1716159, + "number": 2, + "title": "4.1", + "description": "", + "creator": { + "login": "kalefranz", + "id": 1418419, + "avatar_url": "https://avatars.githubusercontent.com/u/1418419?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/kalefranz", + "html_url": "https://github.com/kalefranz", + "followers_url": "https://api.github.com/users/kalefranz/followers", + "following_url": "https://api.github.com/users/kalefranz/following{/other_user}", + "gists_url": "https://api.github.com/users/kalefranz/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kalefranz/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kalefranz/subscriptions", + "organizations_url": "https://api.github.com/users/kalefranz/orgs", + "repos_url": "https://api.github.com/users/kalefranz/repos", + "events_url": "https://api.github.com/users/kalefranz/events{/privacy}", + "received_events_url": "https://api.github.com/users/kalefranz/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 16, + "closed_issues": 104, + "state": "open", + "created_at": "2016-04-19T03:25:44Z", + "updated_at": "2016-06-21T15:33:26Z", + "due_on": null, + "closed_at": null + }, + "comments": 25, + "created_at": "2016-06-14T21:39:43Z", + "updated_at": "2016-06-21T22:51:04Z", + "closed_at": null, + "body": "It seems the new `conda` will overwrite everything in the path by adding the prefix to it multiple times.\r\n\r\n```\r\nLast login: Tue Jun 14 16:31:45 on ttys006\r\nprepending /zopt/conda2/envs/nanshenv/bin to PATH\r\n-bash: sed: command not found\r\n-bash: docker-machine: command not found\r\n-bash: docker-machine: command not found\r\n((nanshenv)) kirkhamj-lm1:apache-libcloud kirkhamj$ which sed\r\n-bash: which: command not found\r\n((nanshenv)) kirkhamj-lm1:apache-libcloud kirkhamj$ env\r\n-bash: env: command not found\r\n((nanshenv)) kirkhamj-lm1:apache-libcloud kirkhamj$ python\r\nPython 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:57:58) \r\n[GCC 4.2.1 (Apple Inc. build 5577)] on darwin\r\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\nAnaconda is brought to you by Continuum Analytics.\r\nPlease check out: http://continuum.io/thanks and https://anaconda.org\r\n>>> import os\r\n>>> print(os.environ)\r\n{'SPARK_HOME': '/Applications/spark-1.1.1-bin-hadoop1', 'TERM_PROGRAM_VERSION': '326', 'LOGNAME': 'kirkhamj', 'USER': 'kirkhamj', 'PATH': '/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:', 'HOME': '/Users/kirkhamj', 'PROMPT_VAR': 'PS1', 'PS1': '((nanshenv)) \\\\h:\\\\W \\\\u\\\\$ ', 'DISPLAY': '/tmp/launch-El9IAA/org.macosforge.xquartz:0', 'TERM_PROGRAM': 'Apple_Terminal', 'LANG': 'en_US.UTF-8', 'TERM': 'xterm-256color', 'SHELL': 'bash', 'SHLVL': '1', 'SECURITYSESSIONID': '186a5', 'CONDA_ENV_PATH': '', 'CONDA_OLD_PS1': '\\\\h:\\\\W \\\\u\\\\$ ', '_': '/zopt/conda2/envs/nanshenv/bin/python', 'CONDA_DEFAULT_ENV': '', 'TERM_SESSION_ID': '46E47552-F7A1-44E5-8F1D-9748F29F8BD1', 'SSH_AUTH_SOCK': '/tmp/launch-k8nEFT/Listeners', 'Apple_PubSub_Socket_Render': '/tmp/launch-IbGiHb/Render', 'TMPDIR': '/var/folders/jj/pp1xwt1n4zdgy9zxbxc22t8w66tr7q/T/', 'LSCOLORS': 'ExFxBxDxCxegedabagacad', 'CLICOLOR': '1', '__CF_USER_TEXT_ENCODING': '0xC6D60F7:0:0', 'PWD': '/Users/kirkhamj/Developer/Conda/conda-forge/feedstocks/feedstocks/apache-libcloud', 'GHC_DOT_APP': '/Applications/ghc-7.8.3.app', '__CHECKFIX1436934': '1', 'CONDA_PATH_BACKUP': '/Applications/PyCharm CE.app/Contents/MacOS:/Users/kirkhamj/bin:/Users/kirkhamj/Library/Haskell/bin:/usr/local/packer/:/usr/local/jython2.5.3/:/usr/local/gfortran/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/local/git/bin:/usr/local/MacGPG2/bin:/Library/TeX/texbin'}\r\n>>> print(os.environ[\"PATH\"])\r\n/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:/zopt/conda2/envs/nanshenv/bin:\r\n```", + "score": 0.24389441 + }, + { + "url": "https://api.github.com/repos/saltstack/salt/issues/34170", + "repository_url": "https://api.github.com/repos/saltstack/salt", + "labels_url": "https://api.github.com/repos/saltstack/salt/issues/34170/labels{/name}", + "comments_url": "https://api.github.com/repos/saltstack/salt/issues/34170/comments", + "events_url": "https://api.github.com/repos/saltstack/salt/issues/34170/events", + "html_url": "https://github.com/saltstack/salt/issues/34170", + "id": 161438301, + "number": 34170, + "title": "ps.top raises ValueError \"too many values to unpack\" when psutil > 4.1.0", + "user": { + "login": "rodoyle", + "id": 1016172, + "avatar_url": "https://avatars.githubusercontent.com/u/1016172?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rodoyle", + "html_url": "https://github.com/rodoyle", + "followers_url": "https://api.github.com/users/rodoyle/followers", + "following_url": "https://api.github.com/users/rodoyle/following{/other_user}", + "gists_url": "https://api.github.com/users/rodoyle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rodoyle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rodoyle/subscriptions", + "organizations_url": "https://api.github.com/users/rodoyle/orgs", + "repos_url": "https://api.github.com/users/rodoyle/repos", + "events_url": "https://api.github.com/users/rodoyle/events{/privacy}", + "received_events_url": "https://api.github.com/users/rodoyle/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Bug", + "name": "Bug", + "color": "e11d21" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Execution%20Module", + "name": "Execution Module", + "color": "006b75" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/High%20Severity", + "name": "High Severity", + "color": "ff9143" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/P4", + "name": "P4", + "color": "031a39" + }, + { + "url": "https://api.github.com/repos/saltstack/salt/labels/Platform", + "name": "Platform", + "color": "fef2c0" + } + ], + "state": "open", + "locked": false, + "assignee": null, + "milestone": { + "url": "https://api.github.com/repos/saltstack/salt/milestones/13", + "html_url": "https://github.com/saltstack/salt/milestones/Approved", + "labels_url": "https://api.github.com/repos/saltstack/salt/milestones/13/labels", + "id": 9265, + "number": 13, + "title": "Approved", + "description": "All issues that are ready to be worked on, both bugs and features.", + "creator": { + "login": "thatch45", + "id": 507599, + "avatar_url": "https://avatars.githubusercontent.com/u/507599?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/thatch45", + "html_url": "https://github.com/thatch45", + "followers_url": "https://api.github.com/users/thatch45/followers", + "following_url": "https://api.github.com/users/thatch45/following{/other_user}", + "gists_url": "https://api.github.com/users/thatch45/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thatch45/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thatch45/subscriptions", + "organizations_url": "https://api.github.com/users/thatch45/orgs", + "repos_url": "https://api.github.com/users/thatch45/repos", + "events_url": "https://api.github.com/users/thatch45/events{/privacy}", + "received_events_url": "https://api.github.com/users/thatch45/received_events", + "type": "User", + "site_admin": false + }, + "open_issues": 3040, + "closed_issues": 3781, + "state": "open", + "created_at": "2011-05-14T04:00:56Z", + "updated_at": "2016-06-21T19:49:47Z", + "due_on": null, + "closed_at": null + }, + "comments": 1, + "created_at": "2016-06-21T13:35:15Z", + "updated_at": "2016-06-21T17:50:32Z", + "closed_at": null, + "body": "### Description of Issue/Question\r\n1. ```salt-call pip.install psutil``` \r\noutput: installs psutil 4.3.0 (current stable release)\r\n\r\n2. ```salt-call ps.top```\r\noutput:\r\n```\r\nTraceback (most recent call last):\r\n File \"/usr/bin/salt-call\", line 11, in \r\n salt_call()\r\n File \"/usr/lib/python2.7/dist-packages/salt/scripts.py\", line 345, in salt_call\r\n client.run()\r\n File \"/usr/lib/python2.7/dist-packages/salt/cli/call.py\", line 58, in run\r\n caller.run()\r\n File \"/usr/lib/python2.7/dist-packages/salt/cli/caller.py\", line 134, in run\r\n ret = self.call()\r\n File \"/usr/lib/python2.7/dist-packages/salt/cli/caller.py\", line 197, in call\r\n ret['return'] = func(*args, **kwargs)\r\n File \"/usr/lib/python2.7/dist-packages/salt/modules/ps.py\", line 135, in top\r\n user, system = process.cpu_times()\r\n```\r\n\r\nInvestigating this on the minion:\r\n```\r\n>>> process = psutil.Process(1)\r\n>>> process.cpu_times()\r\npcputimes(user=0.56, system=2.52, children_user=1088.18, children_system=73.1)\r\n```\r\npsutil.Process.cpu_times() now returns more than expected two values on Linux but not windows and OS X according to the documentation.\r\n\r\nSalt documentation does not mention a requirement for psutil <=4.10 and the module does not handle the newer return value. Searching the issues for 'psutil' turns up several compatibility issues elsewhere, but none in the ps.top module. It is possible this issue is part of a larger cross-platform compatibility problem in the ps module.\r\n\r\n### Setup\r\n(Please provide relevant configs and/or SLS files (Be sure to remove sensitive info).)\r\n- None, purely built in modules\r\n\r\npsutil should be version 4.3.0\r\n\r\nIn 4.1.0 new fields were added, \"Changed in version 4.1.0: return two extra fields: children_user and children_system.\" [http://pythonhosted.org/psutil/](url)\r\n\r\n### Steps to Reproduce Issue\r\n(Include debug logs if possible and relevant.)\r\n\r\n1. install default psutil from pip on minion with ubuntu 14.04 LTS \r\n2. use built in ps.util module from either locally or remotely\r\n\r\n### Versions Report\r\n(Provided by running `salt --versions-report`. Please also mention any differences in master/minion versions.)\r\n\r\nSalt Version:\r\n Salt: 2016.3.1 (as on master)\r\n \r\n Dependency Versions:\r\n cffi: Not Installed\r\n cherrypy: Not Installed\r\n dateutil: 1.5\r\n gitdb: Not Installed\r\n gitpython: Not Installed\r\n ioflo: Not Installed\r\n Jinja2: 2.7.2\r\n libgit2: Not Installed\r\n libnacl: Not Installed\r\n M2Crypto: Not Installed\r\n Mako: 0.9.1\r\n msgpack-pure: Not Installed\r\n msgpack-python: 0.3.0\r\n mysql-python: 1.2.3\r\n pycparser: Not Installed\r\n pycrypto: 2.6.1\r\n pygit2: Not Installed\r\n Python: 2.7.6 (default, Jun 22 2015, 17:58:13)\r\n python-gnupg: Not Installed\r\n PyYAML: 3.10\r\n PyZMQ: 14.0.1\r\n RAET: Not Installed\r\n smmap: Not Installed\r\n timelib: Not Installed\r\n Tornado: 4.2.1\r\n ZMQ: 4.0.5\r\n \r\n System Versions:\r\n dist: Ubuntu 14.04 trusty\r\n machine: x86_64\r\n release: 3.19.0-61-generic\r\n system: Linux\r\n version: Ubuntu 14.04 trusty", + "score": 1.654835 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:26 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "325039", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "22", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "link": "; rel=\"first\", ; rel=\"prev\"", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "8a5c38021a5cd7cef7b8f49a296fee40", + "x-github-request-id": "AE1408AB:F64F:5FC3CF7:5769F4BD" + } + }, + { + "scope": "https://api.github.com:443", + "method": "GET", + "path": "/search/users?q=tom+repos:%3E42+followers:%3E1000&type=all&sort=updated&per_page=100", + "body": "", + "status": 200, + "response": { + "total_count": 4, + "incomplete_results": false, + "items": [ + { + "login": "mojombo", + "id": 1, + "avatar_url": "https://avatars.githubusercontent.com/u/1?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/mojombo", + "html_url": "https://github.com/mojombo", + "followers_url": "https://api.github.com/users/mojombo/followers", + "following_url": "https://api.github.com/users/mojombo/following{/other_user}", + "gists_url": "https://api.github.com/users/mojombo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/mojombo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/mojombo/subscriptions", + "organizations_url": "https://api.github.com/users/mojombo/orgs", + "repos_url": "https://api.github.com/users/mojombo/repos", + "events_url": "https://api.github.com/users/mojombo/events{/privacy}", + "received_events_url": "https://api.github.com/users/mojombo/received_events", + "type": "User", + "site_admin": false, + "score": 41.889614 + }, + { + "login": "tmcw", + "id": 32314, + "avatar_url": "https://avatars.githubusercontent.com/u/32314?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tmcw", + "html_url": "https://github.com/tmcw", + "followers_url": "https://api.github.com/users/tmcw/followers", + "following_url": "https://api.github.com/users/tmcw/following{/other_user}", + "gists_url": "https://api.github.com/users/tmcw/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tmcw/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tmcw/subscriptions", + "organizations_url": "https://api.github.com/users/tmcw/orgs", + "repos_url": "https://api.github.com/users/tmcw/repos", + "events_url": "https://api.github.com/users/tmcw/events{/privacy}", + "received_events_url": "https://api.github.com/users/tmcw/received_events", + "type": "User", + "site_admin": false, + "score": 33.511692 + }, + { + "login": "tomdale", + "id": 90888, + "avatar_url": "https://avatars.githubusercontent.com/u/90888?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tomdale", + "html_url": "https://github.com/tomdale", + "followers_url": "https://api.github.com/users/tomdale/followers", + "following_url": "https://api.github.com/users/tomdale/following{/other_user}", + "gists_url": "https://api.github.com/users/tomdale/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tomdale/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tomdale/subscriptions", + "organizations_url": "https://api.github.com/users/tomdale/orgs", + "repos_url": "https://api.github.com/users/tomdale/repos", + "events_url": "https://api.github.com/users/tomdale/events{/privacy}", + "received_events_url": "https://api.github.com/users/tomdale/received_events", + "type": "User", + "site_admin": false, + "score": 20.284273 + }, + { + "login": "tommy351", + "id": 411425, + "avatar_url": "https://avatars.githubusercontent.com/u/411425?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tommy351", + "html_url": "https://github.com/tommy351", + "followers_url": "https://api.github.com/users/tommy351/followers", + "following_url": "https://api.github.com/users/tommy351/following{/other_user}", + "gists_url": "https://api.github.com/users/tommy351/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tommy351/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tommy351/subscriptions", + "organizations_url": "https://api.github.com/users/tommy351/orgs", + "repos_url": "https://api.github.com/users/tommy351/repos", + "events_url": "https://api.github.com/users/tommy351/events{/privacy}", + "received_events_url": "https://api.github.com/users/tommy351/received_events", + "type": "User", + "site_admin": false, + "score": 13.695011 + } + ] + }, + "headers": { + "server": "GitHub.com", + "date": "Wed, 22 Jun 2016 02:15:27 GMT", + "content-type": "application/json; charset=utf-8", + "content-length": "3524", + "connection": "close", + "status": "200 OK", + "x-ratelimit-limit": "30", + "x-ratelimit-remaining": "21", + "x-ratelimit-reset": "1466561771", + "cache-control": "no-cache", + "x-github-media-type": "github.v3; format=json", + "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", + "access-control-allow-origin": "*", + "content-security-policy": "default-src 'none'", + "strict-transport-security": "max-age=31536000; includeSubdomains; preload", + "x-content-type-options": "nosniff", + "x-frame-options": "deny", + "x-xss-protection": "1; mode=block", + "vary": "Accept-Encoding", + "x-served-by": "d594a23ec74671eba905bf91ef329026", + "x-github-request-id": "AE1408AB:F650:7A5C16E:5769F4BF" + } + } +] \ No newline at end of file diff --git a/test/helpers/callbacks.js b/test/helpers/callbacks.js index 1f9c3dc7..112464ac 100644 --- a/test/helpers/callbacks.js +++ b/test/helpers/callbacks.js @@ -5,7 +5,7 @@ const STANDARD_DELAY = 200; // 200ms between nested calls to the API so things s export function assertSuccessful(done, cb) { return function successCallback(err, res, xhr) { try { - expect(err).not.to.exist(err ? err.response.data : 'No error'); + expect(err).not.to.exist(err ? (err.response ? err.response.data : err) : 'No error'); expect(res).to.exist(); expect(xhr).to.be.an.object(); diff --git a/test/issue.spec.js b/test/issue.spec.js index ce502cec..e3d0bb78 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -165,6 +165,7 @@ describe('Issue', function() { description: 'Version 6 * 7' }; + expect(createdMilestoneId).to.be.a.number(); remoteIssues.editMilestone(createdMilestoneId, milestone) .then(({data: createdMilestone}) => { expect(createdMilestone).to.have.own('number', createdMilestoneId); @@ -174,6 +175,7 @@ describe('Issue', function() { }).catch(done); }); it('should delete a milestone', function(done) { + expect(createdMilestoneId).to.be.a.number(); remoteIssues.deleteMilestone(createdMilestoneId) .then(({status}) => { expect(status).to.equal(204); diff --git a/test/search.spec.js b/test/search.spec.js index c53326d1..93d852da 100644 --- a/test/search.spec.js +++ b/test/search.spec.js @@ -1,4 +1,5 @@ import expect from 'must'; +import nock from 'nock'; import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; @@ -13,6 +14,7 @@ describe('Search', function() { password: testUser.PASSWORD, auth: 'basic' }); + nock.load('test/fixtures/search.json'); }); it('should search repositories', function() { @@ -70,4 +72,9 @@ describe('Search', function() { expect(data.length).to.be.above(0); }); }); + + after(function() { + nock.cleanAll(); + nock.restore(); + }); }); From 44c072c867bb8eef0885c352a164eaafa08b7d6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Vit=C3=A1k?= Date: Mon, 27 Jun 2016 14:54:58 -0700 Subject: [PATCH 143/217] chore: Added protocol in CDN example of the README closes #356 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 28f61b90..ec976fe5 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ npm install github-api ```html - + - + ``` ## Compatibility From 83775a17d97af1373128bf422b1c01d3a37097e3 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Sat, 2 Jul 2016 23:41:27 +0100 Subject: [PATCH 144/217] feature(issue): add createLabel (#357) fixes #328 --- lib/Issue.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/Issue.js b/lib/Issue.js index d5c03d4a..07fa2b1a 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -190,6 +190,17 @@ class Issue extends Requestable { deleteMilestone(milestone, cb) { return this._request('DELETE', `/repos/${this.__repository}/milestones/${milestone}`, null, cb); } + + /** + * Create a new label + * @see https://developer.github.com/v3/issues/labels/#create-a-label + * @param {Object} labelData - the label definition + * @param {Requestable.callback} [cb] - will receive the object representing the label + * @return {Promise} - the promise for the http request + */ + createLabel(labelData, cb) { + return this._request('POST', `/repos/${this.__repository}/labels`, labelData, cb); + } } module.exports = Issue; From 609491e9f7498f7736f607d834330c7fe08dffbb Mon Sep 17 00:00:00 2001 From: Marco Breiter Date: Mon, 22 Aug 2016 22:00:52 +0200 Subject: [PATCH 145/217] docs: Update documentation to include 2.0.0 breaking changes (#371) ci skip --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ec976fe5..04d7478c 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ me.listNotifications(function(err, notifcations) { }); const clayreimann = gh.getUser('clayreimann'); -clayreimann.getStarredRepos() +clayreimann.listStarredRepos() .then(function({data: reposJson}) { // do stuff with reposJson }); @@ -103,7 +103,7 @@ var gh = new GitHub({ }); var yahoo = gh.getOrganization('yahoo'); -yahoo.getRepos(function(err, repos) { +yahoo.listRepos(function(err, repos) { // look at all the repos! }) ``` From 5b790f5843843fcc16a86a62cacccb132dbb47cc Mon Sep 17 00:00:00 2001 From: npmcdn-to-unpkg-bot Date: Wed, 31 Aug 2016 22:51:06 +0100 Subject: [PATCH 146/217] Replace npmcdn.com with unpkg.com (#375) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 04d7478c..560edc9a 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Github.js provides a minimal higher-level wrapper around Github's API. It was co ## [Read the docs][docs] ## Installation -Github.js is available from `npm` or [npmcdn][npmcdn]. +Github.js is available from `npm` or [unpkg][unpkg]. ```shell npm install github-api @@ -20,10 +20,10 @@ npm install github-api ```html - + - + ``` ## Compatibility @@ -112,7 +112,7 @@ yahoo.listRepos(function(err, repos) { [docs]: http://michael.github.io/github/ [gitter]: https://gitter.im/michael/github [npm-package]: https://www.npmjs.com/package/github-api/ -[npmcdn]: https://npmcdn.com/github-api/ +[unpkg]: https://unpkg.com/github-api/ [prose]: http://prose.io [travis-ci]: https://travis-ci.org/michael/github [xhr-link]: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx From 44a6aa6576ba9be04817ac3eed04268f63712e2c Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 31 Aug 2016 19:43:44 -0500 Subject: [PATCH 147/217] Fix gist example. Closes #374 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 560edc9a..f5fcae8b 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ gist.create({ description: 'My first gist', files: { "file1.txt": { - contents: "Aren't gists great!" + content: "Aren't gists great!" } } }).then(function({data}) { From 91aaf86d2fe586f953beb7107d521a66d4441469 Mon Sep 17 00:00:00 2001 From: Connor Cartwright Date: Mon, 12 Sep 2016 18:02:47 +0100 Subject: [PATCH 148/217] chore: fix spelling mistake in the README [ci skip] closes #379 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f5fcae8b..a7828852 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ const gh = new GitHub({ }); const me = gh.getUser(); -me.listNotifications(function(err, notifcations) { +me.listNotifications(function(err, notifications) { // do some stuff }); From efb8c16ea4e82f6603d9e8c4e8958f66116d9e85 Mon Sep 17 00:00:00 2001 From: mironal Date: Tue, 6 Sep 2016 11:15:42 +0900 Subject: [PATCH 149/217] fix(repository): fix URL for deleting a hook closes #378 --- lib/Repository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Repository.js b/lib/Repository.js index de77ae48..8832533a 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -547,7 +547,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ deleteHook(id, cb) { - return this._request('DELETE', `${this.__repoPath}/hooks/${id}`, null, cb); + return this._request('DELETE', `/repos/${this.__fullname}/hooks/${id}`, null, cb); } /** From 14b7023747d5ba8614d7a4f83ab3eb8b1ae22898 Mon Sep 17 00:00:00 2001 From: mironal Date: Fri, 2 Sep 2016 15:47:58 +0900 Subject: [PATCH 150/217] feature(repository): support deploy key API close #376 --- lib/Repository.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index 8832533a..09107508 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -550,6 +550,49 @@ class Repository extends Requestable { return this._request('DELETE', `/repos/${this.__fullname}/hooks/${id}`, null, cb); } + /** + * List the deploy keys for the repository + * @see https://developer.github.com/v3/repos/keys/#list-deploy-keys + * @param {Requestable.callback} cb - will receive the list of deploy keys + * @return {Promise} - the promise for the http request + */ + listKeys(cb) { + return this._request('GET', `/repos/${this.__fullname}/keys`, null, cb); + } + + /** + * Get a deploy key for the repository + * @see https://developer.github.com/v3/repos/keys/#get-a-deploy-key + * @param {number} id - the id of the deploy key + * @param {Requestable.callback} cb - will receive the details of the deploy key + * @return {Promise} - the promise for the http request + */ + getKey(id, cb) { + return this._request('GET', `/repos/${this.__fullname}/keys/${id}`, null, cb); + } + + /** + * Add a new deploy key to the repository + * @see https://developer.github.com/v3/repos/keys/#add-a-new-deploy-key + * @param {Object} options - the configuration describing the new deploy key + * @param {Requestable.callback} cb - will receive the new deploy key + * @return {Promise} - the promise for the http request + */ + createKey(options, cb) { + return this._request('POST', `/repos/${this.__fullname}/keys`, options, cb); + } + + /** + * Delete a deploy key + * @see https://developer.github.com/v3/repos/keys/#remove-a-deploy-key + * @param {number} id - the id of the deploy key to be deleted + * @param {Requestable.callback} cb - will receive true if the call is successful + * @return {Promise} - the promise for the http request + */ + deleteKey(id, cb) { + return this._request('DELETE', `/repos/${this.__fullname}/keys/${id}`, null, cb); + } + /** * Delete a file from a branch * @see https://developer.github.com/v3/repos/contents/#delete-a-file From 7a5d9d007dac31418892d3d7afe7ea7a31404435 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Thu, 14 Jul 2016 11:20:10 +0100 Subject: [PATCH 151/217] fix(repository): Added updatePullRequest method This change deprecates the updatePullRequst method fixes #362 closes #365 --- lib/Repository.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index 09107508..eda00ffe 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -485,6 +485,7 @@ class Repository extends Requestable { /** * Update a pull request + * @deprecated since version 2.4.0 * @see https://developer.github.com/v3/pulls/#update-a-pull-request * @param {number|string} number - the number of the pull request to update * @param {Object} options - the pull request description @@ -492,6 +493,20 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ updatePullRequst(number, options, cb) { + log('Deprecated: This method contains a typo and it has been deprecated. It will be removed in next major version. Use updatePullRequest() instead.'); + + return this.updatePullRequest(number, options, cb); + } + + /** + * Update a pull request + * @see https://developer.github.com/v3/pulls/#update-a-pull-request + * @param {number|string} number - the number of the pull request to update + * @param {Object} options - the pull request description + * @param {Requestable.callback} [cb] - will receive the pull request information + * @return {Promise} - the promise for the http request + */ + updatePullRequest(number, options, cb) { return this._request('PATCH', `/repos/${this.__fullname}/pulls/${number}`, options, cb); } From 00afe31078f22b5a45847a76aabc441a15e4c2c3 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Thu, 14 Jul 2016 11:10:54 +0100 Subject: [PATCH 152/217] fix(deleteHook): Use the full name of the repository fixes #363 closes #364 --- lib/Repository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Repository.js b/lib/Repository.js index eda00ffe..f676a04f 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -562,7 +562,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ deleteHook(id, cb) { - return this._request('DELETE', `/repos/${this.__fullname}/hooks/${id}`, null, cb); + return this._request('DELETE', `${this.__fullname}/hooks/${id}`, null, cb); } /** From fb0669cf41e3d2f2c40f2963cd791697ef9772f8 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Wed, 15 Jun 2016 17:03:44 +0100 Subject: [PATCH 153/217] chore: updated callbacks to be Requestable.callback closes #380 --- lib/Repository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Repository.js b/lib/Repository.js index f676a04f..4b3090cb 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -762,7 +762,7 @@ class Repository extends Requestable { /** * Get information about a release * @see https://developer.github.com/v3/repos/releases/#get-a-single-release - * @param {strign} id - the id of the release + * @param {string} id - the id of the release * @param {Requestable.callback} cb - will receive the release information * @return {Promise} - the promise for the http request */ From 19b618493952338937b18bb0ee61793bc1b727b5 Mon Sep 17 00:00:00 2001 From: David Buchan-Swanson Date: Fri, 26 Aug 2016 10:56:11 +1000 Subject: [PATCH 154/217] feature(repository): add getBranch closes #372 --- lib/Repository.js | 11 +++++++++++ test/repository.spec.js | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/Repository.js b/lib/Repository.js index 4b3090cb..301e1230 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -152,6 +152,17 @@ class Repository extends Requestable { return this._request('GET', `/repos/${this.__fullname}/git/blobs/${sha}`, null, cb, 'raw'); } + /** + * Get a single branch + * @see https://developer.github.com/v3/repos/branches/#get-branch + * @param {string} branch - the name of the branch to fetch + * @param {Requestable.callback} cb - will receive the branch from the API + * @returns {Promise} - the promise for the http request + */ + getBranch(branch, cb) { + return this._request('GET', `/repos/${this.__fullname}/branches/${branch}`, null, cb); + } + /** * Get a commit from the repository * @see https://developer.github.com/v3/repos/commits/#get-a-single-commit diff --git a/test/repository.spec.js b/test/repository.spec.js index 3afaff07..f747878d 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -52,6 +52,14 @@ describe('Repository', function() { })); }); + it('should get a branch', function(done) { + remoteRepo.getBranch('master', assertSuccessful(done, function(err, content) { + expect(content.name).to.be('master'); + + done(); + })); + }); + it('should show repo contents', function(done) { remoteRepo.getContents('master', '', false, assertSuccessful(done, function(err, contents) { expect(contents).to.be.an.array(); From 9208c614c0623feecf899cc5cdb64f3d5b10a0a8 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 16 Sep 2016 16:20:20 +0100 Subject: [PATCH 155/217] chore: update changelog --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 925b11c1..035944d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## 2.4.0 - 2016/09/16 +### Features +* add `Issue.createLabel` +* add `Repository.createKey` +* add `Repository.deleteKey` +* add `Repository.getBranch` +* add `Repository.listKeys` +* add `Repository.getKey` +* add `Repository.updatePullRequest` +* deprecate `Repository.updatePullRequst` + +### Fixes +* Request URL for deleting a hook (`Repository.deleteHook`) + ## 2.3.0 - 2016/06/17 ### Features * add `Repository.mergePullRequest` From 96cc1acdfdb2d76013858af38f900d7b4f513713 Mon Sep 17 00:00:00 2001 From: Aurelio De Rosa Date: Fri, 16 Sep 2016 16:23:37 +0100 Subject: [PATCH 156/217] 2.4.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 15d451a0..c942525d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "2.3.0", + "version": "2.4.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 78a98b167ff7ddd343110e8b96c723110d2f6350 Mon Sep 17 00:00:00 2001 From: David Buchan-Swanson Date: Mon, 21 Nov 2016 06:48:16 +1000 Subject: [PATCH 157/217] update the link to the docs (#402) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7828852..17ba8db5 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ yahoo.listRepos(function(err, repos) { ``` [codecov]: https://codecov.io/github/michael/github?branch=master -[docs]: http://michael.github.io/github/ +[docs]: http://github-tools.github.io/github/ [gitter]: https://gitter.im/michael/github [npm-package]: https://www.npmjs.com/package/github-api/ [unpkg]: https://unpkg.com/github-api/ From 6ec1d0b5d1a8c52a3707a43a5dc5f0465f6bdf5a Mon Sep 17 00:00:00 2001 From: Mathieu Dutour Date: Wed, 30 Nov 2016 21:41:17 +0000 Subject: [PATCH 158/217] chore: fix tests and bump to 3.x (#401) * add getContributorStats * add labels methods * add updateStatus and updateRepository method * add project api and fix tests * improve release script * remove prepublish script * request all pages for cards * add getEmails * remove polyfill * drop support for node < 4 / test on node 4-6 * add coverage * remove clearRepo --- .gitignore | 3 +- .npmignore | 3 +- .travis.yml | 9 +- README.md | 116 +++++++--------- gulpfile.babel.js | 12 +- lib/GitHub.js | 10 ++ lib/Issue.js | 53 ++++++- lib/Markdown.js | 4 +- lib/Organization.js | 23 ++++ lib/Project.js | 236 ++++++++++++++++++++++++++++++++ lib/Repository.js | 114 +++++++++++---- lib/Requestable.js | 51 ++++--- lib/User.js | 10 ++ package.json | 53 ++++--- release.sh | 11 +- test/auth.spec.js | 6 +- test/gist.spec.js | 2 +- test/helpers/callbacks.js | 1 - test/helpers/helperFunctions.js | 43 ++++++ test/helpers/wait.js | 5 + test/issue.spec.js | 102 +++++++++++++- test/markdown.spec.js | 6 +- test/organization.spec.js | 53 +++++-- test/project.spec.js | 171 +++++++++++++++++++++++ test/rate-limit.spec.js | 2 +- test/repository.spec.js | 124 +++++++++++++---- test/search.spec.js | 12 +- test/team.spec.js | 71 ++++++++-- test/user.spec.js | 10 +- 29 files changed, 1079 insertions(+), 237 deletions(-) create mode 100644 lib/Project.js create mode 100644 test/helpers/helperFunctions.js create mode 100644 test/helpers/wait.js create mode 100644 test/project.spec.js diff --git a/.gitignore b/.gitignore index 6d462a19..db3cda2f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,8 @@ docs/ dist/ coverage/ node_modules/ - +.nyc_output/ +/out/ .DS_Store npm-debug.log sauce.json diff --git a/.npmignore b/.npmignore index 15fff57d..fe969272 100644 --- a/.npmignore +++ b/.npmignore @@ -1,6 +1,7 @@ docs/ coverage/ node_modules/ - +lib/ +.nyc_output/ .DS_Store sauce.json diff --git a/.travis.yml b/.travis.yml index c00581ca..26f56aa3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,7 @@ node_js: - '6' - '5' - '4' - - '0.12' - + cache: directories: - node_modules @@ -14,10 +13,10 @@ before_script: - npm run lint # - npm run build # will need this when we do sauce testing of compiled files script: - - npm test + - npm run test-coverage # - npm run test-dist # test the compiled files -# after_success: -# - npm run codecov # disabled temporarialy while I work out how to generate accurate coverage of ES2015 code +after_success: + - npm run codecov before_deploy: - npm run build deploy: diff --git a/README.md b/README.md index 17ba8db5..919b5eb3 100644 --- a/README.md +++ b/README.md @@ -2,50 +2,19 @@ [![Downloads per month](https://img.shields.io/npm/dm/github-api.svg?maxAge=2592000)][npm-package] [![Latest version](https://img.shields.io/npm/v/github-api.svg?maxAge=3600)][npm-package] -[![Gitter](https://img.shields.io/gitter/room/michael/github.js.svg?maxAge=2592000)][gitter] -[![Travis](https://img.shields.io/travis/michael/github.svg?maxAge=60)][travis-ci] - +[![Gitter](https://img.shields.io/gitter/room/github-tools/github.js.svg?maxAge=2592000)][gitter] +[![Travis](https://img.shields.io/travis/github-tools/github.svg?maxAge=60)][travis-ci] +[![Codecov](https://img.shields.io/codecov/c/github/github-tools/github.svg?maxAge=2592000)][codecov] -Github.js provides a minimal higher-level wrapper around Github's API. It was concieved in the context of -[Prose][prose], a content editor for GitHub. +Github.js provides a minimal higher-level wrapper around Github's API. -## [Read the docs][docs] - -## Installation -Github.js is available from `npm` or [unpkg][unpkg]. - -```shell -npm install github-api -``` - -```html - - - - - -``` - -## Compatibility -Github.js is tested on Node: -* 6.x -* 5.x -* 4.x -* 0.12 - -## GitHub Tools - -The team behind Github.js has created a whole organization, called [GitHub Tools](https://github.com/github-tools), -dedicated to GitHub and its API. In the near future this repository could be moved under the GitHub Tools organization -as well. In the meantime, we recommend you to take a look at other projects of the organization. - -## Samples +## Usage ```javascript /* Data can be retrieved from the API either using callbacks (as in versions < 1.0) - or using a new promise-based API. For now the promise-based API just returns the - raw HTTP request promise; this might change in the next version. + or using a new promise-based API. The promise-based API returns the raw Axios + request promise. */ import GitHub from 'github-api'; @@ -62,57 +31,66 @@ gist.create({ } }).then(function({data}) { // Promises! - let gistJson = data; - gist.read(function(err, gist, xhr) { - // if no error occurred then err == null - - // gistJson === httpResponse.data - - // xhr === httpResponse - }); + let createdGist = data; + return gist.read(); +}).then(function({data}) { + let retrievedGist = data; + // do interesting things }); ``` ```javascript -import GitHub from 'github-api'; +var GitHub = require('github-api'); // basic auth -const gh = new GitHub({ +var gh = new GitHub({ username: 'FOO', password: 'NotFoo' + /* also acceptable: + token: 'MY_OAUTH_TOKEN' + */ }); -const me = gh.getUser(); +var me = gh.getUser(); // no user specified defaults to the user for whom credentials were provided me.listNotifications(function(err, notifications) { // do some stuff }); -const clayreimann = gh.getUser('clayreimann'); -clayreimann.listStarredRepos() - .then(function({data: reposJson}) { - // do stuff with reposJson - }); +var clayreimann = gh.getUser('clayreimann'); +clayreimann.listStarredRepos(function(err, repos) { + // look at all the starred repos! +}); ``` -```javascript -var GitHub = require('github-api'); +## API Documentation -// token auth -var gh = new GitHub({ - token: 'MY_OAUTH_TOKEN' -}); +[API documentation][docs] is hosted on github pages, and is generated from JSDoc; any contributions +should include updated JSDoc. + +## Installation +Github.js is available from `npm` or [unpkg][unpkg]. -var yahoo = gh.getOrganization('yahoo'); -yahoo.listRepos(function(err, repos) { - // look at all the repos! -}) +```shell +npm install github-api ``` -[codecov]: https://codecov.io/github/michael/github?branch=master +```html + + + + + +``` + +## Compatibility +`Github.js` is tested on Node.js: +* 6.x + +Note: `Github.js` uses Promise, hence it will not work in Node.js < 4 without polyfill. + +[codecov]: https://codecov.io/github/github-tools/github?branch=master [docs]: http://github-tools.github.io/github/ -[gitter]: https://gitter.im/michael/github +[gitter]: https://gitter.im/github-tools/github [npm-package]: https://www.npmjs.com/package/github-api/ [unpkg]: https://unpkg.com/github-api/ -[prose]: http://prose.io -[travis-ci]: https://travis-ci.org/michael/github -[xhr-link]: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx +[travis-ci]: https://travis-ci.org/github-tools/github diff --git a/gulpfile.babel.js b/gulpfile.babel.js index c3d669f5..9965f7aa 100644 --- a/gulpfile.babel.js +++ b/gulpfile.babel.js @@ -13,7 +13,7 @@ import uglify from 'gulp-uglify'; const ALL_SOURCES = [ '*.js', 'lib/*.js', - 'test/*.js' + 'test/*.js', ]; gulp.task('lint', function() { @@ -33,13 +33,13 @@ gulp.task('build', [ 'build:external:min', 'build:bundled:debug', 'build:external:debug', - 'build:components' + 'build:components', ]); const bundledConfig = { debug: true, entries: 'lib/GitHub.js', - standalone: 'GitHub' + standalone: 'GitHub', }; const externalConfig = { debug: true, @@ -50,9 +50,9 @@ const externalConfig = { 'js-base64', 'es6-promise', 'debug', - 'utf8' + 'utf8', ], - bundleExternal: false + bundleExternal: false, }; gulp.task('build:bundled:min', function() { return buildBundle(bundledConfig, '.bundle.min.js', true); @@ -82,7 +82,7 @@ function buildBundle(options, extname, minify) { .pipe(source('GitHub.js')) .pipe(buffer()) .pipe(sourcemaps.init({ - loadMaps: true + loadMaps: true, })); if (minify) { diff --git a/lib/GitHub.js b/lib/GitHub.js index 944fc868..59cb94ff 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -15,6 +15,7 @@ import Repository from './Repository'; import Organization from './Organization'; import Team from './Team'; import Markdown from './Markdown'; +import Project from './Project'; /** * GitHub encapsulates the functionality to create various API wrapper objects. @@ -113,6 +114,15 @@ class GitHub { return new Markdown(this.__auth, this.__apiBase); } + /** + * Create a new Project wrapper + * @param {string} id - the id of the project + * @return {Markdown} + */ + getProject(id) { + return new Project(id, this.__auth, this.__apiBase); + } + /** * Computes the full repository name * @param {string} user - the username (or the full name) diff --git a/lib/Issue.js b/lib/Issue.js index 07fa2b1a..c0151b5f 100644 --- a/lib/Issue.js +++ b/lib/Issue.js @@ -150,7 +150,7 @@ class Issue extends Requestable { * Get a milestone * @see https://developer.github.com/v3/issues/milestones/#get-a-single-milestone * @param {string} milestone - the id of the milestone to fetch - * @param {Requestable.callback} [cb] - will receive the array of milestones + * @param {Requestable.callback} [cb] - will receive the milestone * @return {Promise} - the promise for the http request */ getMilestone(milestone, cb) { @@ -161,7 +161,7 @@ class Issue extends Requestable { * Create a new milestone * @see https://developer.github.com/v3/issues/milestones/#create-a-milestone * @param {Object} milestoneData - the milestone definition - * @param {Requestable.callback} [cb] - will receive the array of milestones + * @param {Requestable.callback} [cb] - will receive the milestone * @return {Promise} - the promise for the http request */ createMilestone(milestoneData, cb) { @@ -173,7 +173,7 @@ class Issue extends Requestable { * @see https://developer.github.com/v3/issues/milestones/#update-a-milestone * @param {string} milestone - the id of the milestone to edit * @param {Object} milestoneData - the updates to make to the milestone - * @param {Requestable.callback} [cb] - will receive the array of milestones + * @param {Requestable.callback} [cb] - will receive the updated milestone * @return {Promise} - the promise for the http request */ editMilestone(milestone, milestoneData, cb) { @@ -184,7 +184,7 @@ class Issue extends Requestable { * Delete a milestone (this is distinct from closing a milestone) * @see https://developer.github.com/v3/issues/milestones/#delete-a-milestone * @param {string} milestone - the id of the milestone to delete - * @param {Requestable.callback} [cb] - will receive the array of milestones + * @param {Requestable.callback} [cb] - will receive the status * @return {Promise} - the promise for the http request */ deleteMilestone(milestone, cb) { @@ -201,6 +201,51 @@ class Issue extends Requestable { createLabel(labelData, cb) { return this._request('POST', `/repos/${this.__repository}/labels`, labelData, cb); } + + /** + * List the labels for the repository + * @see https://developer.github.com/v3/issues/labels/#list-all-labels-for-this-repository + * @param {Object} options - filtering options + * @param {Requestable.callback} [cb] - will receive the array of labels + * @return {Promise} - the promise for the http request + */ + listLabels(options, cb) { + return this._request('GET', `/repos/${this.__repository}/labels`, options, cb); + } + + /** + * Get a label + * @see https://developer.github.com/v3/issues/labels/#get-a-single-label + * @param {string} label - the name of the label to fetch + * @param {Requestable.callback} [cb] - will receive the label + * @return {Promise} - the promise for the http request + */ + getLabel(label, cb) { + return this._request('GET', `/repos/${this.__repository}/labels/${label}`, null, cb); + } + + /** + * Edit a label + * @see https://developer.github.com/v3/issues/labels/#update-a-label + * @param {string} label - the name of the label to edit + * @param {Object} labelData - the updates to make to the label + * @param {Requestable.callback} [cb] - will receive the updated label + * @return {Promise} - the promise for the http request + */ + editLabel(label, labelData, cb) { + return this._request('PATCH', `/repos/${this.__repository}/labels/${label}`, labelData, cb); + } + + /** + * Delete a label + * @see https://developer.github.com/v3/issues/labels/#delete-a-label + * @param {string} label - the name of the label to delete + * @param {Requestable.callback} [cb] - will receive the status + * @return {Promise} - the promise for the http request + */ + deleteLabel(label, cb) { + return this._request('DELETE', `/repos/${this.__repository}/labels/${label}`, null, cb); + } } module.exports = Issue; diff --git a/lib/Markdown.js b/lib/Markdown.js index cb84851d..edc346cc 100644 --- a/lib/Markdown.js +++ b/lib/Markdown.js @@ -8,11 +8,11 @@ import Requestable from './Requestable'; /** - * RateLimit allows users to query their rate-limit status + * Renders html from Markdown text */ class Markdown extends Requestable { /** - * construct a RateLimit + * construct a Markdown * @param {Requestable.auth} auth - the credentials to authenticate to GitHub * @param {string} [apiBase] - the base Github API URL * @return {Promise} - the promise for the http request diff --git a/lib/Organization.js b/lib/Organization.js index 78354a8c..0a8177b4 100644 --- a/lib/Organization.js +++ b/lib/Organization.js @@ -93,6 +93,29 @@ class Organization extends Requestable { createTeam(options, cb) { return this._request('POST', `/orgs/${this.__name}/teams`, options, cb); } + + /** + * Get information about all projects + * @see https://developer.github.com/v3/projects/#list-organization-projects + * @param {Requestable.callback} [cb] - will receive the list of projects + * @return {Promise} - the promise for the http request + */ + listProjects(cb) { + return this._requestAllPages(`/orgs/${this.__name}/projects`, {AcceptHeader: 'inertia-preview'}, cb); + } + + /** + * Create a new project + * @see https://developer.github.com/v3/repos/projects/#create-a-project + * @param {Object} options - the description of the project + * @param {Requestable.callback} cb - will receive the newly created project + * @return {Promise} - the promise for the http request + */ + createProject(options, cb) { + options = options || {}; + options.AcceptHeader = 'inertia-preview'; + return this._request('POST', `/orgs/${this.__name}/projects`, options, cb); + } } module.exports = Organization; diff --git a/lib/Project.js b/lib/Project.js new file mode 100644 index 00000000..ab31a078 --- /dev/null +++ b/lib/Project.js @@ -0,0 +1,236 @@ +/** + * @file + * @copyright 2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc. + * @license Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}. + * Github.js is freely distributable. + */ + +import Requestable from './Requestable'; + +/** + * Project encapsulates the functionality to create, query, and modify cards and columns. + */ +class Project extends Requestable { + /** + * Create a Project. + * @param {string} id - the id of the project + * @param {Requestable.auth} [auth] - information required to authenticate to Github + * @param {string} [apiBase=https://api.github.com] - the base Github API URL + */ + constructor(id, auth, apiBase) { + super(auth, apiBase, 'inertia-preview'); + this.__id = id; + } + + /** + * Get information about a project + * @see https://developer.github.com/v3/projects/#get-a-project + * @param {Requestable.callback} cb - will receive the project information + * @return {Promise} - the promise for the http request + */ + getProject(cb) { + return this._request('GET', `/projects/${this.__id}`, null, cb); + } + + /** + * Edit a project + * @see https://developer.github.com/v3/projects/#update-a-project + * @param {Object} options - the description of the project + * @param {Requestable.callback} cb - will receive the modified project + * @return {Promise} - the promise for the http request + */ + updateProject(options, cb) { + return this._request('PATCH', `/projects/${this.__id}`, options, cb); + } + + /** + * Delete a project + * @see https://developer.github.com/v3/projects/#delete-a-project + * @param {Requestable.callback} cb - will receive true if the operation is successful + * @return {Promise} - the promise for the http request + */ + deleteProject(cb) { + return this._request('DELETE', `/projects/${this.__id}`, null, cb); + } + + /** + * Get information about all columns of a project + * @see https://developer.github.com/v3/projects/columns/#list-project-columns + * @param {Requestable.callback} [cb] - will receive the list of columns + * @return {Promise} - the promise for the http request + */ + listProjectColumns(cb) { + return this._requestAllPages(`/projects/${this.__id}/columns`, null, cb); + } + + /** + * Get information about a column + * @see https://developer.github.com/v3/projects/columns/#get-a-project-column + * @param {string} colId - the id of the column + * @param {Requestable.callback} cb - will receive the column information + * @return {Promise} - the promise for the http request + */ + getProjectColumn(colId, cb) { + return this._request('GET', `/projects/columns/${colId}`, null, cb); + } + + /** + * Create a new column + * @see https://developer.github.com/v3/projects/columns/#create-a-project-column + * @param {Object} options - the description of the column + * @param {Requestable.callback} cb - will receive the newly created column + * @return {Promise} - the promise for the http request + */ + createProjectColumn(options, cb) { + return this._request('POST', `/projects/${this.__id}/columns`, options, cb); + } + + /** + * Edit a column + * @see https://developer.github.com/v3/projects/columns/#update-a-project-column + * @param {string} colId - the column id + * @param {Object} options - the description of the column + * @param {Requestable.callback} cb - will receive the modified column + * @return {Promise} - the promise for the http request + */ + updateProjectColumn(colId, options, cb) { + return this._request('PATCH', `/projects/columns/${colId}`, options, cb); + } + + /** + * Delete a column + * @see https://developer.github.com/v3/projects/columns/#delete-a-project-column + * @param {string} colId - the column to be deleted + * @param {Requestable.callback} cb - will receive true if the operation is successful + * @return {Promise} - the promise for the http request + */ + deleteProjectColumn(colId, cb) { + return this._request('DELETE', `/projects/columns/${colId}`, null, cb); + } + + /** + * Move a column + * @see https://developer.github.com/v3/projects/columns/#move-a-project-column + * @param {string} colId - the column to be moved + * @param {string} position - can be one of first, last, or after:, + * where is the id value of a column in the same project. + * @param {Requestable.callback} cb - will receive true if the operation is successful + * @return {Promise} - the promise for the http request + */ + moveProjectColumn(colId, position, cb) { + return this._request( + 'POST', + `/projects/columns/${colId}/moves`, + {position: position}, + cb + ); + } + + /** + * Get information about all cards of a project + * @see https://developer.github.com/v3/projects/cards/#list-project-cards + * @param {Requestable.callback} [cb] - will receive the list of cards + * @return {Promise} - the promise for the http request + */ + listProjectCards(cb) { + return this.listProjectColumns() + .then(({data}) => { + return Promise.all(data.map((column) => { + return this._requestAllPages(`/projects/columns/${column.id}/cards`, null); + })); + }).then((cardsInColumns) => { + const cards = cardsInColumns.reduce((prev, {data}) => { + prev.push(...data); + return prev; + }, []); + if (cb) { + cb(null, cards); + } + return cards; + }).catch((err) => { + if (cb) { + cb(err); + return; + } + throw err; + }); + } + + /** + * Get information about all cards of a column + * @see https://developer.github.com/v3/projects/cards/#list-project-cards + * @param {string} colId - the id of the column + * @param {Requestable.callback} [cb] - will receive the list of cards + * @return {Promise} - the promise for the http request + */ + listColumnCards(colId, cb) { + return this._requestAllPages(`/projects/columns/${colId}/cards`, null, cb); + } + + /** + * Get information about a card + * @see https://developer.github.com/v3/projects/cards/#get-a-project-card + * @param {string} cardId - the id of the card + * @param {Requestable.callback} cb - will receive the card information + * @return {Promise} - the promise for the http request + */ + getProjectCard(cardId, cb) { + return this._request('GET', `/projects/columns/cards/${cardId}`, null, cb); + } + + /** + * Create a new card + * @see https://developer.github.com/v3/projects/cards/#create-a-project-card + * @param {string} colId - the column id + * @param {Object} options - the description of the card + * @param {Requestable.callback} cb - will receive the newly created card + * @return {Promise} - the promise for the http request + */ + createProjectCard(colId, options, cb) { + return this._request('POST', `/projects/columns/${colId}/cards`, options, cb); + } + + /** + * Edit a card + * @see https://developer.github.com/v3/projects/cards/#update-a-project-card + * @param {string} cardId - the card id + * @param {Object} options - the description of the card + * @param {Requestable.callback} cb - will receive the modified card + * @return {Promise} - the promise for the http request + */ + updateProjectCard(cardId, options, cb) { + return this._request('PATCH', `/projects/columns/cards/${cardId}`, options, cb); + } + + /** + * Delete a card + * @see https://developer.github.com/v3/projects/cards/#delete-a-project-card + * @param {string} cardId - the card to be deleted + * @param {Requestable.callback} cb - will receive true if the operation is successful + * @return {Promise} - the promise for the http request + */ + deleteProjectCard(cardId, cb) { + return this._request('DELETE', `/projects/columns/cards/${cardId}`, null, cb); + } + + /** + * Move a card + * @see https://developer.github.com/v3/projects/cards/#move-a-project-card + * @param {string} cardId - the card to be moved + * @param {string} position - can be one of top, bottom, or after:, + * where is the id value of a card in the same project. + * @param {string} colId - the id value of a column in the same project. + * @param {Requestable.callback} cb - will receive true if the operation is successful + * @return {Promise} - the promise for the http request + */ + moveProjectCard(cardId, position, colId, cb) { + return this._request( + 'POST', + `/projects/columns/cards/${cardId}/moves`, + {position: position, column_id: colId}, // eslint-disable-line camelcase + cb + ); + } +} + +module.exports = Project; diff --git a/lib/Repository.js b/lib/Repository.js index 301e1230..fb200397 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -8,7 +8,7 @@ import Requestable from './Requestable'; import Utf8 from 'utf8'; import { - Base64 + Base64, } from 'js-base64'; import debug from 'debug'; const log = debug('github:repository'); @@ -28,7 +28,7 @@ class Repository extends Requestable { this.__fullname = fullname; this.__currentTree = { branch: null, - sha: null + sha: null, }; } @@ -266,21 +266,21 @@ class Repository extends Requestable { log('contet is a string'); return { content: Utf8.encode(content), - encoding: 'utf-8' + encoding: 'utf-8', }; } else if (typeof Buffer !== 'undefined' && content instanceof Buffer) { log('We appear to be in Node'); return { content: content.toString('base64'), - encoding: 'base64' + encoding: 'base64', }; } else if (typeof Blob !== 'undefined' && content instanceof Blob) { log('We appear to be in the browser'); return { content: Base64.encode(content), - encoding: 'base64' + encoding: 'base64', }; } else { // eslint-disable-line @@ -306,8 +306,8 @@ class Repository extends Requestable { path: path, sha: blobSHA, mode: '100644', - type: 'blob' - }] + type: 'blob', + }], }; return this._request('POST', `/repos/${this.__fullname}/git/trees`, newTree, cb); @@ -324,7 +324,7 @@ class Repository extends Requestable { createTree(tree, baseSHA, cb) { return this._request('POST', `/repos/${this.__fullname}/git/trees`, { tree, - base_tree: baseSHA // eslint-disable-line + base_tree: baseSHA, // eslint-disable-line camelcase }, cb); } @@ -341,7 +341,7 @@ class Repository extends Requestable { let data = { message, tree, - parents: [parent] + parents: [parent], }; return this._request('POST', `/repos/${this.__fullname}/git/commits`, data, cb) @@ -363,11 +363,46 @@ class Repository extends Requestable { updateHead(ref, commitSHA, force, cb) { return this._request('PATCH', `/repos/${this.__fullname}/git/refs/${ref}`, { sha: commitSHA, - force: force + force: force, }, cb); } /** + * Update commit status + * @see https://developer.github.com/v3/repos/statuses/ + * @param {string} commitSHA - the SHA of the commit that should be updated + * @param {object} options - Commit status parameters + * @param {string} options.state - The state of the status. Can be one of: pending, success, error, or failure. + * @param {string} [options.target_url] - The target URL to associate with this status. + * @param {string} [options.description] - A short description of the status. + * @param {string} [options.context] - A string label to differentiate this status among CI systems. + * @param {Requestable.callback} cb - will receive the updated commit back + * @return {Promise} - the promise for the http request + */ + updateStatus(commitSHA, options, cb) { + return this._request('POST', `/repos/${this.__fullname}/statuses/${commitSHA}`, options, cb); + } + + /** + * Update repository information + * @see https://developer.github.com/v3/repos/#edit + * @param {object} options - New parameters that will be set to the repository + * @param {string} options.name - Name of the repository + * @param {string} [options.description] - A short description of the repository + * @param {string} [options.homepage] - A URL with more information about the repository + * @param {boolean} [options.private] - Either true to make the repository private, or false to make it public. + * @param {boolean} [options.has_issues] - Either true to enable issues for this repository, false to disable them. + * @param {boolean} [options.has_wiki] - Either true to enable the wiki for this repository, false to disable it. + * @param {boolean} [options.has_downloads] - Either true to enable downloads, false to disable them. + * @param {string} [options.default_branch] - Updates the default branch for this repository. + * @param {Requestable.callback} cb - will receive the updated repository back + * @return {Promise} - the promise for the http request + */ + updateRepository(options, cb) { + return this._request('PATCH', `/repos/${this.__fullname}`, options, cb); + } + + /** * Get information about the repository * @see https://developer.github.com/v3/repos/#get * @param {Requestable.callback} cb - will receive the information about the repository @@ -384,6 +419,16 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ getContributors(cb) { + return this._request('GET', `/repos/${this.__fullname}/contributors`, null, cb); + } + + /** + * List the contributor stats to the repository + * @see https://developer.github.com/v3/repos/#list-contributors + * @param {Requestable.callback} cb - will receive the list of contributors + * @return {Promise} - the promise for the http request + */ + getContributorStats(cb) { return this._request('GET', `/repos/${this.__fullname}/stats/contributors`, null, cb); } @@ -421,7 +466,7 @@ class Repository extends Requestable { getContents(ref, path, raw, cb) { path = path ? `${encodeURI(path)}` : ''; return this._request('GET', `/repos/${this.__fullname}/contents/${path}`, { - ref + ref, }, cb, raw); } @@ -435,7 +480,7 @@ class Repository extends Requestable { */ getReadme(ref, raw, cb) { return this._request('GET', `/repos/${this.__fullname}/readme`, { - ref + ref, }, cb, raw); } @@ -478,7 +523,7 @@ class Repository extends Requestable { let sha = response.data.object.sha; return this.createRef({ sha, - ref: `refs/heads/${newBranch}` + ref: `refs/heads/${newBranch}`, }, cb); }); } @@ -494,21 +539,6 @@ class Repository extends Requestable { return this._request('POST', `/repos/${this.__fullname}/pulls`, options, cb); } - /** - * Update a pull request - * @deprecated since version 2.4.0 - * @see https://developer.github.com/v3/pulls/#update-a-pull-request - * @param {number|string} number - the number of the pull request to update - * @param {Object} options - the pull request description - * @param {Requestable.callback} [cb] - will receive the pull request information - * @return {Promise} - the promise for the http request - */ - updatePullRequst(number, options, cb) { - log('Deprecated: This method contains a typo and it has been deprecated. It will be removed in next major version. Use updatePullRequest() instead.'); - - return this.updatePullRequest(number, options, cb); - } - /** * Update a pull request * @see https://developer.github.com/v3/pulls/#update-a-pull-request @@ -633,7 +663,7 @@ class Repository extends Requestable { const deleteCommit = { message: `Delete the file at '${path}'`, sha: response.data.sha, - branch + branch, }; return this._request('DELETE', `/repos/${this.__fullname}/contents/${path}`, deleteCommit, cb); }); @@ -694,7 +724,7 @@ class Repository extends Requestable { message, author: options.author, committer: options.committer, - content: shouldEncode ? Base64.encode(content) : content + content: shouldEncode ? Base64.encode(content) : content, }; return this.getSha(branch, filePath) @@ -803,6 +833,30 @@ class Repository extends Requestable { mergePullRequest(number, options, cb) { return this._request('PUT', `/repos/${this.__fullname}/pulls/${number}/merge`, options, cb); } + + /** + * Get information about all projects + * @see https://developer.github.com/v3/projects/#list-repository-projects + * @param {Requestable.callback} [cb] - will receive the list of projects + * @return {Promise} - the promise for the http request + */ + listProjects(cb) { + return this._requestAllPages(`/repos/${this.__fullname}/projects`, {AcceptHeader: 'inertia-preview'}, cb); + } + + /** + * Create a new project + * @see https://developer.github.com/v3/projects/#create-a-repository-project + * @param {Object} options - the description of the project + * @param {Requestable.callback} cb - will receive the newly created project + * @return {Promise} - the promise for the http request + */ + createProject(options, cb) { + options = options || {}; + options.AcceptHeader = 'inertia-preview'; + return this._request('POST', `/repos/${this.__fullname}/projects`, options, cb); + } + } module.exports = Repository; diff --git a/lib/Requestable.js b/lib/Requestable.js index 95c23bbd..8d39c04f 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -8,14 +8,9 @@ import axios from 'axios'; import debug from 'debug'; import {Base64} from 'js-base64'; -import {polyfill} from 'es6-promise'; const log = debug('github:request'); -if (typeof Promise === 'undefined') { - polyfill(); -} - /** * The error structure returned when a network call fails */ @@ -30,7 +25,7 @@ class ResponseError extends Error { super(message); this.path = path; this.request = response.config; - this.response = response; + this.response = (response || {}).response || response; this.status = response.status; } } @@ -51,14 +46,16 @@ class Requestable { * @param {Requestable.auth} [auth] - the credentials to authenticate to Github. If auth is * not provided request will be made unauthenticated * @param {string} [apiBase=https://api.github.com] - the base Github API URL + * @param {string} [AcceptHeader=v3] - the accept header for the requests */ - constructor(auth, apiBase) { + constructor(auth, apiBase, AcceptHeader) { this.__apiBase = apiBase || 'https://api.github.com'; this.__auth = { token: auth.token, username: auth.username, - password: auth.password + password: auth.password, }; + this.__AcceptHeader = AcceptHeader || 'v3'; if (auth.token) { this.__authorizationHeader = 'token ' + auth.token; @@ -88,14 +85,20 @@ class Requestable { * Compute the headers required for an API request. * @private * @param {boolean} raw - if the request should be treated as JSON or as a raw request + * @param {string} AcceptHeader - the accept header for the request * @return {Object} - the headers to use in the request */ - __getRequestHeaders(raw) { + __getRequestHeaders(raw, AcceptHeader) { let headers = { - 'Accept': raw ? 'application/vnd.github.v3.raw+json' : 'application/vnd.github.v3+json', - 'Content-Type': 'application/json;charset=UTF-8' + 'Content-Type': 'application/json;charset=UTF-8', + 'Accept': 'application/vnd.github.' + (AcceptHeader || this.__AcceptHeader), }; + if (raw) { + headers.Accept += '.raw'; + } + headers.Accept += '+json'; + if (this.__authorizationHeader) { headers.Authorization = this.__authorizationHeader; } @@ -152,7 +155,13 @@ class Requestable { */ _request(method, path, data, cb, raw) { const url = this.__getURL(path); - const headers = this.__getRequestHeaders(raw); + + const AcceptHeader = (data || {}).AcceptHeader; + if (AcceptHeader) { + delete data.AcceptHeader; + } + const headers = this.__getRequestHeaders(raw, AcceptHeader); + let queryParams = {}; const shouldUseDataAsParams = data && (typeof data === 'object') && methodHasNoBody(method); @@ -167,7 +176,7 @@ class Requestable { headers: headers, params: queryParams, data: data, - responseType: raw ? 'text' : 'json' + responseType: raw ? 'text' : 'json', }; log(`${config.method} to ${config.url}`); @@ -175,7 +184,15 @@ class Requestable { if (cb) { requestPromise.then((response) => { - cb(null, response.data || true, response); + if (response.data && Object.keys(response.data).length > 0) { + // When data has results + cb(null, response.data, response); + } else if (config.method !== 'GET' && Object.keys(response.data).length < 1) { + // True when successful submit a request and receive a empty object + cb(null, (response.status < 300), response); + } else { + cb(null, response.data, response); + } }); } @@ -198,7 +215,7 @@ class Requestable { } return true; }, function failure(response) { - if (response.status === 404) { + if (response.response.status === 404) { if (cb) { cb(null, false, response); } @@ -236,7 +253,7 @@ class Requestable { let message = `cannot figure out how to append ${response.data} to the result set`; throw new ResponseError(message, path, response); } - results.push.apply(results, thisGroup); + results.push(...thisGroup); const nextUrl = getNextPage(response.headers.link); if (nextUrl) { @@ -279,7 +296,7 @@ function callbackErrorOrThrow(cb, path) { return function handler(object) { let error; if (object.hasOwnProperty('config')) { - const {status, statusText, config: {method, url}} = object; + const {response: {status, statusText}, config: {method, url}} = object; let message = (`${status} error making request ${method} ${url}: "${statusText}"`); error = new ResponseError(message, path, object); log(`${message} ${JSON.stringify(object.data)}`); diff --git a/lib/User.js b/lib/User.js index be86c4fc..3f3b4bb6 100644 --- a/lib/User.js +++ b/lib/User.js @@ -132,6 +132,16 @@ class User extends Requestable { return this._requestAllPages(this.__getScopedUrl('starred'), requestOptions, cb); } + /** + * List email addresses for a user + * @see https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user + * @param {Requestable.callback} [cb] - will receive the list of emails + * @return {Promise} - the promise for the http request + */ + getEmails(cb) { + return this._request('GET', '/user/emails', null, cb); + } + /** * Have the authenticated user follow this user * @see https://developer.github.com/v3/users/followers/#follow-a-user diff --git a/package.json b/package.json index c942525d..f6ff43a1 100644 --- a/package.json +++ b/package.json @@ -8,17 +8,20 @@ "Ændrew Rininsland (http://www.aendrew.com)", "Aurelio De Rosa (http://www.audero.it/)", "Clay Reimann (http://clayreimann.me)", - "Michael Aufreiter (http://substance.io)" + "Michael Aufreiter (http://substance.io)", + "Mathieu Dutour (https://github.com/mathieudutour)" ], "readmeFilename": "README.md", "scripts": { "clean": "gulp clean", "build": "gulp build", "test": "mocha --opts ./mocha.opts test/*.spec.js", + "test-coverage": "NODE_ENV=test nyc mocha --opts ./mocha.opts test/*.spec.js", "test-verbose": "DEBUG=github* npm test", "lint": "gulp lint", "make-docs": "node_modules/.bin/jsdoc -c .jsdoc.json --verbose", - "release": "./release.sh" + "release": "./release.sh", + "codecov": "nyc report --reporter=text-lcov > coverage.lcov && codecov" }, "babel": { "presets": [ @@ -26,33 +29,38 @@ ], "plugins": [ [ - "transform-es2015-modules-umd", - { - "globals": { - "es6-promise": "Promise" - } - } + "add-module-exports", + "transform-es2015-modules-umd" ] ], "env": { "development": { "sourceMaps": "inline" + }, + "test": { + "plugins": [ + "istanbul" + ] } } }, + "nyc": { + "sourceMap": false, + "instrument": false + }, "files": [ - "dist/*", - "lib/*" + "dist/*" ], "dependencies": { - "axios": "^0.10.0", + "axios": "^0.15.2", "debug": "^2.2.0", - "es6-promise": "^3.0.2", "js-base64": "^2.1.9", "utf8": "^2.1.1" }, "devDependencies": { "babel-core": "^6.7.7", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-istanbul": "3.0.0", "babel-plugin-transform-es2015-modules-umd": "^6.5.0", "babel-preset-es2015": "^6.5.0", "babel-register": "^6.7.2", @@ -60,33 +68,34 @@ "browserify": "^13.0.0", "codecov": "^1.0.1", "del": "^2.2.0", - "eslint-config-google": "^0.5.0", - "eslint-plugin-mocha": "^2.2.0", + "eslint-config-google": "^0.7.0", + "eslint-plugin-mocha": "^4.7.0", "gulp": "^3.9.0", "gulp-babel": "^6.1.2", - "gulp-eslint": "^2.0.0", - "gulp-jscs": "^3.0.2", + "gulp-eslint": "^3.0.1", + "gulp-jscs": "^4.0.0", "gulp-jscs-stylish": "^1.3.0", "gulp-rename": "^1.2.2", - "gulp-sourcemaps": "^1.6.0", - "gulp-uglify": "^1.5.1", + "gulp-sourcemaps": "^2.2.0", + "gulp-uglify": "^2.0.0", "jsdoc": "^3.4.0", "minami": "^1.1.1", - "mocha": "^2.3.4", + "mocha": "^3.1.2", "must": "^0.13.1", - "nock": "^8.0.0", + "nock": "^9.0.2", + "nyc": "9.0.1", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" }, "repository": { "type": "git", - "url": "git://github.com/michael/github.git" + "url": "git://github.com/github-tools/github.git" }, "keywords": [ "github", "api" ], "bugs": { - "url": "https://github.com/michael/github/issues" + "url": "https://github.com/github-tools/github/issues" } } diff --git a/release.sh b/release.sh index 0b3a3c37..63853dae 100755 --- a/release.sh +++ b/release.sh @@ -1,15 +1,18 @@ #!/bin/bash # This is the automated release script -# make sure all our dependencies are installed so we can publish docs -npm install - # guard against stupid if [ -z "$1" ]; then echo "You must specify a new version level: [patch, minor, major]"; exit 1; fi +# make sure all our dependencies are installed so we can publish docs +npm install + +# try to build to make sure we don't publish something really broken +npm run build + # bump the version echo "npm version $1" npm version $1 @@ -32,5 +35,5 @@ git checkout gh-pages mv out/* docs/ echo $VERSION >> _data/versions.csv git add . -git co -m "adding docs for v$VERSION" +git commit -m "adding docs for v$VERSION" git push diff --git a/test/auth.spec.js b/test/auth.spec.js index 2c03d766..bd0d8205 100644 --- a/test/auth.spec.js +++ b/test/auth.spec.js @@ -13,7 +13,7 @@ describe('Github', function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); user = github.getUser(); @@ -70,7 +70,7 @@ describe('Github', function() { github = new Github({ username: testUser.USERNAME, password: 'fake124', - auth: 'basic' + auth: 'basic', }); user = github.getUser(); @@ -83,7 +83,7 @@ describe('Github', function() { it('should fail authentication and return err', function(done) { user.listNotifications(assertFailure(done, function(err) { - expect(err.status).to.be.equal(401, 'Return 401 status for bad auth'); + expect(err.response.status).to.be.equal(401, 'Return 401 status for bad auth'); expect(err.response.data.message).to.equal('Bad credentials'); done(); diff --git a/test/gist.spec.js b/test/gist.spec.js index 0fa476bd..c9c2e393 100644 --- a/test/gist.spec.js +++ b/test/gist.spec.js @@ -15,7 +15,7 @@ describe('Gist', function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); }); diff --git a/test/helpers/callbacks.js b/test/helpers/callbacks.js index 112464ac..9c80ad98 100644 --- a/test/helpers/callbacks.js +++ b/test/helpers/callbacks.js @@ -7,7 +7,6 @@ export function assertSuccessful(done, cb) { try { expect(err).not.to.exist(err ? (err.response ? err.response.data : err) : 'No error'); expect(res).to.exist(); - expect(xhr).to.be.an.object(); if (cb) { setTimeout(function delay() { diff --git a/test/helpers/helperFunctions.js b/test/helpers/helperFunctions.js new file mode 100644 index 00000000..c35ed64f --- /dev/null +++ b/test/helpers/helperFunctions.js @@ -0,0 +1,43 @@ +export function getNextPage(linksHeader = '') { + const links = linksHeader.split(/\s*,\s*/); // splits and strips the urls + return links.reduce(function(nextUrl, link) { + if (link.search(/rel="next"/) !== -1) { + return (link.match(/<(.*)>/) || [])[1]; + } + + return nextUrl; + }, undefined); +} + +export function deleteRepo(repo, github) { + return github + .getRepo(repo.owner.login, repo.name) + .deleteRepo() + .then((removed) => { + if (removed) { + console.log(repo.full_name, 'deleted'); // eslint-disable-line + } + }); +} + +export function deleteTeam(team, github) { + return github + .getTeam(team.id) + .deleteTeam() + .then((removed) => { + if (removed) { + console.log('team', team.name, 'deleted'); //eslint-disable-line + } + }); +} + +export function deleteProject(project, github) { + return github + .getProject(project.id) + .deleteProject() + .then((removed) => { + if (removed) { + console.log('project', project.name, 'deleted'); //eslint-disable-line + } + }); +} diff --git a/test/helpers/wait.js b/test/helpers/wait.js new file mode 100644 index 00000000..680ea360 --- /dev/null +++ b/test/helpers/wait.js @@ -0,0 +1,5 @@ +export default function(delay = 1000) { + return () => new Promise((resolve) => { + setTimeout(() => resolve(), delay); + }); +} diff --git a/test/issue.spec.js b/test/issue.spec.js index e3d0bb78..5064c556 100644 --- a/test/issue.spec.js +++ b/test/issue.spec.js @@ -2,20 +2,43 @@ import expect from 'must'; import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; +import wait from './helpers/wait'; import {assertSuccessful} from './helpers/callbacks'; +import getTestRepoName from './helpers/getTestRepoName'; describe('Issue', function() { let github; + const testRepoName = getTestRepoName(); let remoteIssues; before(function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); - remoteIssues = github.getIssues(testUser.USERNAME, 'TestRepo'); + return github + .getUser() + .createRepo({name: testRepoName}) + .then(wait(5000)) + .then(function() { + remoteIssues = github.getIssues(testUser.USERNAME, testRepoName); + return remoteIssues.createIssue({ + title: 'Test issue', + body: 'Test issue body', + }); + }) + .then(function() { + return remoteIssues.createMilestone({ + title: 'Default Milestone', + description: 'Test', + }); + }); + }); + + after(function() { + return github.getRepo(testUser.USERNAME, testRepoName).deleteRepo(); }); describe('reading', function() { @@ -69,6 +92,7 @@ describe('Issue', function() { let createdIssueId; let issueCommentId; let createdMilestoneId; + let createdLabel; // 200ms between tests so that Github has a chance to settle beforeEach(function(done) { @@ -78,7 +102,7 @@ describe('Issue', function() { it('should create issue', function(done) { const newIssue = { title: 'New issue', - body: 'New issue body' + body: 'New issue body', }; remoteIssues.createIssue(newIssue, assertSuccessful(done, function(err, issue) { @@ -94,7 +118,7 @@ describe('Issue', function() { it('should edit issue', function(done) { const newProps = { title: 'Edited title', - state: 'closed' + state: 'closed', }; remoteIssues.editIssue(createdIssueId, newProps, assertSuccessful(done, function(err, issue) { @@ -148,7 +172,7 @@ describe('Issue', function() { it('should create a milestone', function(done) { let milestone = { title: 'v42', - description: 'The ultimate version' + description: 'The ultimate version', }; remoteIssues.createMilestone(milestone) @@ -162,7 +186,7 @@ describe('Issue', function() { }); it('should update a milestone', function(done) { let milestone = { - description: 'Version 6 * 7' + description: 'Version 6 * 7', }; expect(createdMilestoneId).to.be.a.number(); @@ -182,5 +206,71 @@ describe('Issue', function() { done(); }).catch(done); }); + + it('should create a label', (done) => { + let label = { + name: 'test', + color: '123456', + }; + + remoteIssues.createLabel(label) + .then(({data: _createdLabel}) => { + expect(_createdLabel).to.have.own('name', label.name); + expect(_createdLabel).to.have.own('color', label.color); + + createdLabel = label.name; + done(); + }).catch(done); + }); + + it('should retrieve a single label', (done) => { + let label = { + name: 'test', + color: '123456', + }; + + remoteIssues.getLabel(label.name) + .then(({data: retrievedLabel}) => { + expect(retrievedLabel).to.have.own('name', label.name); + expect(retrievedLabel).to.have.own('color', label.color); + + done(); + }).catch(done); + }); + + it('should update a label', (done) => { + let label = { + color: '789abc', + }; + + expect(createdLabel).to.be.a.string(); + remoteIssues.editLabel(createdLabel, label) + .then(({data: updatedLabel}) => { + expect(updatedLabel).to.have.own('name', createdLabel); + expect(updatedLabel).to.have.own('color', label.color); + + done(); + }).catch(done); + }); + + it('should list labels', (done) => { + expect(createdLabel).to.be.a.string(); + + remoteIssues.listLabels({}, assertSuccessful(done, function(err, labels) { + expect(labels).to.be.an.array(); + const hasLabel = labels.some((label) => label.name === createdLabel); + expect(hasLabel).to.be.true(); + done(); + })); + }); + + it('should delete a label', (done) => { + expect(createdLabel).to.be.a.string(); + remoteIssues.deleteLabel(createdLabel) + .then(({status}) => { + expect(status).to.equal(204); + done(); + }).catch(done); + }); }); }); diff --git a/test/markdown.spec.js b/test/markdown.spec.js index 22f5d982..eef9fe08 100644 --- a/test/markdown.spec.js +++ b/test/markdown.spec.js @@ -11,7 +11,7 @@ describe('Markdown', function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); markdown = github.getMarkdown(); @@ -19,7 +19,7 @@ describe('Markdown', function() { it('should convert markdown to html as plain Markdown', function(done) { const options = { - text: 'Hello world github/linguist#1 **cool**, and #1!' + text: 'Hello world github/linguist#1 **cool**, and #1!', }; markdown.render(options) @@ -33,7 +33,7 @@ describe('Markdown', function() { const options = { text: 'Hello world github/linguist#1 **cool**, and #1!', mode: 'gfm', - context: 'github/gollum' + context: 'github/gollum', }; markdown.render(options) .then(function({data: html}) { diff --git a/test/organization.spec.js b/test/organization.spec.js index 9d5f75f6..26fd3607 100644 --- a/test/organization.spec.js +++ b/test/organization.spec.js @@ -9,14 +9,19 @@ describe('Organization', function() { let github; const ORG_NAME = 'github-tools'; const MEMBER_NAME = 'clayreimann'; + let createdProject; before(function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); + return; + }); + after(function() { + return github.getProject(createdProject.id).deleteProject(); }); describe('reading', function() { @@ -35,7 +40,7 @@ describe('Organization', function() { .then(function({data: members}) { expect(members).to.be.an.array(); - let hasClayReimann = members.reduce((found, member) => member.login === MEMBER_NAME || found, false); + const hasClayReimann = members.some((member) => member.login === MEMBER_NAME); expect(hasClayReimann).to.be.true(); done(); @@ -76,28 +81,48 @@ describe('Organization', function() { })); }); - // TODO: The longer this is in place the slower it will get if we don't cleanup random test teams + it('should create an organization team', function(done) { + const options = { + name: testRepoName, + description: 'Created by unit tests', + privacy: 'secret', + }; + + organization.createTeam(options, assertSuccessful(done, function(err, team) { + expect(team.name).to.equal(testRepoName); + expect(team.organization.login).to.equal(testUser.ORGANIZATION); // jscs:ignore + done(); + })); + }); + it('should list the teams in the organization', function() { return organization.getTeams() .then(({data}) => { - const hasTeam = data.reduce( - (found, member) => member.slug === 'fixed-test-team-1' || found, - false); + const hasTeam = data.some((member) => member.slug === testRepoName); expect(hasTeam).to.be.true(); }); }); - it('should create an organization team', function(done) { - const options = { + it('should create a project', function(done) { + organization.createProject({ name: testRepoName, - description: 'Created by unit tests', - privacy: 'secret' - }; + body: 'body', + }, assertSuccessful(done, function(err, project) { + createdProject = project; + expect(project).to.own('name', testRepoName); + expect(project).to.own('body', 'body'); + done(); + })); + }); - organization.createTeam(options, assertSuccessful(done, function(err, team) { - expect(team.name).to.equal(testRepoName); - expect(team.organization.login).to.equal(testUser.ORGANIZATION); // jscs:ignore + it('should list repo projects', function(done) { + organization.listProjects(assertSuccessful(done, function(err, projects) { + expect(projects).to.be.an.array(); + + const hasProject = projects.some((project) => project.name === testRepoName); + + expect(hasProject).to.be.true(); done(); })); }); diff --git a/test/project.spec.js b/test/project.spec.js new file mode 100644 index 00000000..cccf4e81 --- /dev/null +++ b/test/project.spec.js @@ -0,0 +1,171 @@ +import expect from 'must'; + +import Github from '../lib/GitHub'; +import wait from './helpers/wait'; +import testUser from './fixtures/user.json'; +import {assertSuccessful} from './helpers/callbacks'; +import getTestRepoName from './helpers/getTestRepoName'; + +describe('Project', function() { + let github; + const testRepoName = getTestRepoName(); + let project; + let columnId; + let cardId; + + before(function() { + github = new Github({ + username: testUser.USERNAME, + password: testUser.PASSWORD, + auth: 'basic', + }); + + return github + .getUser() + .createRepo({name: testRepoName}) + .then(wait(5000)) + .then(function() { + const remoteRepo = github.getRepo(testUser.USERNAME, testRepoName); + return remoteRepo.createProject({ + name: 'test-project', + body: 'body', + }); + }) + .then(function(_project) { + project = github.getProject(_project.data.id); + }); + }); + + after(function() { + return github.getRepo(testUser.USERNAME, testRepoName).deleteRepo(); + }); + + it('should get repo project', function(done) { + project.getProject(assertSuccessful(done, function(err, project) { + expect(project).to.own('name', 'test-project'); + done(); + })); + }); + + it('should update a project', function(done) { + project.updateProject({ + name: 'another-test-project', + body: 'another-body', + }, assertSuccessful(done, function(err, project) { + expect(project).to.own('name', 'another-test-project'); + expect(project).to.own('body', 'another-body'); + done(); + })); + }); + + it('should create a repo project column', function(done) { + project.createProjectColumn({ + name: 'test-column', + }, assertSuccessful(done, function(err, column) { + expect(column).to.own('name', 'test-column'); + columnId = column.id; + done(); + })); + }); + + it('should list repo project columns', function(done) { + project.listProjectColumns(assertSuccessful(done, function(err, columns) { + expect(columns).to.be.an.array(); + expect(columns.length).to.equal(1); + done(); + })); + }); + + it('should get repo project column', function(done) { + project.getProjectColumn(columnId, assertSuccessful(done, function(err, project) { + expect(project).to.own('name', 'test-column'); + done(); + })); + }); + + it('should update a repo project column', function(done) { + project.updateProjectColumn(columnId, { + name: 'another-test-column', + }, assertSuccessful(done, function(err, column) { + expect(column).to.own('name', 'another-test-column'); + done(); + })); + }); + + it('should create repo project card', function(done) { + project.createProjectCard(columnId, { + note: 'test-card', + }, assertSuccessful(done, function(err, card) { + expect(card).to.own('note', 'test-card'); + cardId = card.id; + done(); + })); + }); + + it('should list cards of a project', function(done) { + project.listProjectCards(assertSuccessful(done, function(err, cards) { + expect(cards).to.be.an.array(); + expect(cards.length).to.equal(1); + done(); + })); + }); + + it('should list cards of a column', function(done) { + project.listColumnCards(columnId, assertSuccessful(done, function(err, cards) { + expect(cards).to.be.an.array(); + expect(cards.length).to.equal(1); + done(); + })); + }); + + it('should get repo project card', function(done) { + project.getProjectCard(cardId, assertSuccessful(done, function(err, card) { + expect(card).to.own('note', 'test-card'); + done(); + })); + }); + + it('should update repo project card', function(done) { + project.updateProjectCard(cardId, { + note: 'another-test-card', + }, assertSuccessful(done, function(err, card) { + expect(card).to.own('note', 'another-test-card'); + done(); + })); + }); + + it('should move repo project card', function(done) { + project.moveProjectCard(cardId, 'top', columnId, assertSuccessful(done, function(err, result) { + expect(result).to.be(true); + done(); + })); + }); + + it('should move repo project column', function(done) { + project.moveProjectColumn(columnId, 'first', assertSuccessful(done, function(err, result) { + expect(result).to.be(true); + done(); + })); + }); + + it('should delete repo project card', function(done) { + project.deleteProjectCard(cardId, assertSuccessful(done, function(err, result) { + expect(result).to.be(true); + done(); + })); + }); + + it('should delete repo project column', function(done) { + project.deleteProjectColumn(columnId, assertSuccessful(done, function(err, result) { + expect(result).to.be(true); + done(); + })); + }); + + it('should delete repo project', function(done) { + project.deleteProject(assertSuccessful(done, function(err, result) { + expect(result).to.be(true); + done(); + })); + }); +}); diff --git a/test/rate-limit.spec.js b/test/rate-limit.spec.js index 23e12d14..c3a5b858 100644 --- a/test/rate-limit.spec.js +++ b/test/rate-limit.spec.js @@ -12,7 +12,7 @@ describe('RateLimit', function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); rateLimit = github.getRateLimit(); diff --git a/test/repository.spec.js b/test/repository.spec.js index f747878d..ef5101cf 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -1,6 +1,7 @@ import expect from 'must'; import Github from '../lib/GitHub'; +import wait from './helpers/wait'; import testUser from './fixtures/user.json'; import loadImage from './fixtures/imageBlob'; import {assertSuccessful, assertFailure} from './helpers/callbacks'; @@ -8,18 +9,18 @@ import getTestRepoName from './helpers/getTestRepoName'; describe('Repository', function() { let github; - let remoteRepo; let user; let imageB64; let imageBlob; const testRepoName = getTestRepoName(); const v10SHA = '20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; - const statusUrl = 'https://api.github.com/repos/michael/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; + const statusUrl = + 'https://api.github.com/repos/github-tools/github/statuses/20fcff9129005d14cc97b9d59b8a3d37f4fb633b'; before(function(done) { github = new Github({ username: testUser.USERNAME, - password: testUser.PASSWORD + password: testUser.PASSWORD, }); loadImage(function(b64, blob) { @@ -30,13 +31,15 @@ describe('Repository', function() { }); describe('reading', function() { + let remoteRepo; + before(function() { - remoteRepo = github.getRepo('michael', 'github'); + remoteRepo = github.getRepo('github-tools', 'github'); }); it('should get repo details', function(done) { remoteRepo.getDetails(assertSuccessful(done, function(err, repo) { - expect(repo).to.have.own('full_name', 'michael/github'); + expect(repo).to.have.own('full_name', 'github-tools/github'); done(); })); @@ -137,7 +140,7 @@ describe('Repository', function() { path: 'test', author: 'AurelioDeRosa', since, - until + until, }; remoteRepo.listCommits(options, assertSuccessful(done, function(err, commits) { @@ -166,7 +169,7 @@ describe('Repository', function() { it('should fail when null ref is passed', function(done) { remoteRepo.getSingleCommit(null, assertFailure(done, function(err) { - expect(err.status).to.be(404); + expect(err.response.status).to.be(404); done(); })); }); @@ -181,6 +184,23 @@ describe('Repository', function() { const contributor = contributors[0]; + expect(contributor).to.have.own('login'); + expect(contributor).to.have.own('contributions'); + + done(); + })); + }); + + it('should show repo contributor stats', function(done) { + remoteRepo.getContributorStats(assertSuccessful(done, function(err, contributors) { + if (!(contributors instanceof Array)) { + console.log(JSON.stringify(contributors, null, 2)); // eslint-disable-line + } + expect(contributors).to.be.an.array(); + expect(contributors.length).to.be.above(1); + + const contributor = contributors[0]; + expect(contributor).to.have.own('author'); expect(contributor).to.have.own('total'); expect(contributor).to.have.own('weeks'); @@ -224,10 +244,10 @@ describe('Repository', function() { }); it('should get a repo by fullname', function(done) { - const repoByName = github.getRepo('michael/github'); + const repoByName = github.getRepo('github-tools/github'); repoByName.getDetails(assertSuccessful(done, function(err, repo) { - expect(repo).to.have.own('full_name', 'michael/github'); + expect(repo).to.have.own('full_name', 'github-tools/github'); done(); })); @@ -265,6 +285,7 @@ describe('Repository', function() { const releaseBody = 'This is my 49 character long release description.'; let sha; let releaseId; + let remoteRepo; before(function() { user = github.getUser(); @@ -278,7 +299,7 @@ describe('Repository', function() { it('should create repo', function(done) { const repoDef = { - name: testRepoName + name: testRepoName, }; user.createRepo(repoDef, assertSuccessful(done, function(err, repo) { @@ -288,6 +309,22 @@ describe('Repository', function() { })); }); + it('should be able to edit repository information', function(done) { + const options = { + name: testRepoName, + description: 'New short description', + homepage: 'http://example.com', + }; + + remoteRepo.updateRepository(options, assertSuccessful(done, + function(err, repository) { + expect(repository).to.have.own('homepage', options.homepage); + expect(repository).to.have.own('description', options.description); + expect(repository).to.have.own('name', testRepoName); + done(); + })); + }); + it('should show repo collaborators', function(done) { remoteRepo.getCollaborators(assertSuccessful(done, function(err, collaborators) { if (!(collaborators instanceof Array)) { @@ -312,26 +349,27 @@ describe('Repository', function() { it('should write to repo', function(done) { remoteRepo.writeFile('master', fileName, initialText, initialMessage, assertSuccessful(done, function() { - remoteRepo.getContents('master', fileName, 'raw', assertSuccessful(done, function(err, fileText) { + wait()().then(() => remoteRepo.getContents('master', fileName, 'raw', + assertSuccessful(done, function(err, fileText) { expect(fileText).to.be(initialText); done(); - })); + }))); })); }); it('should rename files', function(done) { remoteRepo.writeFile('master', fileName, initialText, initialMessage, assertSuccessful(done, function() { - remoteRepo.move('master', fileName, 'new_name', assertSuccessful(done, function() { - remoteRepo.getContents('master', fileName, 'raw', assertFailure(done, function(err) { - expect(err.status).to.be(404); + wait()().then(() => remoteRepo.move('master', fileName, 'new_name', assertSuccessful(done, function() { + wait()().then(() => remoteRepo.getContents('master', fileName, 'raw', assertFailure(done, function(err) { + expect(err.response.status).to.be(404); remoteRepo.getContents('master', 'new_name', 'raw', assertSuccessful(done, function(err, fileText) { expect(fileText).to.be(initialText); done(); })); - })); - })); + }))); + }))); })); }); @@ -392,12 +430,30 @@ describe('Repository', function() { remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, refSpec) { let newRef = { ref: 'refs/heads/new-test-branch', - sha: refSpec.object.sha + sha: refSpec.object.sha, }; remoteRepo.createRef(newRef, assertSuccessful(done)); })); }); + it('should update commit status', function(done) { + const status = { + state: 'success', + target_url: 'http://example.com', // eslint-disable-line camelcase + description: 'Build was successful!', + }; + remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, refSpec) { + remoteRepo.updateStatus(refSpec.object.sha, status, assertSuccessful(done, + function(err, updated) { + expect(updated).to.have.own('state', status.state); + expect(updated).to.have.own('target_url', status.target_url); + expect(updated).to.have.own('description', status.description); + expect(updated).to.have.own('context', 'default'); + done(); + })); + })); + }); + it('should delete ref on repo', function(done) { remoteRepo.deleteRef('heads/new-test-branch', assertSuccessful(done)); }); @@ -424,7 +480,7 @@ describe('Repository', function() { }); it('should get pull requests on repo', function(done) { - const repo = github.getRepo('michael', 'github'); + const repo = github.getRepo('github-tools', 'github'); repo.getPullRequest(153, assertSuccessful(done, function(err, pr) { expect(pr).to.have.own('title'); @@ -444,7 +500,7 @@ describe('Repository', function() { it('should write author and committer to repo', function(done) { const options = { author: {name: 'Author Name', email: 'author@example.com'}, - committer: {name: 'Committer Name', email: 'committer@example.com'} + committer: {name: 'Committer Name', email: 'committer@example.com'}, }; remoteRepo.writeFile('dev', @@ -482,7 +538,7 @@ describe('Repository', function() { remoteRepo.getRef('heads/master', assertSuccessful(done, function(err, refSpec) { let newRef = { ref: 'refs/heads/testing-14', - sha: refSpec.object.sha + sha: refSpec.object.sha, }; remoteRepo.createRef(newRef, assertSuccessful(done, function() { @@ -503,7 +559,7 @@ describe('Repository', function() { it('should be able to write an image to the repo', function(done) { const opts = { - encode: false + encode: false, }; remoteRepo.writeFile('master', imageFileName, imageB64, initialMessage, opts, assertSuccessful(done, @@ -539,7 +595,7 @@ describe('Repository', function() { it('should fail on broken commit', function(done) { remoteRepo.commit('broken-parent-hash', 'broken-tree-hash', initialMessage, assertFailure(done, function(err) { - expect(err.status).to.be(422); + expect(err.response.status).to.be(422); done(); })); }); @@ -560,7 +616,7 @@ describe('Repository', function() { it('should edit a release', function(done) { const releaseDef = { name: releaseName, - body: releaseBody + body: releaseBody, }; remoteRepo.updateRelease(releaseId, releaseDef, assertSuccessful(done, function(err, release) { @@ -589,9 +645,29 @@ describe('Repository', function() { it('should delete a release', function(done) { remoteRepo.deleteRelease(releaseId, assertSuccessful(done)); }); + + it('should create a project', function(done) { + remoteRepo.createProject({ + name: 'test-project', + body: 'body', + }, assertSuccessful(done, function(err, project) { + expect(project).to.own('name', 'test-project'); + expect(project).to.own('body', 'body'); + done(); + })); + }); + + it('should list repo projects', function(done) { + remoteRepo.listProjects(assertSuccessful(done, function(err, projects) { + expect(projects).to.be.an.array(); + expect(projects.length).to.equal(1); + done(); + })); + }); }); describe('deleting', function() { + let remoteRepo; before(function() { remoteRepo = github.getRepo(testUser.USERNAME, testRepoName); }); diff --git a/test/search.spec.js b/test/search.spec.js index 93d852da..21a32935 100644 --- a/test/search.spec.js +++ b/test/search.spec.js @@ -5,14 +5,14 @@ import Github from '../lib/GitHub'; import testUser from './fixtures/user.json'; describe('Search', function() { - this.timeout(20 * 1000); + this.timeout(20 * 1000); // eslint-disable-line no-invalid-this let github; before(function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); nock.load('test/fixtures/search.json'); }); @@ -22,7 +22,7 @@ describe('Search', function() { let search = github.search({ q: 'tetris language:assembly', sort: 'stars', - order: 'desc' + order: 'desc', }); return search.forRepositories(options) @@ -35,7 +35,7 @@ describe('Search', function() { it('should search code', function() { let options; let search = github.search({ - q: 'addClass in:file language:js repo:jquery/jquery' + q: 'addClass in:file language:js repo:jquery/jquery', }); return search.forCode(options) @@ -50,7 +50,7 @@ describe('Search', function() { let search = github.search({ q: 'windows pip label:bug language:python state:open ', sort: 'created', - order: 'asc' + order: 'asc', }); return search.forIssues(options) @@ -63,7 +63,7 @@ describe('Search', function() { it('should search users', function() { let options; let search = github.search({ - q: 'tom repos:>42 followers:>1000' + q: 'tom repos:>42 followers:>1000', }); return search.forUsers(options) diff --git a/test/team.spec.js b/test/team.spec.js index 1f712617..8a5ec8be 100644 --- a/test/team.spec.js +++ b/test/team.spec.js @@ -6,7 +6,7 @@ import {assertFailure} from './helpers/callbacks'; import getTestRepoName from './helpers/getTestRepoName'; const altUser = { - USERNAME: 'mtscout6-test' + USERNAME: 'mtscout6-test', }; function createTestTeam() { @@ -15,14 +15,14 @@ function createTestTeam() { const github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); const org = github.getOrganization(testUser.ORGANIZATION); return org.createTeam({ name, - privacy: 'closed' + privacy: 'closed', }).then(({data: result}) => { const team = github.getTeam(result.id); return {team, name}; @@ -37,10 +37,59 @@ describe('Team', function() { // Isolate tests that are based on a fixed team const github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); - team = github.getTeam(2027812); // github-api-tests/fixed-test-team-1 + const org = github.getOrganization(testUser.ORGANIZATION); + + /* eslint-disable no-console */ + // The code below add a fixed-test-repo-1 + let promiseRepo = new Promise((resolve) => { + org + .createRepo({name: 'fixed-test-repo-1'}) + .then(resolve, () => { + console.log('skiped fixed-test-repo-1 creation'); + resolve(); + }); + }); + + // The code below add a fixed-test-repo-1 + let promiseTeam = org + .createTeam({ + name: 'fixed-test-repo-1', + repo_names: [testUser.ORGANIZATION + '/fixed-test-repo-1'], // eslint-disable-line camelcase + }) + .then(({data: team}) => team) + .catch(() => { + console.log('skiped fixed-test-repo-1 creation'); + // Team already exists, fetch the team + return org.getTeams().then(({data: teams}) => { + let team = teams + .filter((team) => team.name === 'fixed-test-repo-1') + .pop(); + if (!team) { + throw new Error('missing fixed-test-repo-1'); + } + return team; + }); + }); + /* eslint-enable no-console */ + + return promiseRepo.then(() => { + return promiseTeam + .then((t) => { + team = github.getTeam(t.id); + return team; + }) + .then((team) => { + let setupTeam = [ + team.addMembership(altUser.USERNAME), + team.addMembership(testUser.USERNAME), + team.manageRepo(testUser.ORGANIZATION, 'fixed-test-repo-1'), + ]; + return Promise.all(setupTeam); + }); + }); }); it('should get membership for a given user', function() { @@ -56,10 +105,7 @@ describe('Team', function() { // Isolate tests that are based on a fixed team .then(function({data: members}) { expect(members).to.be.an.array(); - let hasTestUser = members.reduce( - (found, member) => member.login === testUser.USERNAME || found, - false - ); + const hasTestUser = members.some((member) => member.login === testUser.USERNAME); expect(hasTestUser).to.be.true(); }); @@ -68,10 +114,7 @@ describe('Team', function() { // Isolate tests that are based on a fixed team it('should get team repos', function() { return team.listRepos() .then(({data}) => { - const hasRepo = data.reduce( - (found, repo) => repo.name === 'fixed-test-repo-1' || found, - false - ); + const hasRepo = data.some((repo) => repo.name === 'fixed-test-repo-1'); expect(hasRepo).to.be.true(); }); @@ -80,7 +123,7 @@ describe('Team', function() { // Isolate tests that are based on a fixed team it('should get team', function() { return team.getTeam() .then(({data}) => { - expect(data.name).to.equal('Fixed Test Team 1'); + expect(data.name).to.equal('fixed-test-repo-1'); }); }); diff --git a/test/user.spec.js b/test/user.spec.js index 81181389..2296781c 100644 --- a/test/user.spec.js +++ b/test/user.spec.js @@ -10,7 +10,7 @@ describe('User', function() { github = new Github({ username: testUser.USERNAME, password: testUser.PASSWORD, - auth: 'basic' + auth: 'basic', }); user = github.getUser(); }); @@ -24,7 +24,7 @@ describe('User', function() { type: 'owner', sort: 'updated', per_page: 90, // eslint-disable-line - page: 10 + page: 10, }; user.listRepos(filterOpts, assertArray(done)); @@ -47,7 +47,7 @@ describe('User', function() { all: true, participating: true, since: '2015-01-01T00:00:00Z', - before: '2015-02-01T00:00:00Z' + before: '2015-02-01T00:00:00Z', }; user.listNotifications(filterOpts, assertArray(done)); @@ -68,4 +68,8 @@ describe('User', function() { it('should unfollow user', function(done) { user.unfollow('ingalls', assertSuccessful(done)); }); + + it('should list the email addresses of the user', function(done) { + user.getEmails(assertSuccessful(done)); + }); }); From 21fe6b6e3ee5fe8a1a133d7dadfd88adcac0bf39 Mon Sep 17 00:00:00 2001 From: Jeanette Head Date: Tue, 20 Dec 2016 14:51:50 -0700 Subject: [PATCH 159/217] feat: use the page option to fetch a single page Signed-off-by: Byron Anderson --- lib/Requestable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Requestable.js b/lib/Requestable.js index 8d39c04f..bad111ac 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -256,7 +256,7 @@ class Requestable { results.push(...thisGroup); const nextUrl = getNextPage(response.headers.link); - if (nextUrl) { + if (nextUrl && typeof options.page !== 'number') { log(`getting next page: ${nextUrl}`); return this._requestAllPages(nextUrl, options, cb, results); } From f075749ed4234c7d76f122879523fbca2eb01f86 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 4 Jan 2017 08:54:30 -0600 Subject: [PATCH 160/217] 3.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f6ff43a1..7c66bb60 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "2.4.0", + "version": "3.0.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 46dd1d7c20b6fa686c47d4219a1aff0ca53e6ea0 Mon Sep 17 00:00:00 2001 From: Felix Kling Date: Thu, 5 Jan 2017 08:56:15 -0800 Subject: [PATCH 161/217] Add methods to fetch gist's commit and specific revision (#412) Add support for: - https://developer.github.com/v3/gists/#list-gist-commits - https://developer.github.com/v3/gists/#get-a-specific-revision-of-a-gist --- lib/Gist.js | 21 +++++++++++++++++++++ test/gist.spec.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/lib/Gist.js b/lib/Gist.js index 14b71322..60f18cf5 100644 --- a/lib/Gist.js +++ b/lib/Gist.js @@ -108,6 +108,27 @@ class Gist extends Requestable { return this._request204or404(`/gists/${this.__id}/star`, null, cb); } + /** + * List the gist's commits + * @see https://developer.github.com/v3/gists/#list-gist-commits + * @param {Requestable.callback} [cb] - will receive the array of commits + * @return {Promise} - the Promise for the http request + */ + listCommits(cb) { + return this._requestAllPages(`/gists/${this.__id}/commits`, null, cb); + } + + /** + * Fetch one of the gist's revision. + * @see https://developer.github.com/v3/gists/#get-a-specific-revision-of-a-gist + * @param {string} revision - the id of the revision + * @param {Requestable.callback} [cb] - will receive the revision + * @return {Promise} - the Promise for the http request + */ + getRevision(revision, cb) { + return this._request('GET', `/gists/${this.__id}/${revision}`, null, cb); + } + /** * List the gist's comments * @see https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist diff --git a/test/gist.spec.js b/test/gist.spec.js index c9c2e393..af24f966 100644 --- a/test/gist.spec.js +++ b/test/gist.spec.js @@ -10,6 +10,7 @@ describe('Gist', function() { let gistId; let github; let commentId; + let revisionId; before(function() { github = new Github({ @@ -51,6 +52,7 @@ describe('Gist', function() { expect(gist).to.have.own('public', testGist.public); expect(gist).to.have.own('description', testGist.description); gistId = gist.id; + revisionId = gist.history[0].version; done(); })); @@ -99,6 +101,36 @@ describe('Gist', function() { it('should delete comment', function(done) { gist.deleteComment(commentId, assertSuccessful(done)); }); + + it('should update gist', function(done) { + const newGist = { + files: { + 'README.md': { + content: 'README updated', + }, + }, + }; + gist.update(newGist, assertSuccessful(done, function(err, gist) { + expect(gist.history.length).to.be(2); + expect(gist.files['README.md']).to.have.own('content', newGist.files['README.md'].content); + done(); + })); + }); + + it('should list commits', function(done) { + gist.listCommits(assertSuccessful(done, function(err, commits) { + expect(commits).to.be.an.array(); + done(); + })); + }); + + it('should get revision', function(done) { + gist.getRevision(revisionId, assertSuccessful(done, function(err, gist) { + expect(gist.history.length).to.be(1); + expect(gist.files['README.md']).to.have.own('content', testGist.files['README.md'].content); + done(); + })); + }); }); describe('deleting', function() { From bc37708b4ad245e65d2bb5f6f8a5140868a8d803 Mon Sep 17 00:00:00 2001 From: Clay Reimann Date: Wed, 11 Jan 2017 09:58:18 -0600 Subject: [PATCH 162/217] 3.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c66bb60..2ea2eb9a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "3.0.0", + "version": "3.1.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From 2deb74c29e9ced29caa3aa99730ed16531a02a7d Mon Sep 17 00:00:00 2001 From: Kairat Bakitow Date: Mon, 30 Jan 2017 23:51:09 +0600 Subject: [PATCH 163/217] Fix incorrect path for delete hook API (#418) --- lib/Repository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Repository.js b/lib/Repository.js index fb200397..d338b261 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -603,7 +603,7 @@ class Repository extends Requestable { * @return {Promise} - the promise for the http request */ deleteHook(id, cb) { - return this._request('DELETE', `${this.__fullname}/hooks/${id}`, null, cb); + return this._request('DELETE', `/repos/${this.__fullname}/hooks/${id}`, null, cb); } /** From 22b889cd48cd281812b020d85f8ea502af69ddfd Mon Sep 17 00:00:00 2001 From: Julien Vanier Date: Fri, 24 Feb 2017 12:29:42 -0500 Subject: [PATCH 164/217] Docs fix for getProject (#428) --- lib/GitHub.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/GitHub.js b/lib/GitHub.js index 59cb94ff..c5cec4e2 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -117,7 +117,7 @@ class GitHub { /** * Create a new Project wrapper * @param {string} id - the id of the project - * @return {Markdown} + * @return {Project} */ getProject(id) { return new Project(id, this.__auth, this.__apiBase); From 1c18ef0eea29bb0aeb1b5dd79034ce3d1f77baf7 Mon Sep 17 00:00:00 2001 From: Andrii Lundiak Date: Fri, 8 Sep 2017 22:29:22 +0200 Subject: [PATCH 165/217] typo fix in GitHub.js --- lib/GitHub.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/GitHub.js b/lib/GitHub.js index c5cec4e2..fddd72ea 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -71,7 +71,7 @@ class GitHub { /** * Create a new Repository wrapper - * @param {string} user - the user who owns the respository + * @param {string} user - the user who owns the repository * @param {string} repo - the name of the repository * @return {Repository} */ @@ -81,7 +81,7 @@ class GitHub { /** * Create a new Issue wrapper - * @param {string} user - the user who owns the respository + * @param {string} user - the user who owns the repository * @param {string} repo - the name of the repository * @return {Issue} */ From 24223f7a51ba935f1c86ffd552dac20e8f3e359d Mon Sep 17 00:00:00 2001 From: Miyata Jumpei Date: Wed, 27 Sep 2017 01:15:56 +0900 Subject: [PATCH 166/217] chore: fix broken tests (#474) --- lib/Requestable.js | 2 +- test/organization.spec.js | 6 ++++-- test/team.spec.js | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/Requestable.js b/lib/Requestable.js index bad111ac..44702b94 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -256,7 +256,7 @@ class Requestable { results.push(...thisGroup); const nextUrl = getNextPage(response.headers.link); - if (nextUrl && typeof options.page !== 'number') { + if (nextUrl && !(options && typeof options.page !== 'number')) { log(`getting next page: ${nextUrl}`); return this._requestAllPages(nextUrl, options, cb, results); } diff --git a/test/organization.spec.js b/test/organization.spec.js index 26fd3607..710ebbcf 100644 --- a/test/organization.spec.js +++ b/test/organization.spec.js @@ -17,11 +17,13 @@ describe('Organization', function() { password: testUser.PASSWORD, auth: 'basic', }); - return; + createdProject = undefined; }); after(function() { - return github.getProject(createdProject.id).deleteProject(); + if (createdProject) { + return github.getProject(createdProject.id).deleteProject(); + } }); describe('reading', function() { diff --git a/test/team.spec.js b/test/team.spec.js index 8a5ec8be..8f975384 100644 --- a/test/team.spec.js +++ b/test/team.spec.js @@ -159,7 +159,7 @@ describe('Team', function() { // Isolate tests that need a new team per test }); it('should add membership for a given user', function() { - return team.addMembership(testUser.USERNAME) + return team.addMembership(altUser.USERNAME) .then(({data}) => { const {state, role} = data; expect(state === 'active' || state === 'pending').to.be.true(); From 64a9223cc3817b583e387efb47f7e10e9e98dba7 Mon Sep 17 00:00:00 2001 From: Clay Jensen-Reimann Date: Sun, 31 Mar 2019 18:49:32 -0500 Subject: [PATCH 167/217] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 919b5eb3..d6c7c16c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +# Maintainers wanted +[Apply within](https://github.com/github-tools/github/issues/539) + # Github.js [![Downloads per month](https://img.shields.io/npm/dm/github-api.svg?maxAge=2592000)][npm-package] From 076229dac843f5519d4b51fcc723cd2705b3e8f8 Mon Sep 17 00:00:00 2001 From: Jared Rewerts Date: Fri, 5 Apr 2019 15:07:59 -0600 Subject: [PATCH 168/217] Fixed null ref test failure. --- test/repository.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/repository.spec.js b/test/repository.spec.js index ef5101cf..40d43397 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -169,7 +169,7 @@ describe('Repository', function() { it('should fail when null ref is passed', function(done) { remoteRepo.getSingleCommit(null, assertFailure(done, function(err) { - expect(err.response.status).to.be(404); + expect(err.response.status).to.be(422); done(); })); }); From dcc347289b047ff35d4af9d6f1c330487e9bac18 Mon Sep 17 00:00:00 2001 From: Jared Rewerts Date: Fri, 5 Apr 2019 14:49:55 -0600 Subject: [PATCH 169/217] Updated markdown GFM test. --- test/markdown.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/markdown.spec.js b/test/markdown.spec.js index eef9fe08..d3738d03 100644 --- a/test/markdown.spec.js +++ b/test/markdown.spec.js @@ -37,7 +37,7 @@ describe('Markdown', function() { }; markdown.render(options) .then(function({data: html}) { - expect(html).to.be('

Hello world github/linguist#1 cool, and #1!

'); // eslint-disable-line + expect(html).to.be('

Hello world github/linguist#1 cool, and gollum#1!

'); // eslint-disable-line done(); }).catch(done); }); From cd264468b459117ab7347b9069daf98a580f282f Mon Sep 17 00:00:00 2001 From: Kenshi Kamata Date: Tue, 9 Apr 2019 12:49:09 +0900 Subject: [PATCH 170/217] feature(User): Add List starred gists API (#475) * get list of starred gist api --- lib/User.js | 17 +++++++++++++++++ test/user.spec.js | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/lib/User.js b/lib/User.js index 3f3b4bb6..7e2660d5 100644 --- a/lib/User.js +++ b/lib/User.js @@ -132,6 +132,23 @@ class User extends Requestable { return this._requestAllPages(this.__getScopedUrl('starred'), requestOptions, cb); } + /** + * Gets the list of starred gists for the user + * @see https://developer.github.com/v3/gists/#list-starred-gists + * @param {Object} [options={}] - any options to refine the search + * @param {Requestable.callback} [cb] - will receive the list of gists + * @return {Promise} - the promise for the http request + */ + listStarredGists(options, cb) { + options = options || {}; + if (typeof options === 'function') { + cb = options; + options = {}; + } + options.since = this._dateToISO(options.since); + return this._request('GET', '/gists/starred', options, cb); + } + /** * List email addresses for a user * @see https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user diff --git a/test/user.spec.js b/test/user.spec.js index 2296781c..b2ecc66e 100644 --- a/test/user.spec.js +++ b/test/user.spec.js @@ -61,6 +61,13 @@ describe('User', function() { user.listStarredRepos(assertArray(done)); }); + it('should show user\'s starred gists', function(done) { + const option = { + since: '2015-01-01T00:00:00Z', + }; + user.listStarredGists(option, assertArray(done)); + }); + it('should follow user', function(done) { user.follow('ingalls', assertSuccessful(done)); }); From cda24412632ac334387d27ec507d075b6b200b69 Mon Sep 17 00:00:00 2001 From: Alangi Derick Date: Thu, 17 Aug 2017 13:55:48 +0100 Subject: [PATCH 171/217] Adding styling to text Added styles to some portion of the text to make it more user friendly :). --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d6c7c16c..3be89eb5 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![Travis](https://img.shields.io/travis/github-tools/github.svg?maxAge=60)][travis-ci] [![Codecov](https://img.shields.io/codecov/c/github/github-tools/github.svg?maxAge=2592000)][codecov] -Github.js provides a minimal higher-level wrapper around Github's API. +`Github.js` provides a minimal higher-level wrapper around Github's API. ## Usage @@ -71,7 +71,7 @@ clayreimann.listStarredRepos(function(err, repos) { should include updated JSDoc. ## Installation -Github.js is available from `npm` or [unpkg][unpkg]. +`Github.js` is available from `npm` or [unpkg][unpkg]. ```shell npm install github-api @@ -86,10 +86,10 @@ npm install github-api ``` ## Compatibility -`Github.js` is tested on Node.js: +`Github.js` is tested on `Node.js`: * 6.x -Note: `Github.js` uses Promise, hence it will not work in Node.js < 4 without polyfill. +Note: `Github.js` uses Promise, hence it will not work in `Node.js` < 4 without polyfill. [codecov]: https://codecov.io/github/github-tools/github?branch=master [docs]: http://github-tools.github.io/github/ From 943ac8a7d36dbac6c0848bee9a5ca64dc229f807 Mon Sep 17 00:00:00 2001 From: Andrii Lundiak Date: Sat, 9 Sep 2017 18:41:17 +0200 Subject: [PATCH 172/217] typo fix in Repository.js --- lib/Repository.js | 2 +- lib/Requestable.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Repository.js b/lib/Repository.js index d338b261..45ca3f94 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -14,7 +14,7 @@ import debug from 'debug'; const log = debug('github:repository'); /** - * Respository encapsulates the functionality to create, query, and modify files. + * Repository encapsulates the functionality to create, query, and modify files. */ class Repository extends Requestable { /** diff --git a/lib/Requestable.js b/lib/Requestable.js index 44702b94..ab43d9d0 100644 --- a/lib/Requestable.js +++ b/lib/Requestable.js @@ -124,7 +124,7 @@ class Requestable { /** * if a `Date` is passed to this function it will be converted to an ISO string - * @param {*} date - the object to attempt to cooerce into an ISO date string + * @param {*} date - the object to attempt to coerce into an ISO date string * @return {string} - the ISO representation of `date` or whatever was passed in if it was not a date */ _dateToISO(date) { @@ -235,7 +235,7 @@ class Requestable { * @param {string} path - the path to request * @param {Object} options - the query parameters to include * @param {Requestable.callback} [cb] - the function to receive the data. The returned data will always be an array. - * @param {Object[]} results - the partial results. This argument is intended for interal use only. + * @param {Object[]} results - the partial results. This argument is intended for internal use only. * @return {Promise} - a promise which will resolve when all pages have been fetched * @deprecated This will be folded into {@link Requestable#_request} in the 2.0 release. */ From e26c2927a2a4f7abfe152cbd5233be48865435c4 Mon Sep 17 00:00:00 2001 From: Clay Jensen-Reimann Date: Tue, 9 Apr 2019 14:57:40 -0500 Subject: [PATCH 173/217] Update build versions, document in readme --- .travis.yml | 6 +++--- README.md | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 26f56aa3..ee525e3e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,9 @@ sudo: false language: node_js node_js: - - '6' - - '5' - - '4' + - '11' + - '10' + - '8' cache: directories: diff --git a/README.md b/README.md index 3be89eb5..bf021040 100644 --- a/README.md +++ b/README.md @@ -86,10 +86,7 @@ npm install github-api ``` ## Compatibility -`Github.js` is tested on `Node.js`: -* 6.x - -Note: `Github.js` uses Promise, hence it will not work in `Node.js` < 4 without polyfill. +`Github.js` is tested on node's LTS and current versions. [codecov]: https://codecov.io/github/github-tools/github?branch=master [docs]: http://github-tools.github.io/github/ From 9fb1f2f6fbb61009800bbf2a1dc19da7d94157b5 Mon Sep 17 00:00:00 2001 From: JongChan Choi Date: Tue, 3 Oct 2017 03:50:54 +0900 Subject: [PATCH 174/217] gist id is string --- lib/GitHub.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/GitHub.js b/lib/GitHub.js index fddd72ea..7c3ac24c 100644 --- a/lib/GitHub.js +++ b/lib/GitHub.js @@ -34,7 +34,7 @@ class GitHub { /** * Create a new Gist wrapper - * @param {number} [id] - the id for the gist, leave undefined when creating a new gist + * @param {string} [id] - the id for the gist, leave undefined when creating a new gist * @return {Gist} */ getGist(id) { From 38530fa329d636ff2233065f8048437b1ab4ef51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20P=C3=A9rez?= Date: Sat, 31 Mar 2018 10:09:46 +0200 Subject: [PATCH 175/217] Implementing methods to retrieve list of followers and following users. Github v3 provides the endpoints `followers` and `following` associated to the user entity. This change provides support for them and implements basic unit tests for them. --- lib/User.js | 20 ++++++++++++++++++++ test/user.spec.js | 8 ++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/User.js b/lib/User.js index 7e2660d5..4848a1c6 100644 --- a/lib/User.js +++ b/lib/User.js @@ -81,6 +81,26 @@ class User extends Requestable { return this._request('GET', this.__getScopedUrl('orgs'), null, cb); } + /** + * List followers of a user + * @see https://developer.github.com/v3/users/followers/#list-followers-of-a-user + * @param {Requestable.callback} [cb] - will receive the list of followers + * @return {Promise} - the promise for the http request + */ + listFollowers(cb) { + return this._request('GET', this.__getScopedUrl('followers'), null, cb); + } + + /** + * List users followed by another user + * @see https://developer.github.com/v3/users/followers/#list-users-followed-by-another-user + * @param {Requestable.callback} [cb] - will receive the list of who a user is following + * @return {Promise} - the promise for the http request + */ + listFollowing(cb) { + return this._request('GET', this.__getScopedUrl('following'), null, cb); + } + /** * List the user's gists * @see https://developer.github.com/v3/gists/#list-a-users-gists diff --git a/test/user.spec.js b/test/user.spec.js index b2ecc66e..9b033ef1 100644 --- a/test/user.spec.js +++ b/test/user.spec.js @@ -34,6 +34,14 @@ describe('User', function() { user.listOrgs(assertArray(done)); }); + it('should get user followers', function(done) { + user.listFollowers(assertArray(done)); + }); + + it('should get user following list', function(done) { + user.listFollowing(assertArray(done)); + }); + it('should get user gists', function(done) { user.listGists(assertArray(done)); }); From 90fb78b2fb4b4e8e607d24a3dacc983caed2437e Mon Sep 17 00:00:00 2001 From: Jared Rewerts Date: Tue, 9 Apr 2019 20:51:40 -0600 Subject: [PATCH 176/217] feature: Add commit author (#547) --- lib/Repository.js | 12 +++++++++++- test/repository.spec.js | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/lib/Repository.js b/lib/Repository.js index 45ca3f94..f59cf0d0 100644 --- a/lib/Repository.js +++ b/lib/Repository.js @@ -334,16 +334,26 @@ class Repository extends Requestable { * @param {string} parent - the SHA of the parent commit * @param {string} tree - the SHA of the tree for this commit * @param {string} message - the commit message + * @param {Object} [options] - commit options + * @param {Object} [options.author] - the author of the commit + * @param {Object} [options.commiter] - the committer * @param {Requestable.callback} cb - will receive the commit that is created * @return {Promise} - the promise for the http request */ - commit(parent, tree, message, cb) { + commit(parent, tree, message, options, cb) { + if (typeof options === 'function') { + cb = options; + options = {}; + } + let data = { message, tree, parents: [parent], }; + data = Object.assign({}, options, data); + return this._request('POST', `/repos/${this.__fullname}/git/commits`, data, cb) .then((response) => { this.__currentTree.sha = response.data.sha; // Update latest commit diff --git a/test/repository.spec.js b/test/repository.spec.js index 40d43397..62bb3ba6 100644 --- a/test/repository.spec.js +++ b/test/repository.spec.js @@ -600,6 +600,45 @@ describe('Repository', function() { })); }); + it('should succeed on proper commit', function(done) { + let parentSHA = ''; + let treeSHA = ''; + remoteRepo.getRef('heads/master').then((ref) => { + parentSHA = ref.data.object.sha; + return remoteRepo.getCommit(parentSHA); + }).then((commit) => { + treeSHA = commit.data.tree.sha; + return remoteRepo.commit(parentSHA, treeSHA, 'is this thing on?'); + }).then((commit) => { + expect(commit.data.author).to.have.own('name', 'Mike de Boer'); + expect(commit.data.author).to.have.own('email', 'mike@c9.io'); + done(); + }); + }); + + it('should allow commit to change author', function(done) { + let parentSHA = ''; + let treeSHA = ''; + remoteRepo.getRef('heads/master').then((ref) => { + parentSHA = ref.data.object.sha; + return remoteRepo.getCommit(parentSHA); + }).then((commit) => { + treeSHA = commit.data.tree.sha; + return remoteRepo.commit(parentSHA, treeSHA, 'Who made this commit?', { + author: { + name: 'Jimothy Halpert', + email: 'jim@dundermifflin.com', + }, + }); + }).then((commit) => { + expect(commit.data.author).to.have.own('name', 'Jimothy Halpert'); + expect(commit.data.author).to.have.own('email', 'jim@dundermifflin.com'); + done(); + }).catch((err) => { + throw err; + }); + }); + it('should create a release', function(done) { const releaseDef = { name: releaseName, From bf6b42a040a2f0461e5ab855496a5a457d3f0c71 Mon Sep 17 00:00:00 2001 From: CodyGramlich Date: Wed, 10 Apr 2019 22:24:26 -0600 Subject: [PATCH 177/217] Use username arg for follow and unfollow requests. --- lib/User.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/User.js b/lib/User.js index 3f3b4bb6..3b5cb653 100644 --- a/lib/User.js +++ b/lib/User.js @@ -150,7 +150,7 @@ class User extends Requestable { * @return {Promise} - the promise for the http request */ follow(username, cb) { - return this._request('PUT', `/user/following/${this.__user}`, null, cb); + return this._request('PUT', `/user/following/${username}`, null, cb); } /** @@ -161,7 +161,7 @@ class User extends Requestable { * @return {Promise} - the promise for the http request */ unfollow(username, cb) { - return this._request('DELETE', `/user/following/${this.__user}`, null, cb); + return this._request('DELETE', `/user/following/${username}`, null, cb); } /** From 5a5d87e94185baced8a8b6268717c5dfac8bcf8e Mon Sep 17 00:00:00 2001 From: Clay Jensen-Reimann Date: Tue, 16 Apr 2019 20:18:34 -0500 Subject: [PATCH 178/217] 3.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ea2eb9a..4f28fdb9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-api", - "version": "3.1.0", + "version": "3.2.0", "license": "BSD-3-Clause-Clear", "description": "A higher-level wrapper around the Github API.", "main": "dist/components/GitHub.js", From ee64cd1e352ad0354ea6ce0e8abf676a7f57204d Mon Sep 17 00:00:00 2001 From: Clay Jensen-Reimann Date: Tue, 16 Apr 2019 20:45:52 -0500 Subject: [PATCH 179/217] Updated npm deployment token --- .travis.yml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index ee525e3e..6b6bad91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,24 +1,21 @@ sudo: false language: node_js node_js: - - '11' - - '10' - - '8' - +- '11' +- '10' +- '8' cache: directories: - - node_modules + - node_modules before_install: npm install -g npm@latest before_script: - - npm run lint - # - npm run build # will need this when we do sauce testing of compiled files +- npm run lint script: - - npm run test-coverage - # - npm run test-dist # test the compiled files +- npm run test-coverage after_success: - - npm run codecov +- npm run codecov before_deploy: - - npm run build +- npm run build deploy: provider: npm skip_cleanup: true @@ -26,4 +23,4 @@ deploy: tags: true email: clayreimann@gmail.com api_key: - secure: TZHqJ9Kh2Qf0GAVDjEOQ01Ez6rGMYHKwVLOKTbnb7nSzF7iiGNT4UwzvYawm0T9p1k7X1WOqW3l7OEbIwoKl7/9azT4BBJm7qUMRfB9Zio5cL3rKubJVz7+LEEIW4iBeDWLanhUDgy9BO2JKCt8bfp/U2tltgXtu9Fm/UFPALI8= + secure: WnLh1m02aF7NvFNILCZ8KsjPuDeSddQI87y8dwAixStr2FhQyz8FIKZN2Qj1N1Q9ZJvBETe5HWs1c9yOjTKBkD0d/eU2hlpnB9WXEFRJVDjiUuMnpAMMvuqTZwYg6kXq5N+of95PX58AYiBiV/qwsdUr/MgjEEYLt5UZgRYQRvE= From 09384e3981de3ef40caddff62fcefccf6aa89523 Mon Sep 17 00:00:00 2001 From: Jared Rewerts Date: Tue, 16 Apr 2019 18:54:09 -0700 Subject: [PATCH 180/217] Fix browser markdown (#548) Got the code from PR #505. Fixes #451. --- lib/Markdown.js | 2 +- test/dist.spec/index.html | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/Markdown.js b/lib/Markdown.js index edc346cc..ebfbb512 100644 --- a/lib/Markdown.js +++ b/lib/Markdown.js @@ -32,7 +32,7 @@ class Markdown extends Requestable { * @return {Promise} - the promise for the http request */ render(options, cb) { - return this._request('POST', '/markdown', options, cb); + return this._request('POST', '/markdown', options, cb, true); } } diff --git a/test/dist.spec/index.html b/test/dist.spec/index.html index da5a21de..b0a32d7b 100644 --- a/test/dist.spec/index.html +++ b/test/dist.spec/index.html @@ -12,7 +12,7 @@